Merge pull request #3597 from ByteHamster/rework-about-screen
Rework about screen
This commit is contained in:
commit
60a070b56c
308
CONTRIBUTORS
308
CONTRIBUTORS
|
@ -1,194 +1,174 @@
|
|||
DEVELOPERS
|
||||
==========
|
||||
|
||||
Alan Orth
|
||||
Alexander Terczka
|
||||
Alexei Bendebury
|
||||
Ali
|
||||
alifeflow
|
||||
alimemonzx
|
||||
amhokies
|
||||
Anders Bo Rasmussen
|
||||
Anderson Mesquita
|
||||
Andrew Gaul
|
||||
Andrey Krutov
|
||||
Anthony Lieuallen
|
||||
axq
|
||||
bhlee
|
||||
Borjan Tchakaloff
|
||||
brad
|
||||
Brad Pitcher
|
||||
Burt Wiley Snyder
|
||||
danieloeh
|
||||
mfietz
|
||||
TomHennen
|
||||
ByteHamster
|
||||
Cameron Banga
|
||||
Christian Ludwig
|
||||
Christopher Szucko
|
||||
Cj Malone
|
||||
Colin Willson
|
||||
Cédric Cabessa
|
||||
damoasda
|
||||
Danial Klimkin
|
||||
Daniel Oeh
|
||||
David Carver
|
||||
David Reiss
|
||||
Dean Brettle
|
||||
dethstar
|
||||
Dirk Mueller
|
||||
Domingos Lopes
|
||||
drabux
|
||||
egsavage
|
||||
EirikV
|
||||
Eoin Mcloughlin
|
||||
eraymond
|
||||
Ercan Erden
|
||||
falko
|
||||
Falko Lehmann
|
||||
Hannes Achleitner
|
||||
hannesa2
|
||||
Hanno Zulla
|
||||
heckler01
|
||||
Holger Jeromin
|
||||
Humberto Fraga
|
||||
InsidE
|
||||
James Falcon
|
||||
Jan Niehusmann
|
||||
Jan-Peter von Hunnius
|
||||
Jatin Kumar
|
||||
Jens Klingenberg
|
||||
Jens Müller
|
||||
Joe Stein
|
||||
Johan Liesén
|
||||
Kaligule
|
||||
Katrin Leinweber
|
||||
Kevin Dalley
|
||||
Koen Glotzbach
|
||||
kroegerama
|
||||
Kurian Vithayathil
|
||||
LatinSuD
|
||||
Lee Yeong Khang
|
||||
lightonflux
|
||||
ligi
|
||||
Luis Cruz
|
||||
Marc Lasson
|
||||
Martin Fietz
|
||||
Martin Olsson
|
||||
mat tso
|
||||
mateoeh
|
||||
Matias de Andrea
|
||||
Matthew Gaffen
|
||||
Matthias Schütz
|
||||
Matthieu De Beule
|
||||
Maurice Gilden
|
||||
Meir Schwarz
|
||||
Michael Kaiser
|
||||
Michael Scarito
|
||||
Mike Chelen
|
||||
minusf
|
||||
MolarAmbiguity
|
||||
Mostafa Ahangarha
|
||||
Mounir Lamouri
|
||||
mr-intj
|
||||
Nathan Mascitelli
|
||||
Nis Wechselberg
|
||||
Oliver Crow
|
||||
orelogo
|
||||
pachecosf
|
||||
Paul Ortyl
|
||||
Petar Kukolj
|
||||
orionlee
|
||||
domingos86
|
||||
andersonvom
|
||||
patheticpat
|
||||
spacecowboy
|
||||
brad
|
||||
Cj-Malone
|
||||
gaul
|
||||
qkolj
|
||||
Raghul
|
||||
Raghul Jagannathan
|
||||
recalculated
|
||||
rezanejati
|
||||
Ross Harrison
|
||||
Sam Lee
|
||||
Sam Whited
|
||||
saqura
|
||||
Selivanov Pavel
|
||||
Serge
|
||||
Seth Golub
|
||||
pachecosf
|
||||
ahangarha
|
||||
rharriso
|
||||
xgouchet
|
||||
damoasda
|
||||
sevenmaster
|
||||
Shantana Hardy
|
||||
Shinichiro Fujiwara
|
||||
Simon Danner
|
||||
Simon Rutishauser
|
||||
Simon Schubert
|
||||
Soso Tughushi
|
||||
Spencer Visick
|
||||
Stefan Mitrik
|
||||
Stephen Kitt
|
||||
Terence Eden
|
||||
Tim Butram
|
||||
Tobias Preuss
|
||||
Tom Hennen
|
||||
Tom Tom
|
||||
tommy watson
|
||||
tuxayo
|
||||
twiceyuan
|
||||
Udi Finkelstein
|
||||
VarunBarad
|
||||
volhol
|
||||
Volker Hollich
|
||||
Wagubi Brian
|
||||
WangYun
|
||||
William Seemann
|
||||
TheRealFalcon
|
||||
keunes
|
||||
shortspider
|
||||
hannesa2
|
||||
jas14
|
||||
udif
|
||||
dirkmueller
|
||||
jatinkumarg
|
||||
peschmae0
|
||||
orelogo
|
||||
ydinath
|
||||
|
||||
|
||||
TRANSLATORS
|
||||
===========
|
||||
|
||||
CedricCabessa
|
||||
mchelen
|
||||
johnjohndoe
|
||||
dethstar
|
||||
drabux
|
||||
saqura
|
||||
bibz
|
||||
hzulla
|
||||
deandreamatias
|
||||
MeirAtIMDDE
|
||||
egsavage
|
||||
ligi
|
||||
dreiss
|
||||
liesen
|
||||
nereocystis
|
||||
rezanejati
|
||||
twiceyuan
|
||||
HaBaLeS
|
||||
volhol
|
||||
CameronBanga
|
||||
HolgerJeromin
|
||||
xisberto
|
||||
jmue
|
||||
katrinleinweber
|
||||
LatinSuD
|
||||
24hours
|
||||
SosoTughushi
|
||||
fabolhak
|
||||
archibishop
|
||||
alifeflow
|
||||
toggles
|
||||
matdb
|
||||
kingargyle
|
||||
dsmith47
|
||||
hannesaa2
|
||||
jhunnius
|
||||
ShadowIce
|
||||
raghulj
|
||||
raghulrm
|
||||
stevomit
|
||||
skitt
|
||||
mr-intj
|
||||
tuxayo
|
||||
alimemonzx
|
||||
alanorth
|
||||
alexte
|
||||
andrey-krutov
|
||||
arantius
|
||||
bws9000
|
||||
chrissicool
|
||||
cszucko
|
||||
CWftw
|
||||
danielm5
|
||||
ariedov
|
||||
brettle
|
||||
eirikv
|
||||
eerden
|
||||
jannic
|
||||
Foso
|
||||
Kaligule
|
||||
kvithayathil
|
||||
luiscruz
|
||||
mlasson
|
||||
M-arcel
|
||||
mo
|
||||
mdeveloper20
|
||||
mschuetz
|
||||
MolarAmbiguity
|
||||
mounirlamouri
|
||||
ortylp
|
||||
PtilopsisLeucotis
|
||||
SamWhited
|
||||
selivan
|
||||
sonnayasomnambula
|
||||
sethoscope
|
||||
shantanahardy
|
||||
mamehacker
|
||||
danners
|
||||
corecode
|
||||
vimsick
|
||||
edent
|
||||
atrus6
|
||||
waylife
|
||||
wseemann
|
||||
amhokies
|
||||
axq
|
||||
fossterer
|
||||
lightonflux
|
||||
minusf
|
||||
Arabic: abdelrahman.fahem93, abdunnasir, abuzar3.khalid, desha, iDemo, mohamedagamy, msahouli, nabilMaghura
|
||||
Asturian (Spain): enolp
|
||||
Asturian (ast_ES): enolp
|
||||
Azerbaijani: danieloeh, kotfenix
|
||||
Basque: gaztainalde, pospolos, zakurranputza
|
||||
Bulgarian: solusitor
|
||||
Catalan: dvd1985, exort12, javiercoll, lambdani, marcmetallextrem, xc70
|
||||
Catalan (Spain): 00c0c0, javiercoll
|
||||
Catalan (ca_ES): 00c0c0, javiercoll
|
||||
Chinese: dillonbecker, RainSlide, xukeek, yangyang
|
||||
Chinese (China): bebeauties38, domingos86, dudeG, ErlichLiu, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, JayYoung, jhxie, kavdx, kyleehee, linxiangyu, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, stellaxuyi, tupunco, wi24rd, wongsyrone, xukeek, yangyang, yiqiok, YogaGuru
|
||||
Chinese (Taiwan): gugod, nigelinux, pggdt, ymhuang0808
|
||||
Czech (Czech Republic): elich, Hanzmeister, mcepl, petnek, svetlemodry
|
||||
Chinese (zh_CN): bebeauties38, cyril3, domingos86, dudeG, ErlichLiu, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, JayYoung, jhxie, kavdx, kyleehee, linxiangyu, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, stellaxuyi, tupunco, wi24rd, wongsyrone, xukeek, yangyang, yiqiok, YogaGuru
|
||||
Chinese (zh_TW): gugod, nigelinux, pggdt, Solomon, ymhuang0808
|
||||
Czech (cs_CZ): anotheranonymoususer, elich, Hanzmeister, mcepl, petnek, svetlemodry
|
||||
Danish: CasperHN, jhertel
|
||||
Dutch: e2jk, glotzbach, rwv, Vistaus
|
||||
English: mfietz, sterylmreep
|
||||
Estonian: Eraser
|
||||
Finnish: danieloeh, elguitar, Sahtor
|
||||
French: cactux, ChaoticMind, clombion, e2jk, lacouture, LouFex, Matth78, mfietz, Poussinou, PRIMOKORN, repat, Sioul, sterylmreep, TacoTheDank, Tilwa, vcariven, whenrow
|
||||
French: cactux, ChaoticMind, clombion, e2jk, edewaele, lacouture, LouFex, Matth78, mfietz, Poussinou, repat, Sioul, sterylmreep, TacoTheDank, Tilwa, vcariven, whenrow
|
||||
Galician: antiparvos, pikamoku, Raichely
|
||||
German: 112358, altegedanken, barilla, benedikt.g, bitsunited, Buggi, ceving, ChaoticMind, Chaquotay, dab0015, dadosch, DerSilly, die_otto, DJaeger, elkangaroo, enz, fidel, finsterwalder, Foso, GNi33, hightower5, HolgerJeromin, kalei, lohmann, LostInWeb, mfietz, moasda, nilso, repat, SAPlayer, schafia, Schroedingberg, sevenmaster, sucaml, Teaspoon, theonlytruth, weltenwort, Wyrrrd, ypid
|
||||
Greek: antonist, danieloeh, hua2016s, MSavoritias, pavlosv
|
||||
Hebrew (Israel): amir.dafnyman, E1i9, mongoose4004, pinkasey, rellieberman, Yaron, הלוי11
|
||||
Hindi (India): ankitiitb1069, Isaasu, nmabhinandan, purple.coder, siddhusengar
|
||||
Hungarian: glatz.balazs, hurrikan, lna91, marthynw, naren93, tszauer, ttyborg42
|
||||
German: 112358, altegedanken, barilla, benedikt.g, bitsunited, Buggi, ByteHamster, ceving, ChaoticMind, Chaquotay, dab0015, dadosch, DerSilly, die_otto, DJaeger, elkangaroo, enz, fidel, finsterwalder, Foso, GNi33, hightower5, HolgerJeromin, kalei, lohmann, LostInWeb, mfietz, moasda, nilso, repat, SAPlayer, schafia, Schroedingberg, sevenmaster, sucaml, Teaspoon, theonlytruth, weltenwort, Wyrrrd, ypid
|
||||
Modern Greek (1453-): antonist, danieloeh, hua2016s, jack.ath92, MSavoritias, pavlosv
|
||||
Hebrew (he_IL): amir.dafnyman, E1i9, mongoose4004, pinkasey, rellieberman, Yaron, הלוי11
|
||||
Hindi (hi_IN): ankitiitb1069, Isaasu, nmabhinandan, purple.coder, siddhusengar
|
||||
Hungarian: glatz.balazs, hurrikan, lna91, marthynw, meskobalazs, naren93, tszauer, ttyborg42
|
||||
Icelandic: marthjod
|
||||
Indonesian: jff, levirs565, luke137, rezafaiza, silvanael16
|
||||
Italian: aalex70, allin, apanontin, Bonnee, giuseppep, Guybrush88, marco_pag, neonsoftware, sevenmaster, theloca95
|
||||
Italian (Italy): aalex70, allin, apanontin, Bonnee, buongiorgio, giuseppep, Guybrush88, m.chinni, neonsoftware, niccord, nixxo, sevenmaster, theloca95
|
||||
Italian (it_IT): aalex70, allin, apanontin, Bonnee, buongiorgio, giuseppep, Guybrush88, ilmanzo, m.chinni, neonsoftware, niccord, nixxo, sevenmaster, theloca95
|
||||
Japanese: Naofumi, RACER1, sh3llc4t, TranslatorG
|
||||
Kannada (India): thejeshgn
|
||||
Kannada (kn_IN): chiraag.nataraj, thejeshgn
|
||||
Korean: changwoo, libliboom, seungrye, skcha
|
||||
Korean (South Korea): changwoo, seungrye
|
||||
Korean (ko_KR): changwoo, seungrye
|
||||
Lithuanian: naglis
|
||||
Macedonian: krisfremen
|
||||
Malayalam: rashivkp, rubenroy
|
||||
Malayalam: joice, rashivkp, rubenroy
|
||||
Norwegian: timbast
|
||||
Norwegian Bokmål: corkie, danieloeh, heraldo
|
||||
Norwegian Bokmål (Norway): corkie, heraldo, kongk, timbast
|
||||
Norwegian Bokmål (nb_NO): corkie, heraldo, kongk, timbast
|
||||
Persian: ahangarha, F7D, sinamoghaddas
|
||||
Polish: Iwangelion, maniexx, mateossh, mfloryan
|
||||
Polish (Poland): d6210809, hiro2020, Iwangelion, lomapur, mandlus, maniexx, Mephistofeles, shark103, tyle
|
||||
Polish (pl_PL): d6210809, hiro2020, Iwangelion, kRkk, lomapur, mandlus, maniexx, Mephistofeles, shark103, tyle
|
||||
Portuguese: andersonvom, domingos86, emansije, smarquespt
|
||||
Portuguese (Brazil): alexupits, alysonborges, andersonvom, arua, caioau, carlo_valente, castrors, deandreamatias, edman, Firmino, jackmiras, Junin, lipefire, lluccia, lucasmotacr, mbaltar, rogervezaro, RubeensVinicius, SamWilliam, silvanael16
|
||||
Romanian (Romania): corneliu.e, fuzzmz, ralienpp
|
||||
Russian (Russia): astra1, btimofeev, Duke_Raven, gammja, GaynullinDima, MegMasters98, mercutiy, null, overmind88, PtilopsisLeucotis, s.chebotar, shams4real, skvheadless, un_logic, Vladryyu, whereisthetea, zhenya97
|
||||
Slovenian (Slovenia): panter23
|
||||
Spanish: AleksSyntek, andersonvom, coperfix, deandreamatias, domingos86, dvd1985, Fitoschido, frandavid100, hard_ware, javiercoll, Juanmuto, lambdani, LatinSuD, leogrignafini, palopezv, TacoTheDank, tres.14159, wakutiteo
|
||||
Spanish (Spain): andersonvom, dvd1985, e2jk, frandavid100, hard_ware, palopezv, Raichely, TacoTheDank
|
||||
Swahili: kmtra
|
||||
Swahili (Kenya): BonfaceKilz
|
||||
Swedish (Sweden): albin.brantin, Bio, bpnilsson, ChaoticMind, jony08, nilso, SharpMelon, TiloWiklund, TwoD
|
||||
Portuguese (pt_BR): alexupits, alysonborges, andersonvom, arua, caioau, carlo_valente, castrors, deandreamatias, edman, Firmino, jackmiras, Junin, lipefire, lluccia, lucasmotacr, mbaltar, rogervezaro, RubeensVinicius, SamWilliam, silvanael16
|
||||
Romanian (ro_RO): corneliu.e, fuzzmz, ralienpp
|
||||
Russian (ru_RU): astra1, btimofeev, Duke_Raven, gammja, GaynullinDima, MegMasters98, mercutiy, null, overmind88, PtilopsisLeucotis, s.chebotar, shams4real, skvheadless, un_logic, Vladryyu, whereisthetea, zhenya97
|
||||
Slovenian (sl_SI): panter23
|
||||
Spanish: AleksSyntek, andersonvom, Atreyu94, coperfix, deandreamatias, domingos86, dvd1985, Fitoschido, frandavid100, hard_ware, javiercoll, Juanmuto, lambdani, LatinSuD, leogrignafini, palopezv, TacoTheDank, tres.14159, wakutiteo
|
||||
Spanish (es_ES): andersonvom, dvd1985, e2jk, frandavid100, hard_ware, palopezv, Raichely, TacoTheDank
|
||||
Swahili (macrolanguage): kmtra
|
||||
Swahili (macrolanguage) (sw_KE): BonfaceKilz
|
||||
Swedish (sv_SE): albin.brantin, Bio, bpnilsson, ChaoticMind, jony08, nilso, SharpMelon, TiloWiklund, TwoD
|
||||
Telugu: Isaasu, veeven
|
||||
Turkish: basarancaner, brsata, Erdy, golcuk, overbite, Slsdem
|
||||
Ukrainian (Ukraine): older, paul_sm, sergiyr, zhenya97
|
||||
Ukrainian (uk_UA): older, paul_sm, sergiyr, zhenya97
|
||||
Vietnamese: abnvolk, nguyenvui, ppanhh, vietnamesel10n
|
||||
Vietnamese (Vietnam): bizover
|
||||
Vietnamese (vi_VN): bizover
|
||||
|
|
|
@ -24,6 +24,12 @@ android {
|
|||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
generatedDensities = []
|
||||
|
||||
def commit = "Unknown commit"
|
||||
try {
|
||||
commit = "git rev-parse --short HEAD".execute().text.trim()
|
||||
} catch (Exception ignore) { }
|
||||
buildConfigField "String", "COMMIT_HASH", ('"' + commit + '"')
|
||||
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
arguments = [ eventBusIndex : 'de.danoeh.antennapod.ApEventBusIndex' ]
|
||||
|
@ -181,18 +187,7 @@ if (project.hasProperty("antennaPodServiceAccountEmail")) {
|
|||
}
|
||||
}
|
||||
|
||||
task filterAbout(type: Copy) {
|
||||
from "src/main/templates/about.html"
|
||||
into "src/main/assets"
|
||||
filter(ReplaceTokens, tokens: [
|
||||
versionname: android.defaultConfig.versionName,
|
||||
commit : "git rev-parse --short HEAD".execute().text,
|
||||
year : new Date().format('yyyy')])
|
||||
outputs.upToDateWhen { false }
|
||||
}
|
||||
|
||||
task copyTextFiles(type: Copy) {
|
||||
from "../CONTRIBUTORS"
|
||||
task copyLicense(type: Copy) {
|
||||
from "../LICENSE"
|
||||
into "src/main/assets/"
|
||||
rename { String fileName ->
|
||||
|
@ -201,5 +196,5 @@ task copyTextFiles(type: Copy) {
|
|||
outputs.upToDateWhen { false }
|
||||
}
|
||||
|
||||
preBuild.dependsOn filterAbout, copyTextFiles
|
||||
preBuild.dependsOn copyLicense
|
||||
|
||||
|
|
|
@ -127,8 +127,3 @@
|
|||
-dontwarn java.lang.management.ManagementFactory
|
||||
-dontwarn java.lang.management.ThreadInfo
|
||||
-dontwarn java.lang.management.ThreadMXBean
|
||||
|
||||
# About screen teaser in html view
|
||||
-keep class de.danoeh.antennapod**.R$drawable {
|
||||
public int teaser;
|
||||
}
|
||||
|
|
|
@ -140,14 +140,6 @@
|
|||
|
||||
<activity android:name=".activity.StorageErrorActivity">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.AboutActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/about_pref">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.ImportExportActivity"
|
||||
android:label="@string/import_export">
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
danieloeh;968613;Original creator of AntennaPod (retired)
|
||||
mfietz;6860662;Maintainer
|
||||
TomHennen;5216560;Maintainer (retired)
|
||||
ByteHamster;5811634;Maintainer
|
||||
orionlee;250644;Contributor
|
||||
domingos86;9538859;Contributor
|
||||
andersonvom;69922;Contributor
|
||||
patheticpat;16046;Contributor
|
||||
spacecowboy;223655;Contributor
|
||||
brad;1614;Contributor
|
||||
Cj-Malone;10121513;Contributor
|
||||
gaul;848247;Contributor
|
||||
qkolj;6667105;Contributor
|
||||
pachecosf;46357909;Contributor
|
||||
ahangarha;11241315;Contributor
|
||||
rharriso;570910;Contributor
|
||||
xgouchet;818706;Contributor
|
||||
damoasda;46045854;Contributor
|
||||
sevenmaster;12869538;Contributor
|
||||
TheRealFalcon;153674;Contributor
|
||||
keunes;11229646;Contributor
|
||||
shortspider;5712543;Contributor
|
||||
hannesa2;3314607;Contributor
|
||||
jas14;569991;Contributor
|
||||
udif;809640;Contributor
|
||||
dirkmueller;1029152;Contributor
|
||||
jatinkumarg;20503830;Contributor
|
||||
peschmae0;4450993;Contributor
|
||||
orelogo;15976578;Contributor
|
||||
ydinath;4193331;Contributor
|
||||
CedricCabessa;365097;Contributor
|
||||
mchelen;30691;Contributor
|
||||
johnjohndoe;144518;Contributor
|
||||
dethstar;1239177;Contributor
|
||||
drabux;10663142;Contributor
|
||||
saqura;1935380;Contributor
|
||||
bibz;5141956;Contributor
|
||||
hzulla;1705654;Contributor
|
||||
deandreamatias;21011641;Contributor
|
||||
MeirAtIMDDE;4421079;Contributor
|
||||
egsavage;126165;Contributor
|
||||
ligi;111600;Contributor
|
||||
dreiss;4121;Contributor
|
||||
liesen;26872;Contributor
|
||||
nereocystis;2257107;Contributor
|
||||
rezanejati;16049370;Contributor
|
||||
twiceyuan;2619800;Contributor
|
||||
HaBaLeS;730902;Contributor
|
||||
volhol;11587858;Contributor
|
||||
CameronBanga;611354;Contributor
|
||||
HolgerJeromin;2410353;Contributor
|
||||
xisberto;1914956;Contributor
|
||||
jmue;898577;Contributor
|
||||
katrinleinweber;9948149;Contributor
|
||||
LatinSuD;451487;Contributor
|
||||
24hours;650407;Contributor
|
||||
SosoTughushi;19908097;Contributor
|
||||
fabolhak;20029691;Contributor
|
||||
archibishop;36948493;Contributor
|
||||
alifeflow;24603829;Contributor
|
||||
toggles;14695;Contributor
|
||||
matdb;48329535;Contributor
|
||||
kingargyle;177042;Contributor
|
||||
dsmith47;14109426;Contributor
|
||||
hannesaa2;18496079;Contributor
|
||||
jhunnius;9149031;Contributor
|
||||
ShadowIce;59123;Contributor
|
||||
raghulj;57007;Contributor
|
||||
raghulrm;5362986;Contributor
|
||||
stevomit;205959;Contributor
|
||||
skitt;2128935;Contributor
|
||||
mr-intj;6268767;Contributor
|
||||
tuxayo;2678215;Contributor
|
||||
alimemonzx;44647595;Contributor
|
||||
alanorth;191754;Contributor
|
||||
alexte;7724992;Contributor
|
||||
andrey-krutov;1488973;Contributor
|
||||
arantius;84729;Contributor
|
||||
bws9000;262625;Contributor
|
||||
chrissicool;232590;Contributor
|
||||
cszucko;1810383;Contributor
|
||||
CWftw;1498303;Contributor
|
||||
danielm5;66779;Contributor
|
||||
ariedov;958646;Contributor
|
||||
brettle;118192;Contributor
|
||||
eirikv;4076243;Contributor
|
||||
eerden;277513;Contributor
|
||||
jannic;232606;Contributor
|
||||
Foso;5015532;Contributor
|
||||
Kaligule;3586246;Contributor
|
||||
kvithayathil;1056073;Contributor
|
||||
luiscruz;1080714;Contributor
|
||||
mlasson;5814258;Contributor
|
||||
M-arcel;56698158;Contributor
|
||||
mo;7117;Contributor
|
||||
mdeveloper20;2319126;Contributor
|
||||
mschuetz;108637;Contributor
|
||||
MolarAmbiguity;10541979;Contributor
|
||||
mounirlamouri;573590;Contributor
|
||||
ortylp;470439;Contributor
|
||||
PtilopsisLeucotis;54054883;Contributor
|
||||
SamWhited;512573;Contributor
|
||||
selivan;1208989;Contributor
|
||||
sonnayasomnambula;7716779;Contributor
|
||||
sethoscope;534043;Contributor
|
||||
shantanahardy;26757164;Contributor
|
||||
mamehacker;16738348;Contributor
|
||||
danners;116551;Contributor
|
||||
corecode;177979;Contributor
|
||||
vimsick;20211590;Contributor
|
||||
edent;837136;Contributor
|
||||
atrus6;357881;Contributor
|
||||
waylife;3348620;Contributor
|
||||
wseemann;2296196;Contributor
|
||||
amhokies;3124968;Contributor
|
||||
axq;5077221;Contributor
|
||||
fossterer;4236021;Contributor
|
||||
lightonflux;1377943;Contributor
|
||||
minusf;3632883;Contributor
|
|
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<libraries>
|
||||
<library
|
||||
name="AntennaPod"
|
||||
author="The AntennaPod team"
|
||||
website="https://github.com/AntennaPod/AntennaPod/"
|
||||
license="MIT"
|
||||
licenseText="LICENSE.txt" />
|
||||
<library
|
||||
name="AntennaPod-AudioPlayer"
|
||||
author="The AntennaPod team"
|
||||
website="https://github.com/AntennaPod/AntennaPod-AudioPlayer/"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="Apache Commons"
|
||||
author="The Apache Software Foundation"
|
||||
website="http://commons.apache.org/"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="EventBus"
|
||||
author="greenrobot"
|
||||
website="https://github.com/greenrobot/EventBus"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="ExoPlayer"
|
||||
author="Google"
|
||||
website="https://github.com/google/ExoPlayer"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="Floating Action Button Speed Dial"
|
||||
author="Roberto Leinardi"
|
||||
website="https://github.com/leinardi/FloatingActionButtonSpeedDial"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="Glide"
|
||||
author="bumptech"
|
||||
website="https://github.com/bumptech/glide/"
|
||||
license="Simplified BSD"
|
||||
licenseText="LICENSE_GLIDE.txt" />
|
||||
<library
|
||||
name="Iconify"
|
||||
author="Joan Zapata"
|
||||
website="https://github.com/JoanZapata/android-iconify"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_ANDROID_ICONIFY.txt" />
|
||||
<library
|
||||
name="jsoup"
|
||||
author="Jonathan Hedley"
|
||||
website="http://jsoup.org/"
|
||||
license="MIT"
|
||||
licenseText="LICENSE_JSOUP.txt" />
|
||||
<library
|
||||
name="Material Design Icons"
|
||||
author="Google"
|
||||
website="https://github.com/google/material-design-icons"
|
||||
license="Attribution-ShareAlike 4.0 International"
|
||||
licenseText="LICENSE_MATERIAL_DESIGN_ICONS.txt" />
|
||||
<library
|
||||
name="Material Design Icons"
|
||||
author="Templarian"
|
||||
website="https://github.com/Templarian/MaterialDesign"
|
||||
license="SIL Open Font, Version 1.1"
|
||||
licenseText="LICENSE_SIL.txt" />
|
||||
<library
|
||||
name="OkHttp"
|
||||
author="Square"
|
||||
website="https://github.com/square/okhttp"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_OKHTTP.txt" />
|
||||
<library
|
||||
name="Okio"
|
||||
author="Square"
|
||||
website="https://github.com/square/okio"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="Presto Client"
|
||||
author="aocate"
|
||||
website="http://www.aocate.com/presto/"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_PRESTO.txt" />
|
||||
<library
|
||||
name="RecyclerView-FlexibleDivider"
|
||||
author="yqritc"
|
||||
website="https://github.com/yqritc/RecyclerView-FlexibleDivider"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="RxAndroid"
|
||||
author="ReactiveX"
|
||||
website="https://github.com/ReactiveX/RxAndroid"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="StackBlur"
|
||||
author="Enrique López Mañas"
|
||||
website="https://github.com/kikoso/android-stackblur"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_APACHE-2.0.txt" />
|
||||
<library
|
||||
name="Triangle Label View"
|
||||
author="Shota Saito"
|
||||
website="https://github.com/shts/TriangleLabelView"
|
||||
license="Apache 2.0"
|
||||
licenseText="LICENSE_TRIANGLE_LABEL_VIEW.txt" />
|
||||
</libraries>
|
|
@ -0,0 +1,55 @@
|
|||
Arabic;abdelrahman.fahem93, abdunnasir, abuzar3.khalid, desha, iDemo, mohamedagamy, msahouli, nabilMaghura
|
||||
Asturian (ast_ES);enolp
|
||||
Azerbaijani;danieloeh, kotfenix
|
||||
Basque;gaztainalde, pospolos, zakurranputza
|
||||
Bulgarian;solusitor
|
||||
Catalan;dvd1985, exort12, javiercoll, lambdani, marcmetallextrem, xc70
|
||||
Catalan (ca_ES);00c0c0, javiercoll
|
||||
Chinese;dillonbecker, RainSlide, xukeek, yangyang
|
||||
Chinese (zh_CN);bebeauties38, cyril3, domingos86, dudeG, ErlichLiu, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, JayYoung, jhxie, kavdx, kyleehee, linxiangyu, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, stellaxuyi, tupunco, wi24rd, wongsyrone, xukeek, yangyang, yiqiok, YogaGuru
|
||||
Chinese (zh_TW);gugod, nigelinux, pggdt, Solomon, ymhuang0808
|
||||
Czech (cs_CZ);anotheranonymoususer, elich, Hanzmeister, mcepl, petnek, svetlemodry
|
||||
Danish;CasperHN, jhertel
|
||||
Dutch;e2jk, glotzbach, rwv, Vistaus
|
||||
English;mfietz, sterylmreep
|
||||
Estonian;Eraser
|
||||
Finnish;danieloeh, elguitar, Sahtor
|
||||
French;cactux, ChaoticMind, clombion, e2jk, edewaele, lacouture, LouFex, Matth78, mfietz, Poussinou, repat, Sioul, sterylmreep, TacoTheDank, Tilwa, vcariven, whenrow
|
||||
Galician;antiparvos, pikamoku, Raichely
|
||||
German;112358, altegedanken, barilla, benedikt.g, bitsunited, Buggi, ByteHamster, ceving, ChaoticMind, Chaquotay, dab0015, dadosch, DerSilly, die_otto, DJaeger, elkangaroo, enz, fidel, finsterwalder, Foso, GNi33, hightower5, HolgerJeromin, kalei, lohmann, LostInWeb, mfietz, moasda, nilso, repat, SAPlayer, schafia, Schroedingberg, sevenmaster, sucaml, Teaspoon, theonlytruth, weltenwort, Wyrrrd, ypid
|
||||
Modern Greek (1453-);antonist, danieloeh, hua2016s, jack.ath92, MSavoritias, pavlosv
|
||||
Hebrew (he_IL);amir.dafnyman, E1i9, mongoose4004, pinkasey, rellieberman, Yaron, הלוי11
|
||||
Hindi (hi_IN);ankitiitb1069, Isaasu, nmabhinandan, purple.coder, siddhusengar
|
||||
Hungarian;glatz.balazs, hurrikan, lna91, marthynw, meskobalazs, naren93, tszauer, ttyborg42
|
||||
Icelandic;marthjod
|
||||
Indonesian;jff, levirs565, luke137, rezafaiza, silvanael16
|
||||
Italian;aalex70, allin, apanontin, Bonnee, giuseppep, Guybrush88, marco_pag, neonsoftware, sevenmaster, theloca95
|
||||
Italian (it_IT);aalex70, allin, apanontin, Bonnee, buongiorgio, giuseppep, Guybrush88, ilmanzo, m.chinni, neonsoftware, niccord, nixxo, sevenmaster, theloca95
|
||||
Japanese;Naofumi, RACER1, sh3llc4t, TranslatorG
|
||||
Kannada (kn_IN);chiraag.nataraj, thejeshgn
|
||||
Korean;changwoo, libliboom, seungrye, skcha
|
||||
Korean (ko_KR);changwoo, seungrye
|
||||
Lithuanian;naglis
|
||||
Macedonian;krisfremen
|
||||
Malayalam;joice, rashivkp, rubenroy
|
||||
Norwegian;timbast
|
||||
Norwegian Bokmål;corkie, danieloeh, heraldo
|
||||
Norwegian Bokmål (nb_NO);corkie, heraldo, kongk, timbast
|
||||
Persian;ahangarha, F7D, sinamoghaddas
|
||||
Polish;Iwangelion, maniexx, mateossh, mfloryan
|
||||
Polish (pl_PL);d6210809, hiro2020, Iwangelion, kRkk, lomapur, mandlus, maniexx, Mephistofeles, shark103, tyle
|
||||
Portuguese;andersonvom, domingos86, emansije, smarquespt
|
||||
Portuguese (pt_BR);alexupits, alysonborges, andersonvom, arua, caioau, carlo_valente, castrors, deandreamatias, edman, Firmino, jackmiras, Junin, lipefire, lluccia, lucasmotacr, mbaltar, rogervezaro, RubeensVinicius, SamWilliam, silvanael16
|
||||
Romanian (ro_RO);corneliu.e, fuzzmz, ralienpp
|
||||
Russian (ru_RU);astra1, btimofeev, Duke_Raven, gammja, GaynullinDima, MegMasters98, mercutiy, null, overmind88, PtilopsisLeucotis, s.chebotar, shams4real, skvheadless, un_logic, Vladryyu, whereisthetea, zhenya97
|
||||
Slovenian (sl_SI);panter23
|
||||
Spanish;AleksSyntek, andersonvom, Atreyu94, coperfix, deandreamatias, domingos86, dvd1985, Fitoschido, frandavid100, hard_ware, javiercoll, Juanmuto, lambdani, LatinSuD, leogrignafini, palopezv, TacoTheDank, tres.14159, wakutiteo
|
||||
Spanish (es_ES);andersonvom, dvd1985, e2jk, frandavid100, hard_ware, palopezv, Raichely, TacoTheDank
|
||||
Swahili (macrolanguage);kmtra
|
||||
Swahili (macrolanguage) (sw_KE);BonfaceKilz
|
||||
Swedish (sv_SE);albin.brantin, Bio, bpnilsson, ChaoticMind, jony08, nilso, SharpMelon, TiloWiklund, TwoD
|
||||
Telugu;Isaasu, veeven
|
||||
Turkish;basarancaner, brsata, Erdy, golcuk, overbite, Slsdem
|
||||
Ukrainian (uk_UA);older, paul_sm, sergiyr, zhenya97
|
||||
Vietnamese;abnvolk, nguyenvui, ppanhh, vietnamesel10n
|
||||
Vietnamese (vi_VN);bizover
|
|
|
@ -1,158 +0,0 @@
|
|||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import de.danoeh.antennapod.core.util.IntentUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
* Displays the 'about' screen
|
||||
*/
|
||||
public class AboutActivity extends AppCompatActivity {
|
||||
|
||||
private static final String TAG = AboutActivity.class.getSimpleName();
|
||||
|
||||
private WebView webView;
|
||||
private LinearLayout webViewContainer;
|
||||
private Disposable disposable;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
||||
setContentView(R.layout.about);
|
||||
webViewContainer = findViewById(R.id.webViewContainer);
|
||||
webView = findViewById(R.id.webViewAbout);
|
||||
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
|
||||
}
|
||||
webView.setBackgroundColor(Color.TRANSPARENT);
|
||||
webView.setWebViewClient(new WebViewClient() {
|
||||
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
if (url.startsWith("http")) {
|
||||
IntentUtils.openInBrowser(AboutActivity.this, url);
|
||||
return true;
|
||||
} else {
|
||||
url = url.replace("file:///android_asset/", "");
|
||||
loadAsset(url);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
loadAsset("about.html");
|
||||
}
|
||||
|
||||
private void loadAsset(String filename) {
|
||||
disposable = Single.create(subscriber -> {
|
||||
InputStream input = null;
|
||||
try {
|
||||
TypedArray res = AboutActivity.this.getTheme().obtainStyledAttributes(
|
||||
new int[] { R.attr.about_screen_font_color, R.attr.about_screen_background,
|
||||
R.attr.about_screen_card_background, R.attr.about_screen_card_border});
|
||||
String fontColor = String.format("#%06X", 0xFFFFFF & res.getColor(0, 0));
|
||||
String backgroundColor = String.format("#%06X", 0xFFFFFF & res.getColor(1, 0));
|
||||
String cardBackground = String.format("#%06X", 0xFFFFFF & res.getColor(2, 0));
|
||||
String cardBorder = String.format("#%06X", 0xFFFFFF & res.getColor(3, 0));
|
||||
res.recycle();
|
||||
input = getAssets().open(filename);
|
||||
String webViewData = IOUtils.toString(input, Charset.defaultCharset());
|
||||
if (!webViewData.startsWith("<!DOCTYPE html>")) {
|
||||
webViewData = webViewData.replace("%", "%");
|
||||
webViewData =
|
||||
"<!DOCTYPE html>" +
|
||||
"<html>" +
|
||||
"<head>" +
|
||||
" <meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">" +
|
||||
" <style type=\"text/css\">" +
|
||||
" @font-face {" +
|
||||
" font-family: 'Roboto-Light';" +
|
||||
" src: url('file:///android_asset/Roboto-Light.ttf');" +
|
||||
" }" +
|
||||
" * {" +
|
||||
" color: @fontcolor@;" +
|
||||
" font-family: roboto-Light;" +
|
||||
" font-size: 8pt;" +
|
||||
" }" +
|
||||
" </style>" +
|
||||
"</head><body><p>" + webViewData + "</p></body></html>";
|
||||
webViewData = webViewData.replace("\n", "<br/>");
|
||||
}
|
||||
webViewData = webViewData.replace("@fontcolor@", fontColor);
|
||||
webViewData = webViewData.replace("@background@", backgroundColor);
|
||||
webViewData = webViewData.replace("@card_background@", cardBackground);
|
||||
webViewData = webViewData.replace("@card_border@", cardBorder);
|
||||
subscriber.onSuccess(webViewData);
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
subscriber.onError(e);
|
||||
} finally {
|
||||
IOUtils.closeQuietly(input);
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
webViewData ->
|
||||
webView.loadDataWithBaseURL("file:///android_asset/", webViewData.toString(), "text/html", "utf-8", "file:///android_asset/" + filename.toString()),
|
||||
error -> Log.e(TAG, Log.getStackTraceString(error))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (webView.canGoBack()) {
|
||||
webView.goBack();
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
} else {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (disposable != null) {
|
||||
disposable.dispose();
|
||||
}
|
||||
if (webViewContainer != null && webView != null) {
|
||||
webViewContainer.removeAllViews();
|
||||
webView.destroy();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package de.danoeh.antennapod.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import de.danoeh.antennapod.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Displays a list of items that have a subtitle and an icon.
|
||||
*/
|
||||
public class SimpleIconListAdapter<T extends SimpleIconListAdapter.ListItem> extends ArrayAdapter<T> {
|
||||
private final Context context;
|
||||
private final List<T> listItems;
|
||||
|
||||
public SimpleIconListAdapter(Context context, List<T> listItems) {
|
||||
super(context, R.layout.simple_icon_list_item, listItems);
|
||||
this.context = context;
|
||||
this.listItems = listItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View view, ViewGroup parent) {
|
||||
if (view == null) {
|
||||
view = View.inflate(context, R.layout.simple_icon_list_item, null);
|
||||
}
|
||||
|
||||
ListItem item = listItems.get(position);
|
||||
((TextView) view.findViewById(R.id.title)).setText(item.title);
|
||||
((TextView) view.findViewById(R.id.subtitle)).setText(item.subtitle);
|
||||
Glide.with(context)
|
||||
.load(item.imageUrl)
|
||||
.apply(new RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.fitCenter()
|
||||
.dontAnimate())
|
||||
.into(((ImageView) view.findViewById(R.id.icon)));
|
||||
return view;
|
||||
}
|
||||
|
||||
public static class ListItem {
|
||||
public final String title;
|
||||
public final String subtitle;
|
||||
public final String imageUrl;
|
||||
|
||||
public ListItem(String title, String subtitle, String imageUrl) {
|
||||
this.title = title;
|
||||
this.subtitle = subtitle;
|
||||
this.imageUrl = imageUrl;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package de.danoeh.antennapod.fragment.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.ListFragment;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.SingleOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AboutDevelopersFragment extends ListFragment {
|
||||
private Disposable developersLoader;
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
getListView().setDivider(null);
|
||||
getListView().setSelector(android.R.color.transparent);
|
||||
|
||||
developersLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
|
||||
ArrayList<SimpleIconListAdapter.ListItem> developers = new ArrayList<>();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
getContext().getAssets().open("developers.csv")));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String[] info = line.split(";");
|
||||
developers.add(new SimpleIconListAdapter.ListItem(info[0], info[2],
|
||||
"https://avatars2.githubusercontent.com/u/" + info[1] + "?s=60&v=4"));
|
||||
}
|
||||
emitter.onSuccess(developers);
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
developers -> setListAdapter(new SimpleIconListAdapter<>(getContext(), developers)),
|
||||
error -> Toast.makeText(getContext(), "Error while loading developers", Toast.LENGTH_LONG).show()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if (developersLoader != null) {
|
||||
developersLoader.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.developers);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package de.danoeh.antennapod.fragment.preferences;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.core.util.IntentUtils;
|
||||
|
||||
public class AboutFragment extends PreferenceFragmentCompat {
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
addPreferencesFromResource(R.xml.preferences_about);
|
||||
|
||||
findPreference("about_version").setSummary(String.format(
|
||||
"%s (%s)", BuildConfig.VERSION_NAME, BuildConfig.COMMIT_HASH));
|
||||
findPreference("about_version").setOnPreferenceClickListener((preference) -> {
|
||||
ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
ClipData clip = ClipData.newPlainText(getString(R.string.bug_report_title),
|
||||
findPreference("about_version").getSummary());
|
||||
clipboard.setPrimaryClip(clip);
|
||||
Snackbar.make(getView(), R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT).show();
|
||||
return true;
|
||||
});
|
||||
findPreference("about_developers").setOnPreferenceClickListener((preference) -> {
|
||||
getFragmentManager().beginTransaction().replace(R.id.content, new AboutDevelopersFragment())
|
||||
.addToBackStack(getString(R.string.developers)).commit();
|
||||
return true;
|
||||
});
|
||||
findPreference("about_translators").setOnPreferenceClickListener((preference) -> {
|
||||
getFragmentManager().beginTransaction().replace(R.id.content, new AboutTranslatorsFragment())
|
||||
.addToBackStack(getString(R.string.translators)).commit();
|
||||
return true;
|
||||
});
|
||||
findPreference("about_privacy_policy").setOnPreferenceClickListener((preference) -> {
|
||||
IntentUtils.openInBrowser(getContext(), "https://antennapod.org/privacy.html");
|
||||
return true;
|
||||
});
|
||||
findPreference("about_licenses").setOnPreferenceClickListener((preference) -> {
|
||||
getFragmentManager().beginTransaction().replace(R.id.content, new AboutLicensesFragment())
|
||||
.addToBackStack(getString(R.string.translators)).commit();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.about_pref);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
package de.danoeh.antennapod.fragment.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.ListFragment;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
|
||||
import de.danoeh.antennapod.core.util.IntentUtils;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.SingleOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AboutLicensesFragment extends ListFragment {
|
||||
private Disposable licensesLoader;
|
||||
private final ArrayList<LicenseItem> licenses = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
getListView().setDivider(null);
|
||||
|
||||
licensesLoader = Single.create((SingleOnSubscribe<ArrayList<LicenseItem>>) emitter -> {
|
||||
licenses.clear();
|
||||
InputStream stream = getContext().getAssets().open("licenses.xml");
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
NodeList libraryList = docBuilder.parse(stream).getElementsByTagName("library");
|
||||
for (int i = 0; i < libraryList.getLength(); i++) {
|
||||
NamedNodeMap lib = libraryList.item(i).getAttributes();
|
||||
licenses.add(new LicenseItem(
|
||||
lib.getNamedItem("name").getTextContent(),
|
||||
String.format("By %s, %s license",
|
||||
lib.getNamedItem("author").getTextContent(),
|
||||
lib.getNamedItem("license").getTextContent()),
|
||||
null,
|
||||
lib.getNamedItem("website").getTextContent(),
|
||||
lib.getNamedItem("licenseText").getTextContent()));
|
||||
}
|
||||
emitter.onSuccess(licenses);
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
developers -> setListAdapter(new SimpleIconListAdapter<LicenseItem>(getContext(), developers)),
|
||||
error -> Toast.makeText(getContext(), "Error while loading licenses", Toast.LENGTH_LONG).show()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private static class LicenseItem extends SimpleIconListAdapter.ListItem {
|
||||
final String licenseUrl;
|
||||
final String licenseTextFile;
|
||||
|
||||
LicenseItem(String title, String subtitle, String imageUrl, String licenseUrl, String licenseTextFile) {
|
||||
super(title, subtitle, imageUrl);
|
||||
this.licenseUrl = licenseUrl;
|
||||
this.licenseTextFile = licenseTextFile;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
|
||||
super.onListItemClick(l, v, position, id);
|
||||
|
||||
LicenseItem item = licenses.get(position);
|
||||
CharSequence[] items = {"View website", "View license"};
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setTitle(item.title)
|
||||
.setItems(items, (dialog, which) -> {
|
||||
if (which == 0) {
|
||||
IntentUtils.openInBrowser(getContext(), item.licenseUrl);
|
||||
} else if (which == 1) {
|
||||
showLicenseText(item.licenseTextFile);
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
private void showLicenseText(String licenseTextFile) {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
getContext().getAssets().open(licenseTextFile)));
|
||||
StringBuilder licenseText = new StringBuilder();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
licenseText.append(line).append("\n");
|
||||
}
|
||||
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setMessage(licenseText)
|
||||
.show();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if (licensesLoader != null) {
|
||||
licensesLoader.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.licenses);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package de.danoeh.antennapod.fragment.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.ListFragment;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.SingleOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AboutTranslatorsFragment extends ListFragment {
|
||||
private Disposable translatorsLoader;
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
getListView().setDivider(null);
|
||||
getListView().setSelector(android.R.color.transparent);
|
||||
|
||||
translatorsLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
|
||||
ArrayList<SimpleIconListAdapter.ListItem> translators = new ArrayList<>();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
getContext().getAssets().open("translators.csv")));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String[] info = line.split(";");
|
||||
translators.add(new SimpleIconListAdapter.ListItem(info[0], info[1], null));
|
||||
}
|
||||
emitter.onSuccess(translators);
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
translators -> setListAdapter(new SimpleIconListAdapter<>(getContext(), translators)),
|
||||
error -> Toast.makeText(getContext(), "Error while loading translators", Toast.LENGTH_LONG).show()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if (translatorsLoader != null) {
|
||||
translatorsLoader.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.translators);
|
||||
}
|
||||
}
|
|
@ -7,7 +7,6 @@ import androidx.preference.PreferenceFragmentCompat;
|
|||
import com.bytehamster.lib.preferencesearch.SearchConfiguration;
|
||||
import com.bytehamster.lib.preferencesearch.SearchPreference;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.AboutActivity;
|
||||
import de.danoeh.antennapod.activity.BugReportActivity;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.core.util.IntentUtils;
|
||||
|
@ -63,7 +62,8 @@ public class MainPreferencesFragment extends PreferenceFragmentCompat {
|
|||
|
||||
findPreference(PREF_ABOUT).setOnPreferenceClickListener(
|
||||
preference -> {
|
||||
startActivity(new Intent(getActivity(), AboutActivity.class));
|
||||
getFragmentManager().beginTransaction().replace(R.id.content, new AboutFragment())
|
||||
.addToBackStack(getString(R.string.about_pref)).commit();
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_height="wrap_content" app:srcCompat="@drawable/teaser" />
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:padding="16dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:id="@+id/icon"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="16dp">
|
||||
|
||||
<TextView
|
||||
tools:text="Title"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="16sp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/title"/>
|
||||
|
||||
<TextView
|
||||
tools:text="Subtitle"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:textSize="14sp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/subtitle"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<Preference
|
||||
android:layout="@layout/about_teaser"/>
|
||||
<Preference
|
||||
android:key="about_version"
|
||||
android:title="@string/antennapod_version"
|
||||
android:icon="?attr/ic_unfav"
|
||||
android:summary="1.7.2 (asd8qs)"/>
|
||||
<Preference
|
||||
android:key="about_developers"
|
||||
android:icon="?attr/ic_settings"
|
||||
android:summary="@string/developers_summary"
|
||||
android:title="@string/developers"/>
|
||||
<Preference
|
||||
android:key="about_translators"
|
||||
android:icon="?attr/ic_chat"
|
||||
android:summary="@string/translators_summary"
|
||||
android:title="@string/translators"/>
|
||||
<Preference
|
||||
android:key="about_privacy_policy"
|
||||
android:icon="?attr/ic_questionmark"
|
||||
android:summary="https://antennapod.org/privacy.html"
|
||||
android:title="@string/privacy_policy"/>
|
||||
<Preference
|
||||
android:key="about_licenses"
|
||||
android:icon="?attr/action_about"
|
||||
android:summary="@string/licenses_summary"
|
||||
android:title="@string/licenses"/>
|
||||
|
||||
</PreferenceScreen>
|
|
@ -1,183 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||
<style type="text/css">
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Light';
|
||||
src: url('file:///android_asset/Roboto-Light.ttf');
|
||||
}
|
||||
|
||||
html, body {
|
||||
background: @background@;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
* {
|
||||
color: @fontcolor@;
|
||||
font-family: roboto-Light;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
img#logo {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-height: 200px;
|
||||
max-height: 50vh;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
div#logobackground{
|
||||
width: 100%;
|
||||
background: #42a5f5;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: @card_background@;
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
border: 1px solid @card_border@;
|
||||
border-top-width: 0;
|
||||
border-bottom-width: 2px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 15pt;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 13pt;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: 14px;
|
||||
color: #00A8DF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
<title>About AntennaPod</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="logobackground">
|
||||
<img id="logo" src="file:///android_res/drawable/teaser.png" alt="Logo"/>
|
||||
</div>
|
||||
|
||||
<h1>AntennaPod</h1>
|
||||
|
||||
<div class="card">
|
||||
<table>
|
||||
<tr><td>Version:</td><td><b>@versionname@</b></td></tr>
|
||||
<tr><td>Commit:</td><td><b>@commit@</b></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
Created by Daniel Oeh<br />
|
||||
Copyright © 2012-@year@<br />
|
||||
AntennaPod Contributors <a href="CONTRIBUTORS.txt">(View)</a><br />
|
||||
Licensed under the MIT License <a href="LICENSE.txt">(View)</a><br />
|
||||
Privacy Policy <a href="https://antennapod.org/privacy.html">(View)</a>
|
||||
</div>
|
||||
|
||||
<h1>Used libraries</h1>
|
||||
|
||||
<div class="card">
|
||||
<h2>Apache Commons <a href="http://commons.apache.org/">(Link)</a></h2>
|
||||
by The Apache Software Foundation, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>EventBus <a href="https://github.com/greenrobot/EventBus">(Link)</a></h2>
|
||||
by greenrobot, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>ExoPlayer <a href="https://github.com/google/ExoPlayer">(Link)</a></h2>
|
||||
by Google, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Floating Action Button Speed Dial <a href="https://github.com/leinardi/FloatingActionButtonSpeedDial">(Link)</a></h2>
|
||||
by Roberto Leinardi, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Glide <a href="https://github.com/bumptech/glide/">(Link)</a></h2>
|
||||
licensed under the Simplified BSD license <a href="LICENSE_GLIDE.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Iconify <a href="https://github.com/JoanZapata/android-iconify">(Link)</a></h2>
|
||||
by Joan Zapata, licensed under the Apache 2.0 license <a href="LICENSE_ANDROID_ICONIFY.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>jsoup <a href="http://jsoup.org/">(Link)</a></h2>
|
||||
licensed under the MIT license <a href="LICENSE_JSOUP.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Material Design Icons <a href="https://github.com/google/material-design-icons">(Link)</a></h2>
|
||||
by Google, licensed under an Attribution-ShareAlike 4.0 International license <a href="LICENSE_MATERIAL_DESIGN_ICONS.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Material Design Icons <a href="https://github.com/Templarian/MaterialDesign">(Link)</a></h2>
|
||||
by Templarian, licensed under the SIL Open Font License, Version 1.1 <a href="LICENSE_SIL.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Material Dialogs <a href="https://github.com/afollestad/material-dialogs">(Link)</a></h2>
|
||||
by Aidan Michael Follestad, licensed under the MIT License <a href="LICENSE_MATERIAL_DIALOGS.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>OkHttp <a href="https://github.com/square/okhttp">(Link)</a></h2>
|
||||
by Square, licensed under the Apache 2.0 license <a href="LICENSE_OKHTTP.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Okio <a href="https://github.com/square/okio">(Link)</a></h2>
|
||||
by Square, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Presto Client <a href="http://www.aocate.com/presto/">(Link)</a></h2>
|
||||
licensed under the Apache 2.0 license <a href="LICENSE_PRESTO.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>RecyclerView-FlexibleDivider <a href="https://github.com/yqritc/RecyclerView-FlexibleDivider">(Link)</a></h2>
|
||||
licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>RxAndroid <a href="https://github.com/ReactiveX/RxAndroid">(Link)</a></h2>
|
||||
licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>StackBlur <a href="https://github.com/kikoso/android-stackblur">(Link)</a></h2>
|
||||
by Enrique López Mañas, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Triangle Label View <a href="https://github.com/shts/TriangleLabelView">(Link)</a></h2>
|
||||
by Shota Saito, licensed under the Apache 2.0 license <a href="LICENSE_TRIANGLE_LABEL_VIEW.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>AntennaPod-AudioPlayer <a href="https://github.com/AntennaPod/AntennaPod-AudioPlayer/">(Link)</a></h2>
|
||||
by the AntennaPod team, licensed under the Apache 2.0 license <a href="LICENSE_APACHE-2.0.txt">(View)</a>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,471 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import subprocess
|
||||
import configparser
|
||||
import os
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read(os.path.expanduser("~") + '/.transifexrc')
|
||||
if 'https://www.transifex.com' in config:
|
||||
TRANSIFEX_USER = config['https://www.transifex.com']['username']
|
||||
TRANSIFEX_PW = config['https://www.transifex.com']['password']
|
||||
else:
|
||||
TRANSIFEX_USER = ""
|
||||
TRANSIFEX_PW = ""
|
||||
|
||||
print('DEVELOPERS\n==========\n')
|
||||
p = subprocess.Popen("git log --format='%aN' --no-merges "
|
||||
+"| grep -v '@' " # No email adresses
|
||||
+"| grep -v 'no.reply' " # no.reply
|
||||
+"| sed -e 's/^\(Daniel\|daniel oeh\|danieloeh\)$/Daniel Oeh/I'" # Duplicate name
|
||||
+"| sed -e 's/^keunes$/Koen Glotzbach/'" # Duplicate name
|
||||
+"| sed -e 's/^H. Lehmann$/ByteHamster/'" # Duplicate name
|
||||
+"| sed -e 's/^domingos86$/Domingos Lopes/'" # Duplicate name
|
||||
+"| sed -e 's/^orionlee$/Sam Lee/'" # Duplicate name
|
||||
+"| sort -fu", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
for line in p.stdout.readlines():
|
||||
output = line.decode()
|
||||
print(output, end='')
|
||||
|
||||
language_codes = {
|
||||
"af_NA": "Afrikaans (Namibia)",
|
||||
"af_ZA": "Afrikaans (South Africa)",
|
||||
"af": "Afrikaans",
|
||||
"ak_GH": "Akan (Ghana)",
|
||||
"ak": "Akan",
|
||||
"ast_ES": "Asturian (Spain)",
|
||||
"sq_AL": "Albanian (Albania)",
|
||||
"sq": "Albanian",
|
||||
"am_ET": "Amharic (Ethiopia)",
|
||||
"am": "Amharic",
|
||||
"ar_DZ": "Arabic (Algeria)",
|
||||
"ar_BH": "Arabic (Bahrain)",
|
||||
"ar_EG": "Arabic (Egypt)",
|
||||
"ar_IQ": "Arabic (Iraq)",
|
||||
"ar_JO": "Arabic (Jordan)",
|
||||
"ar_KW": "Arabic (Kuwait)",
|
||||
"ar_LB": "Arabic (Lebanon)",
|
||||
"ar_LY": "Arabic (Libya)",
|
||||
"ar_MA": "Arabic (Morocco)",
|
||||
"ar_OM": "Arabic (Oman)",
|
||||
"ar_QA": "Arabic (Qatar)",
|
||||
"ar_SA": "Arabic (Saudi Arabia)",
|
||||
"ar_SD": "Arabic (Sudan)",
|
||||
"ar_SY": "Arabic (Syria)",
|
||||
"ar_TN": "Arabic (Tunisia)",
|
||||
"ar_AE": "Arabic (United Arab Emirates)",
|
||||
"ar_YE": "Arabic (Yemen)",
|
||||
"ar": "Arabic",
|
||||
"hy_AM": "Armenian (Armenia)",
|
||||
"hy": "Armenian",
|
||||
"as_IN": "Assamese (India)",
|
||||
"as": "Assamese",
|
||||
"asa_TZ": "Asu (Tanzania)",
|
||||
"asa": "Asu",
|
||||
"az_Cyrl": "Azerbaijani (Cyrillic)",
|
||||
"az_Cyrl_AZ": "Azerbaijani (Cyrillic, Azerbaijan)",
|
||||
"az_Latn": "Azerbaijani (Latin)",
|
||||
"az_Latn_AZ": "Azerbaijani (Latin, Azerbaijan)",
|
||||
"az": "Azerbaijani",
|
||||
"bm_ML": "Bambara (Mali)",
|
||||
"bm": "Bambara",
|
||||
"eu_ES": "Basque (Spain)",
|
||||
"eu": "Basque",
|
||||
"be_BY": "Belarusian (Belarus)",
|
||||
"be": "Belarusian",
|
||||
"bem_ZM": "Bemba (Zambia)",
|
||||
"bem": "Bemba",
|
||||
"bez_TZ": "Bena (Tanzania)",
|
||||
"bez": "Bena",
|
||||
"bn_BD": "Bengali (Bangladesh)",
|
||||
"bn_IN": "Bengali (India)",
|
||||
"bn": "Bengali",
|
||||
"bs_BA": "Bosnian (Bosnia and Herzegovina)",
|
||||
"bs": "Bosnian",
|
||||
"bg_BG": "Bulgarian (Bulgaria)",
|
||||
"bg": "Bulgarian",
|
||||
"my_MM": "Burmese (Myanmar [Burma])",
|
||||
"my": "Burmese",
|
||||
"ca_ES": "Catalan (Spain)",
|
||||
"ca": "Catalan",
|
||||
"tzm_Latn": "Central Morocco Tamazight (Latin)",
|
||||
"tzm_Latn_MA": "Central Morocco Tamazight (Latin, Morocco)",
|
||||
"tzm": "Central Morocco Tamazight",
|
||||
"chr_US": "Cherokee (United States)",
|
||||
"chr": "Cherokee",
|
||||
"cgg_UG": "Chiga (Uganda)",
|
||||
"cgg": "Chiga",
|
||||
"zh": "Chinese (Simplified)",
|
||||
"zh_CN": "Chinese (China)",
|
||||
"zh_HK": "Chinese (Hong Kong SAR China)",
|
||||
"zh_MO": "Chinese (Macau SAR China)",
|
||||
"zh_MO_SG": "Chinese (Singapore)",
|
||||
"zh_TW": "Chinese (Taiwan)",
|
||||
"zh": "Chinese",
|
||||
"kw_GB": "Cornish (United Kingdom)",
|
||||
"kw": "Cornish",
|
||||
"hr_HR": "Croatian (Croatia)",
|
||||
"hr": "Croatian",
|
||||
"cs_CZ": "Czech (Czech Republic)",
|
||||
"cs": "Czech",
|
||||
"da_DK": "Danish (Denmark)",
|
||||
"da": "Danish",
|
||||
"nl_BE": "Dutch (Belgium)",
|
||||
"nl_NL": "Dutch (Netherlands)",
|
||||
"nl": "Dutch",
|
||||
"ebu_KE": "Embu (Kenya)",
|
||||
"ebu": "Embu",
|
||||
"en_AS": "English (American Samoa)",
|
||||
"en_AU": "English (Australia)",
|
||||
"en_BE": "English (Belgium)",
|
||||
"en_BZ": "English (Belize)",
|
||||
"en_BW": "English (Botswana)",
|
||||
"en_CA": "English (Canada)",
|
||||
"en_GU": "English (Guam)",
|
||||
"en_HK": "English (Hong Kong SAR China)",
|
||||
"en_IN": "English (India)",
|
||||
"en_IE": "English (Ireland)",
|
||||
"en_JM": "English (Jamaica)",
|
||||
"en_MT": "English (Malta)",
|
||||
"en_MH": "English (Marshall Islands)",
|
||||
"en_MU": "English (Mauritius)",
|
||||
"en_NA": "English (Namibia)",
|
||||
"en_NZ": "English (New Zealand)",
|
||||
"en_MP": "English (Northern Mariana Islands)",
|
||||
"en_PK": "English (Pakistan)",
|
||||
"en_PH": "English (Philippines)",
|
||||
"en_SG": "English (Singapore)",
|
||||
"en_ZA": "English (South Africa)",
|
||||
"en_TT": "English (Trinidad and Tobago)",
|
||||
"en_UM": "English (U.S. Minor Outlying Islands)",
|
||||
"en_VI": "English (U.S. Virgin Islands)",
|
||||
"en_GB": "English (United Kingdom)",
|
||||
"en_US": "English (United States)",
|
||||
"en_ZW": "English (Zimbabwe)",
|
||||
"en": "English",
|
||||
"eo": "Esperanto",
|
||||
"et_EE": "Estonian (Estonia)",
|
||||
"et": "Estonian",
|
||||
"ee_GH": "Ewe (Ghana)",
|
||||
"ee_TG": "Ewe (Togo)",
|
||||
"ee": "Ewe",
|
||||
"fo_FO": "Faroese (Faroe Islands)",
|
||||
"fo": "Faroese",
|
||||
"fil_PH": "Filipino (Philippines)",
|
||||
"fil": "Filipino",
|
||||
"fi_FI": "Finnish (Finland)",
|
||||
"fi": "Finnish",
|
||||
"fr_BE": "French (Belgium)",
|
||||
"fr_BJ": "French (Benin)",
|
||||
"fr_BF": "French (Burkina Faso)",
|
||||
"fr_BI": "French (Burundi)",
|
||||
"fr_CM": "French (Cameroon)",
|
||||
"fr_CA": "French (Canada)",
|
||||
"fr_CF": "French (Central African Republic)",
|
||||
"fr_TD": "French (Chad)",
|
||||
"fr_KM": "French (Comoros)",
|
||||
"fr_CG": "French (Congo - Brazzaville)",
|
||||
"fr_CD": "French (Congo - Kinshasa)",
|
||||
"fr_CI": "French (Côte d’Ivoire)",
|
||||
"fr_DJ": "French (Djibouti)",
|
||||
"fr_GQ": "French (Equatorial Guinea)",
|
||||
"fr_FR": "French (France)",
|
||||
"fr_GA": "French (Gabon)",
|
||||
"fr_GP": "French (Guadeloupe)",
|
||||
"fr_GN": "French (Guinea)",
|
||||
"fr_LU": "French (Luxembourg)",
|
||||
"fr_MG": "French (Madagascar)",
|
||||
"fr_ML": "French (Mali)",
|
||||
"fr_MQ": "French (Martinique)",
|
||||
"fr_MC": "French (Monaco)",
|
||||
"fr_NE": "French (Niger)",
|
||||
"fr_RW": "French (Rwanda)",
|
||||
"fr_RE": "French (Réunion)",
|
||||
"fr_BL": "French (Saint Barthélemy)",
|
||||
"fr_MF": "French (Saint Martin)",
|
||||
"fr_SN": "French (Senegal)",
|
||||
"fr_CH": "French (Switzerland)",
|
||||
"fr_TG": "French (Togo)",
|
||||
"fr": "French",
|
||||
"ff_SN": "Fulah (Senegal)",
|
||||
"ff": "Fulah",
|
||||
"gl_ES": "Galician (Spain)",
|
||||
"gl": "Galician",
|
||||
"lg_UG": "Ganda (Uganda)",
|
||||
"lg": "Ganda",
|
||||
"ka_GE": "Georgian (Georgia)",
|
||||
"ka": "Georgian",
|
||||
"de_AT": "German (Austria)",
|
||||
"de_BE": "German (Belgium)",
|
||||
"de_DE": "German (Germany)",
|
||||
"de_LI": "German (Liechtenstein)",
|
||||
"de_LU": "German (Luxembourg)",
|
||||
"de_CH": "German (Switzerland)",
|
||||
"de": "German",
|
||||
"el_CY": "Greek (Cyprus)",
|
||||
"el_GR": "Greek (Greece)",
|
||||
"el": "Greek",
|
||||
"gu_IN": "Gujarati (India)",
|
||||
"gu": "Gujarati",
|
||||
"guz_KE": "Gusii (Kenya)",
|
||||
"guz": "Gusii",
|
||||
"ha_Latn": "Hausa (Latin)",
|
||||
"ha_Latn_GH": "Hausa (Latin, Ghana)",
|
||||
"ha_Latn_NE": "Hausa (Latin, Niger)",
|
||||
"ha_Latn_NG": "Hausa (Latin, Nigeria)",
|
||||
"ha": "Hausa",
|
||||
"haw_US": "Hawaiian (United States)",
|
||||
"haw": "Hawaiian",
|
||||
"he_IL": "Hebrew (Israel)",
|
||||
"he": "Hebrew",
|
||||
"hi_IN": "Hindi (India)",
|
||||
"hi": "Hindi",
|
||||
"hu_HU": "Hungarian (Hungary)",
|
||||
"hu": "Hungarian",
|
||||
"is_IS": "Icelandic (Iceland)",
|
||||
"is": "Icelandic",
|
||||
"ig_NG": "Igbo (Nigeria)",
|
||||
"ig": "Igbo",
|
||||
"id_ID": "Indonesian (Indonesia)",
|
||||
"id": "Indonesian",
|
||||
"ga_IE": "Irish (Ireland)",
|
||||
"ga": "Irish",
|
||||
"it_IT": "Italian (Italy)",
|
||||
"it_CH": "Italian (Switzerland)",
|
||||
"it": "Italian",
|
||||
"ja_JP": "Japanese (Japan)",
|
||||
"ja": "Japanese",
|
||||
"kea_CV": "Kabuverdianu (Cape Verde)",
|
||||
"kea": "Kabuverdianu",
|
||||
"kab_DZ": "Kabyle (Algeria)",
|
||||
"kab": "Kabyle",
|
||||
"kl_GL": "Kalaallisut (Greenland)",
|
||||
"kl": "Kalaallisut",
|
||||
"kln_KE": "Kalenjin (Kenya)",
|
||||
"kln": "Kalenjin",
|
||||
"kam_KE": "Kamba (Kenya)",
|
||||
"kam": "Kamba",
|
||||
"kn_IN": "Kannada (India)",
|
||||
"kn": "Kannada",
|
||||
"kk_Cyrl": "Kazakh (Cyrillic)",
|
||||
"kk_Cyrl_KZ": "Kazakh (Cyrillic, Kazakhstan)",
|
||||
"kk": "Kazakh",
|
||||
"km_KH": "Khmer (Cambodia)",
|
||||
"km": "Khmer",
|
||||
"ki_KE": "Kikuyu (Kenya)",
|
||||
"ki": "Kikuyu",
|
||||
"rw_RW": "Kinyarwanda (Rwanda)",
|
||||
"rw": "Kinyarwanda",
|
||||
"kok_IN": "Konkani (India)",
|
||||
"kok": "Konkani",
|
||||
"ko_KR": "Korean (South Korea)",
|
||||
"ko": "Korean",
|
||||
"khq_ML": "Koyra Chiini (Mali)",
|
||||
"khq": "Koyra Chiini",
|
||||
"ses_ML": "Koyraboro Senni (Mali)",
|
||||
"ses": "Koyraboro Senni",
|
||||
"lag_TZ": "Langi (Tanzania)",
|
||||
"lag": "Langi",
|
||||
"lv_LV": "Latvian (Latvia)",
|
||||
"lv": "Latvian",
|
||||
"lt_LT": "Lithuanian (Lithuania)",
|
||||
"lt": "Lithuanian",
|
||||
"luo_KE": "Luo (Kenya)",
|
||||
"luo": "Luo",
|
||||
"luy_KE": "Luyia (Kenya)",
|
||||
"luy": "Luyia",
|
||||
"mk_MK": "Macedonian (Macedonia)",
|
||||
"mk": "Macedonian",
|
||||
"jmc_TZ": "Machame (Tanzania)",
|
||||
"jmc": "Machame",
|
||||
"kde_TZ": "Makonde (Tanzania)",
|
||||
"kde": "Makonde",
|
||||
"mg_MG": "Malagasy (Madagascar)",
|
||||
"mg": "Malagasy",
|
||||
"ms_BN": "Malay (Brunei)",
|
||||
"ms_MY": "Malay (Malaysia)",
|
||||
"ms": "Malay",
|
||||
"ml_IN": "Malayalam (India)",
|
||||
"ml": "Malayalam",
|
||||
"mt_MT": "Maltese (Malta)",
|
||||
"mt": "Maltese",
|
||||
"gv_GB": "Manx (United Kingdom)",
|
||||
"gv": "Manx",
|
||||
"mr_IN": "Marathi (India)",
|
||||
"mr": "Marathi",
|
||||
"mas_KE": "Masai (Kenya)",
|
||||
"mas_TZ": "Masai (Tanzania)",
|
||||
"mas": "Masai",
|
||||
"mer_KE": "Meru (Kenya)",
|
||||
"mer": "Meru",
|
||||
"mfe_MU": "Morisyen (Mauritius)",
|
||||
"mfe": "Morisyen",
|
||||
"naq_NA": "Nama (Namibia)",
|
||||
"naq": "Nama",
|
||||
"ne_IN": "Nepali (India)",
|
||||
"ne_NP": "Nepali (Nepal)",
|
||||
"ne": "Nepali",
|
||||
"nd_ZW": "North Ndebele (Zimbabwe)",
|
||||
"nd": "North Ndebele",
|
||||
"no": "Norwegian",
|
||||
"nb_NO": "Norwegian Bokmål (Norway)",
|
||||
"nb": "Norwegian Bokmål",
|
||||
"nn_NO": "Norwegian Nynorsk (Norway)",
|
||||
"nn": "Norwegian Nynorsk",
|
||||
"nyn_UG": "Nyankole (Uganda)",
|
||||
"nyn": "Nyankole",
|
||||
"or_IN": "Oriya (India)",
|
||||
"or": "Oriya",
|
||||
"om_ET": "Oromo (Ethiopia)",
|
||||
"m_KE": "Oromo (Kenya)",
|
||||
"om": "Oromo",
|
||||
"ps_AF": "Pashto (Afghanistan)",
|
||||
"ps": "Pashto",
|
||||
"fa_AF": "Persian (Afghanistan)",
|
||||
"fa_IR": "Persian (Iran)",
|
||||
"fa": "Persian",
|
||||
"pl_PL": "Polish (Poland)",
|
||||
"pl": "Polish",
|
||||
"pt_BR": "Portuguese (Brazil)",
|
||||
"pt_GW": "Portuguese (Guinea-Bissau)",
|
||||
"pt_MZ": "Portuguese (Mozambique)",
|
||||
"pt_PT": "Portuguese (Portugal)",
|
||||
"pt": "Portuguese",
|
||||
"pa_Arab": "Punjabi (Arabic)",
|
||||
"pa_Arab_PK": "Punjabi (Arabic, Pakistan)",
|
||||
"pa_Guru": "Punjabi (Gurmukhi)",
|
||||
"pa_Guru_IN": "Punjabi (Gurmukhi, India)",
|
||||
"pa": "Punjabi",
|
||||
"ro_MD": "Romanian (Moldova)",
|
||||
"ro_RO": "Romanian (Romania)",
|
||||
"ro": "Romanian",
|
||||
"rm_CH": "Romansh (Switzerland)",
|
||||
"rm": "Romansh",
|
||||
"rof_TZ": "Rombo (Tanzania)",
|
||||
"rof": "Rombo",
|
||||
"ru_MD": "Russian (Moldova)",
|
||||
"ru_RU": "Russian (Russia)",
|
||||
"ru_UA": "Russian (Ukraine)",
|
||||
"ru": "Russian",
|
||||
"rwk_TZ": "Rwa (Tanzania)",
|
||||
"rwk": "Rwa",
|
||||
"saq_KE": "Samburu (Kenya)",
|
||||
"saq": "Samburu",
|
||||
"sg_CF": "Sango (Central African Republic)",
|
||||
"sg": "Sango",
|
||||
"seh_MZ": "Sena (Mozambique)",
|
||||
"seh": "Sena",
|
||||
"sr_Cyrl": "Serbian (Cyrillic)",
|
||||
"sr_Cyrl_BA": "Serbian (Cyrillic, Bosnia and Herzegovina)",
|
||||
"sr_Cyrl_ME": "Serbian (Cyrillic, Montenegro)",
|
||||
"sr_Cyrl_RS": "Serbian (Cyrillic, Serbia)",
|
||||
"sr_Latn": "Serbian (Latin)",
|
||||
"sr_Latn_BA": "Serbian (Latin, Bosnia and Herzegovina)",
|
||||
"sr_Latn_ME": "Serbian (Latin, Montenegro)",
|
||||
"sr_Latn_RS": "Serbian (Latin, Serbia)",
|
||||
"sr": "Serbian",
|
||||
"sn_ZW": "Shona (Zimbabwe)",
|
||||
"sn": "Shona",
|
||||
"ii_CN": "Sichuan Yi (China)",
|
||||
"ii": "Sichuan Yi",
|
||||
"si_LK": "Sinhala (Sri Lanka)",
|
||||
"si": "Sinhala",
|
||||
"sk_SK": "Slovak (Slovakia)",
|
||||
"sk": "Slovak",
|
||||
"sl_SI": "Slovenian (Slovenia)",
|
||||
"sl": "Slovenian",
|
||||
"xog_UG": "Soga (Uganda)",
|
||||
"xog": "Soga",
|
||||
"so_DJ": "Somali (Djibouti)",
|
||||
"so_ET": "Somali (Ethiopia)",
|
||||
"so_KE": "Somali (Kenya)",
|
||||
"so_SO": "Somali (Somalia)",
|
||||
"so": "Somali",
|
||||
"es_AR": "Spanish (Argentina)",
|
||||
"es_BO": "Spanish (Bolivia)",
|
||||
"es_CL": "Spanish (Chile)",
|
||||
"es_CO": "Spanish (Colombia)",
|
||||
"es_CR": "Spanish (Costa Rica)",
|
||||
"es_DO": "Spanish (Dominican Republic)",
|
||||
"es_EC": "Spanish (Ecuador)",
|
||||
"es_SV": "Spanish (El Salvador)",
|
||||
"es_GQ": "Spanish (Equatorial Guinea)",
|
||||
"es_GT": "Spanish (Guatemala)",
|
||||
"es_HN": "Spanish (Honduras)",
|
||||
"es_419": "Spanish (Latin America)",
|
||||
"es_MX": "Spanish (Mexico)",
|
||||
"es_NI": "Spanish (Nicaragua)",
|
||||
"es_PA": "Spanish (Panama)",
|
||||
"es_PY": "Spanish (Paraguay)",
|
||||
"es_PE": "Spanish (Peru)",
|
||||
"es_PR": "Spanish (Puerto Rico)",
|
||||
"es_ES": "Spanish (Spain)",
|
||||
"es_US": "Spanish (United States)",
|
||||
"es_UY": "Spanish (Uruguay)",
|
||||
"es_VE": "Spanish (Venezuela)",
|
||||
"es": "Spanish",
|
||||
"sw_KE": "Swahili (Kenya)",
|
||||
"sw_TZ": "Swahili (Tanzania)",
|
||||
"sw": "Swahili",
|
||||
"sv_FI": "Swedish (Finland)",
|
||||
"sv_SE": "Swedish (Sweden)",
|
||||
"sv": "Swedish",
|
||||
"gsw_CH": "Swiss German (Switzerland)",
|
||||
"gsw": "Swiss German",
|
||||
"shi_Latn": "Tachelhit (Latin)",
|
||||
"shi_Latn_MA": "Tachelhit (Latin, Morocco)",
|
||||
"shi_Tfng": "Tachelhit (Tifinagh)",
|
||||
"shi_Tfng_MA": "Tachelhit (Tifinagh, Morocco)",
|
||||
"shi": "Tachelhit",
|
||||
"dav_KE": "Taita (Kenya)",
|
||||
"dav": "Taita",
|
||||
"ta_IN": "Tamil (India)",
|
||||
"ta_LK": "Tamil (Sri Lanka)",
|
||||
"ta": "Tamil",
|
||||
"te_IN": "Telugu (India)",
|
||||
"te": "Telugu",
|
||||
"teo_KE": "Teso (Kenya)",
|
||||
"teo_UG": "Teso (Uganda)",
|
||||
"teo": "Teso",
|
||||
"th_TH": "Thai (Thailand)",
|
||||
"th": "Thai",
|
||||
"bo_CN": "Tibetan (China)",
|
||||
"bo_IN": "Tibetan (India)",
|
||||
"bo": "Tibetan",
|
||||
"ti_ER": "Tigrinya (Eritrea)",
|
||||
"ti_ET": "Tigrinya (Ethiopia)",
|
||||
"ti": "Tigrinya",
|
||||
"to_TO": "Tonga (Tonga)",
|
||||
"to": "Tonga",
|
||||
"tr_TR": "Turkish (Turkey)",
|
||||
"tr": "Turkish",
|
||||
"uk_UA": "Ukrainian (Ukraine)",
|
||||
"uk": "Ukrainian",
|
||||
"ur_IN": "Urdu (India)",
|
||||
"ur_PK": "Urdu (Pakistan)",
|
||||
"ur": "Urdu",
|
||||
"uz_Arab": "Uzbek (Arabic)",
|
||||
"uz_Arab_AF": "Uzbek (Arabic, Afghanistan)",
|
||||
"uz_Cyrl": "Uzbek (Cyrillic)",
|
||||
"uz_Cyrl_UZ": "Uzbek (Cyrillic, Uzbekistan)",
|
||||
"uz_Latn": "Uzbek (Latin)",
|
||||
"uz_Latn_UZ": "Uzbek (Latin, Uzbekistan)",
|
||||
"uz": "Uzbek",
|
||||
"vi_VN": "Vietnamese (Vietnam)",
|
||||
"vi": "Vietnamese",
|
||||
"vun_TZ": "Vunjo (Tanzania)",
|
||||
"vun": "Vunjo",
|
||||
"cy_GB": "Welsh (United Kingdom)",
|
||||
"cy": "Welsh",
|
||||
"yo_NG": "Yoruba (Nigeria)",
|
||||
"yo": "Yoruba",
|
||||
"zu_ZA": "Zulu (South Africa)",
|
||||
"zu": "Zulu"
|
||||
}
|
||||
|
||||
print('\n\nTRANSLATORS\n===========\n')
|
||||
r = requests.get('http://www.transifex.com/api/2/project/antennapod/languages/', auth=(TRANSIFEX_USER, TRANSIFEX_PW))
|
||||
for lang in r.json():
|
||||
lang_contributers = lang['coordinators'] + lang['reviewers'] + lang['translators']
|
||||
lang_contributers = sorted(lang_contributers, key=str.lower)
|
||||
print(language_codes[lang['language_code']], ": ", ', '.join(lang_contributers), sep="")
|
|
@ -331,7 +331,6 @@
|
|||
<!-- Preferences -->
|
||||
<string name="storage_pref">Storage</string>
|
||||
<string name="project_pref">Project</string>
|
||||
<string name="about_pref">About</string>
|
||||
<string name="queue_label">Queue</string>
|
||||
<string name="integrations_label">Integrations</string>
|
||||
<string name="automation">Automation</string>
|
||||
|
@ -503,6 +502,17 @@
|
|||
<string name="pref_delete_removes_from_queue_title">Delete removes from Queue</string>
|
||||
<string name="pref_delete_removes_from_queue_sum">Automatically remove an episode from the queue when it is deleted.</string>
|
||||
|
||||
<!-- About screen -->
|
||||
<string name="about_pref">About</string>
|
||||
<string name="antennapod_version">AntennaPod version</string>
|
||||
<string name="developers">Developers</string>
|
||||
<string name="developers_summary">Everyone can help to make AntennaPod better</string>
|
||||
<string name="translators">Translators</string>
|
||||
<string name="translators_summary">Translations are created by users of AntennaPod using Transifex</string>
|
||||
<string name="privacy_policy">Privacy policy</string>
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="licenses_summary">AntennaPod uses other great software</string>
|
||||
|
||||
<!-- Search -->
|
||||
<string name="search_hint">Search for episodes</string>
|
||||
<string name="found_in_shownotes_label">Found in show notes</string>
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python3
|
||||
import requests
|
||||
|
||||
MAINTAINERS = ['mfietz', 'ByteHamster']
|
||||
FORMER_MAINTAINERS = ['TomHennen']
|
||||
|
||||
csvFile = open("app/src/main/assets/developers.csv", "w")
|
||||
contributorsFile = open("CONTRIBUTORS", "a")
|
||||
page = 1
|
||||
hasMore = True
|
||||
while hasMore:
|
||||
json = requests.get('https://api.github.com/repos/AntennaPod/AntennaPod/contributors'
|
||||
+ '?q=contributions&order=desc&per_page=100&page=' + str(page)).json()
|
||||
for contributor in json:
|
||||
role = 'Contributor'
|
||||
if contributor['login'] == 'danieloeh':
|
||||
role = 'Original creator of AntennaPod (retired)'
|
||||
elif contributor['login'] in MAINTAINERS:
|
||||
role = 'Maintainer'
|
||||
elif contributor['login'] in FORMER_MAINTAINERS:
|
||||
role = 'Maintainer (retired)'
|
||||
line = contributor['login'].replace(";", "") + ';' + str(contributor['id']) + ';' + role
|
||||
csvFile.write(line + '\n')
|
||||
print(line)
|
||||
contributorsFile.write(contributor['login'] + '\n')
|
||||
page = page + 1
|
||||
hasMore = len(json) > 0
|
||||
csvFile.close()
|
||||
contributorsFile.close()
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python3
|
||||
import pycountry
|
||||
import requests
|
||||
import configparser
|
||||
import os
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read(os.path.expanduser("~") + '/.transifexrc')
|
||||
if 'https://www.transifex.com' in config:
|
||||
TRANSIFEX_USER = config['https://www.transifex.com']['username']
|
||||
TRANSIFEX_PW = config['https://www.transifex.com']['password']
|
||||
else:
|
||||
TRANSIFEX_USER = ""
|
||||
TRANSIFEX_PW = ""
|
||||
|
||||
csvFile = open("app/src/main/assets/translators.csv", "w")
|
||||
contributorsFile = open("CONTRIBUTORS", "a")
|
||||
r = requests.get('http://www.transifex.com/api/2/project/antennapod/languages/',
|
||||
auth=(TRANSIFEX_USER, TRANSIFEX_PW))
|
||||
for lang in r.json():
|
||||
langContributers = lang['coordinators'] + lang['reviewers'] + lang['translators']
|
||||
langContributers = sorted(langContributers, key=str.lower)
|
||||
langCode = lang['language_code']
|
||||
try:
|
||||
langName = pycountry.languages.lookup(langCode).name
|
||||
except:
|
||||
try:
|
||||
langName = pycountry.languages.lookup(
|
||||
langCode.split('_')[0]).name + ' (' + langCode + ')'
|
||||
except:
|
||||
langName = lang['language_code']
|
||||
print('\033[91mLanguage code not found:' + langCode + '\033[0m')
|
||||
|
||||
joinedTranslators = ', '.join(langContributers).replace(';', '');
|
||||
contributorsFile.write(langName + ": " + joinedTranslators + '\n')
|
||||
csvFile.write(langName + ';' + joinedTranslators + '\n')
|
||||
print(langName + ';' + joinedTranslators)
|
||||
csvFile.close()
|
||||
contributorsFile.close()
|
|
@ -9,9 +9,10 @@ set -e
|
|||
DEST=$2
|
||||
VERSION_NAME=$1
|
||||
|
||||
# need to get rid of this so that it gets regenerated
|
||||
# probably a way to solve this in Gradle too...
|
||||
rm -f app/src/main/assets/about.html
|
||||
rm CONTRIBUTORS
|
||||
./createDevelopersList.py
|
||||
./createTranslatorsList.py
|
||||
|
||||
./gradlew clean assemblePlayDebug assemblePlayRelease
|
||||
cp app/build/outputs/apk/app-play-debug.apk $DEST/AntennaPod_${VERSION_NAME}_debug.apk
|
||||
cp app/build/outputs/apk/app-play-release.apk $DEST/AntennaPod_${VERSION_NAME}_release.apk
|
||||
|
|
Loading…
Reference in New Issue