diff options
Diffstat (limited to 'app/src')
22 files changed, 222 insertions, 155 deletions
diff --git a/app/src/main/assets/developers.csv b/app/src/main/assets/developers.csv index cff15ee38..a2c54723d 100644 --- a/app/src/main/assets/developers.csv +++ b/app/src/main/assets/developers.csv @@ -1,35 +1,36 @@ ByteHamster;5811634;Maintainer danieloeh;968613;Original creator of AntennaPod (retired) -mfietz;6860662;Maintainer +mfietz;6860662;Maintainer (retired) TomHennen;5216560;Maintainer (retired) orionlee;250644;Contributor domingos86;9538859;Contributor +tonytamsf;149837;Contributor andersonvom;69922;Contributor +damoasda;46045854;Contributor TacoTheDank;32376686;Contributor shortspider;5712543;Contributor ebraminio;833473;Contributor +asdoi;36813904;Contributor spacecowboy;223655;Contributor patheticpat;16046;Contributor -tonytamsf;149837;Contributor brad;1614;Contributor Cj-Malone;10121513;Contributor maxbechtold;9162198;Contributor -asdoi;36813904;Contributor gaul;848247;Contributor qkolj;6667105;Contributor +keunes;11229646;Maintainer pachecosf;46357909;Contributor gerardolgvr;20119298;Contributor bws9000;262625;Contributor ahangarha;11241315;Contributor -damoasda;46045854;Contributor hannesa2;3314607;Contributor -keunes;11229646;Contributor rharriso;570910;Contributor xgouchet;818706;Contributor sevenmaster;12869538;Contributor TheRealFalcon;153674;Contributor -jas14;569991;Contributor +Slinger;75751;Contributor johnjohndoe;144518;Contributor +jas14;569991;Contributor udif;809640;Contributor malockin;12814657;Contributor dirkmueller;1029152;Contributor @@ -49,6 +50,7 @@ deandreamatias;21011641;Contributor MeirAtIMDDE;4421079;Contributor egsavage;126165;Contributor ligi;111600;Contributor +Xeitor;8825715;Contributor dreiss;4121;Contributor liesen;26872;Contributor nereocystis;2257107;Contributor @@ -70,30 +72,43 @@ SosoTughushi;19908097;Contributor fabolhak;20029691;Contributor archibishop;36948493;Contributor alifeflow;24603829;Contributor +avirajrsingh;69088913;Contributor toggles;14695;Contributor matdb;48329535;Contributor +damlayildiz;56313500;Contributor kingargyle;177042;Contributor dsmith47;14109426;Contributor hannesaa2;18496079;Contributor jhunnius;9149031;Contributor ShadowIce;59123;Contributor +Niffler;8172446;Contributor raghulj;57007;Contributor raghulrm;5362986;Contributor mamehacker;16738348;Contributor skitt;2128935;Contributor wseemann;2296196;Contributor +markamaze;17114678;Contributor +mohitshah3111999;42018918;Contributor +moralesg;14352147;Contributor mr-intj;6268767;Contributor tuxayo;2678215;Contributor schlch;56929215;Contributor alimemonzx;44647595;Contributor +dev-darrell;52300159;Contributor +jmdouglas;10855634;Contributor olivoto;15932680;Contributor +PtilopsisLeucotis;54054883;Contributor +abhinavg1997;60095795;Contributor alanorth;191754;Contributor alexte;7724992;Contributor andrey-krutov;1488973;Contributor arantius;84729;Contributor +BoJacobs;25435640;Contributor +chetan882777;36985543;Contributor chrissicool;232590;Contributor cszucko;1810383;Contributor CWftw;1498303;Contributor +connectety;26038710;Contributor danielm5;66779;Contributor ariedov;958646;Contributor brettle;118192;Contributor @@ -107,17 +122,21 @@ Kaligule;3586246;Contributor kvithayathil;1056073;Contributor luiscruz;1080714;Contributor mlasson;5814258;Contributor +schwedenmut;9077622;Contributor M-arcel;56698158;Contributor msoose;30473690;Contributor mo;7117;Contributor mdeveloper20;2319126;Contributor -Slinger;75751;Contributor mschuetz;108637;Contributor +max-wittig;6639323;Contributor MolarAmbiguity;10541979;Contributor mounirlamouri;573590;Contributor +nikhil097;35090769;Contributor +panoreak;25068506;Contributor +patrickjkennedy;8617261;Contributor ortylp;470439;Contributor -PtilopsisLeucotis;54054883;Contributor ramzan;55637406;Contributor +iamrichR;44210678;Contributor SamWhited;512573;Contributor selivan;1208989;Contributor sonnayasomnambula;7716779;Contributor @@ -126,13 +145,17 @@ shantanahardy;26757164;Contributor danners;116551;Contributor corecode;177979;Contributor vimsick;20211590;Contributor +lyallemma;25173082;Contributor edent;837136;Contributor atrus6;357881;Contributor +heyyviv;56256802;Contributor waylife;3348620;Contributor amhokies;3124968;Contributor andrewc1;19559401;Contributor axq;5077221;Contributor +binarytoto;75904760;Contributor +chrk2205;44704035;Contributor fossterer;4236021;Contributor -jmdouglas;10855634;Contributor lightonflux;1377943;Contributor minusf;3632883;Contributor +zawad2221;32180355;Contributor diff --git a/app/src/main/assets/translators.csv b/app/src/main/assets/translators.csv index a7d289963..fddad789b 100644 --- a/app/src/main/assets/translators.csv +++ b/app/src/main/assets/translators.csv @@ -1,45 +1,45 @@ -Arabic;abuzar3.khalid, keunes, nabilMaghura, rex07 +Arabic;abuzar3.khalid, badarotti, keunes, nabilMaghura, rex07, shubbar Asturian (ast_ES);enolp Basque;gaztainalde, keunes, Osoitz, pospolos Breton;Belvar, keunes Bulgarian;keunes, solusitor -Catalan;carles.llacer, dvd1985, exort12, javiercoll, keunes, Kintu, lambdani, marcmetallextrem, xc70 -Chinese (zh_CN);brnme, cyril3, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, jhxie, jxj2zzz79pfp9bpo, keunes, kyleehee, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, tupunco, wongsyrone, yangyang, yiqiok +Catalan;carles.llacer, dvd1985, exort12, IvanAmarante, javiercoll, keunes, Kintu, lambdani, marcmetallextrem, xc70 +Chinese (zh_CN);brnme, cyril3, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, jhxie, jxj2zzz79pfp9bpo, keunes, kyleehee, molisiye, owen8877, RainSlide, RangerNJU, Sak94664, spice2wolf, tupunco, wongsyrone, yangyang, yiqiok Chinese (zh_TW);bobchao, ijliao, keunes, mapobi, pggdt, ymhuang0808 Czech (cs_CZ);anotheranonymoususer, elich, Hanzmeister, svetlemodry, Thomaash -Danish;jhertel, keunes, SebastianKiwiDk, twikedk +Danish;JFreak, jhertel, keunes, SebastianKiwiDk, twikedk Dutch;e2jk, keunes, rwv, Vistaus Estonian;Eraser, keunes, mahfiaz Finnish;Ban3, keunes, Sahtor French;ChaoticMind, clombion, Cornegidouille, e2jk, keunes, lacouture, LouFex, Matth78, Poussinou, sterylmreep Galician;antiparvos, pikamoku, Raichely -German;ByteHamster, ceving, dadosch, DerSilly, elkangaroo, enz, f_grubm, finsterwalder, HolgerJeromin, kalei, keunes, mfietz, Quiss42, repat, ypid +German;_Er, ByteHamster, ceving, dadosch, DerSilly, elkangaroo, enz, f_grubm, finsterwalder, hbilke, HolgerJeromin, JoeMcFly, kalei, keunes, mfietz, pudeeh, Quiss42, repat, tomte, tweimer, Willhelm, ypid Modern Greek (1453-);AnimaRain, antonist, keunes, pavlosv Hebrew (he_IL);amir.dafnyman, E1i9, mongoose4004, pinkasey, rellieberman, Yaron -Hindi (hi_IN);keunes, purple.coder, siddhusengar -Hungarian;hurrikan, keunes, lna91, marthynw, meskobalazs, naren93 +Hindi (hi_IN);keunes, purple.coder, siddhusengar, thelazyoxymoron +Hu;hurrikan, keunes, lna91, marthynw, meskobalazs, naren93 Icelandic;keunes, marthjod Indonesian;dbrw, keunes, levirs565 -Italian (it_IT);aalex70, allin, Bonnee, dontknowcris, giuseppep, Guybrush88, ilmanzo, keunes, m.chinni, marco_pag, neonsoftware, niccord, theloca95 +Italian (it_IT);aalex70, allin, alvami, Bonnee, dontknowcris, giuseppep, Guybrush88, ilmanzo, keunes, m.chinni, marco_pag, neonsoftware, niccord, salorock, theloca95 Japanese;keunes, KotaKato, Naofumi, sh3llc4t, TranslatorG Kannada (kn_IN);chiraag.nataraj, keunes, thejeshgn -Korean;changwoo, keunes, libliboom +Ko;changwoo, keunes, libliboom Lithuanian;keunes, naglis Macedonian;krisfremen Malayalam;joice, keunes, rashivkp -Norwegian Bokmål (nb_NO);abstrakct, bablecopherye, corkie, heraldo, jakobkg, keunes, kongk, sevenmaster, timbast -Persian;ahangarha, danialbehzadi, ebraminio, F7D, hamidrezabayat76, keunes, sinamoghaddas -Polish (pl_PL);hiro2020, Iwangelion, keunes, lomapur, mandlus, maniexx, Mephistofeles, shark103, tyle +Norwegian Bokmål (nb_NO);abstrakct, ahysing, bablecopherye, corkie, forteller, heraldo, jakobkg, keunes, kongk, sevenmaster, timbast +Persian;ahangarha, danialbehzadi, ebadi, ebraminio, F7D, hamidrezabayat76, keunes, sinamoghaddas +Polish (pl_PL);befeleme, hiro2020, Iwangelion, keunes, lomapur, mandlus, maniexx, Mephistofeles, shark103, tyle Portuguese;emansije, keunes, smarquespt Portuguese (pt_BR);alexupits, alysonborges, andersonvom, arua, caioau, carlo_valente, castrors, edman, keunes, lipefire, mbaltar, olivoto, rogervezaro, RubeensVinicius, SamWilliam Romanian (ro_RO);corneliu.e, fuzzmz, keunes, ralienpp -Russian (ru_RU);btimofeev, Duke_Raven, gammja, homocomputeris, IgorPolyakov, keunes, mercutiy, null, overmind88, Platun0v, PtilopsisLeucotis, s.chebotar, un_logic, Vladryyu, whereisthetea -Slovak;ati3, keunes, tiborepcek +Russian (ru_RU);ashed, btimofeev, Duke_Raven, gammja, homocomputeris, IgorPolyakov, keunes, mercutiy, null, overmind88, Platun0v, PtilopsisLeucotis, s.chebotar, un_logic, Vladryyu, whereisthetea +Slovak;ati3, keunes, marulinko, tiborepcek Slovenian (sl_SI);keunes, panter23 -Spanish;AleksSyntek, andersonvom, andrespelaezp, deandreamatias, dvd1985, Fitoschido, frandavid100, hard_ware, javiercoll, keunes, LatinSuD, leogrignafini, tres.14159, vfmatzkin, wakutiteo +Spanish;AleksSyntek, andersonvom, andrespelaezp, deandreamatias, dvd1985, elojodepajaro, Fitoschido, frandavid100, hard_ware, javiercoll, keunes, LatinSuD, leogrignafini, rafael.osuna, tres.14159, vfmatzkin, wakutiteo Swahili (macrolanguage);keunes, kmtra Swedish (sv_SE);bpnilsson, keunes, nilso, TwoD Telugu;keunes, veeven -Turkish;brsata, Erdy, keunes, overbite, Slsdem -Ukrainian (uk_UA);IndibidAbulya, keunes, older, paul_sm, sergiyr, zhenya97 +Turkish;AhmedDuran, brsata, Erdy, keunes, overbite, Slsdem +Ukrainian (uk_UA);keunes, older, paul_sm, sergiyr, zhenya97 Vietnamese;abnvolk, keunes, ppanhh diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java index b2d635df3..4fa8acc43 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java @@ -66,7 +66,7 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte holder.duration.setText(context.getString(R.string.chapter_duration, Converter.getDurationStringLocalized(context, (int) duration))); - if (sc.getLink() == null) { + if (TextUtils.isEmpty(sc.getLink())) { holder.link.setVisibility(View.GONE); } else { holder.link.setVisibility(View.VISIBLE); @@ -74,6 +74,7 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte holder.link.setOnClickListener(v -> IntentUtils.openInBrowser(context, sc.getLink())); } holder.secondaryActionIcon.setImageResource(ThemeUtils.getDrawableFromAttr(context, R.attr.av_play)); + holder.secondaryActionButton.setContentDescription(context.getString(R.string.play_chapter)); holder.secondaryActionButton.setOnClickListener(v -> { if (callback != null) { callback.onPlayChapterButtonClicked(position); diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java index 82010637f..80df87891 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.dialog; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; @@ -34,18 +35,19 @@ public abstract class FilterDialog { builder.setTitle(R.string.filter); LayoutInflater inflater = LayoutInflater.from(this.context); - LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.filter_dialog, null, false); + View layout = inflater.inflate(R.layout.filter_dialog, null, false); + LinearLayout rows = layout.findViewById(R.id.filter_rows); builder.setView(layout); for (FeedItemFilterGroup item : FeedItemFilterGroup.values()) { - RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null); + RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null, false); RadioButton filter1 = row.findViewById(R.id.filter_dialog_radioButton1); RadioButton filter2 = row.findViewById(R.id.filter_dialog_radioButton2); filter1.setText(item.values[0].displayName); filter1.setTag(item.values[0].filterId); filter2.setText(item.values[1].displayName); filter2.setTag(item.values[1].filterId); - layout.addView(row); + rows.addView(row); } for (String filterId : filterValues) { @@ -56,11 +58,11 @@ public abstract class FilterDialog { builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { filterValues.clear(); - for (int i = 0; i < layout.getChildCount(); i++) { - if (!(layout.getChildAt(i) instanceof RecursiveRadioGroup)) { + for (int i = 0; i < rows.getChildCount(); i++) { + if (!(rows.getChildAt(i) instanceof RecursiveRadioGroup)) { continue; } - RecursiveRadioGroup group = (RecursiveRadioGroup) layout.getChildAt(i); + RecursiveRadioGroup group = (RecursiveRadioGroup) rows.getChildAt(i); if (group.getCheckedButton() != null) { String tag = (String) group.getCheckedButton().getTag(); if (tag != null) { // Clear buttons use no tag diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java new file mode 100644 index 000000000..156c1dba8 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java @@ -0,0 +1,52 @@ +package de.danoeh.antennapod.dialog; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.util.Log; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.dialog.ConfirmationDialog; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.storage.DBWriter; +import io.reactivex.Completable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; + +public class RemoveFeedDialog { + private static final String TAG = "RemoveFeedDialog"; + + public static void show(Context context, Feed feed, Runnable onSuccess) { + int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg + : R.string.feed_delete_confirmation_msg; + String message = context.getString(messageId, feed.getTitle()); + + ConfirmationDialog dialog = new ConfirmationDialog(context, R.string.remove_feed_label, message) { + @Override + public void onConfirmButtonPressed(DialogInterface clickedDialog) { + clickedDialog.dismiss(); + + ProgressDialog progressDialog = new ProgressDialog(context); + progressDialog.setMessage(context.getString(R.string.feed_remover_msg)); + progressDialog.setIndeterminate(true); + progressDialog.setCancelable(false); + progressDialog.show(); + + Completable.fromCallable(() -> DBWriter.deleteFeed(context, feed.getId()).get()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + () -> { + Log.d(TAG, "Feed was deleted"); + if (onSuccess != null) { + onSuccess.run(); + } + progressDialog.dismiss(); + }, error -> { + Log.e(TAG, Log.getStackTraceString(error)); + progressDialog.dismiss(); + }); + } + }; + dialog.createNewDialog().show(); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java index a8915480c..8a87fef25 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java @@ -30,7 +30,8 @@ public class SubscriptionsFilterDialog { builder.setTitle(context.getString(R.string.pref_filter_feed_title)); LayoutInflater inflater = LayoutInflater.from(context); - LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.filter_dialog, null, false); + View layout = inflater.inflate(R.layout.filter_dialog, null, false); + LinearLayout rows = layout.findViewById(R.id.filter_rows); builder.setView(layout); for (SubscriptionsFilterGroup item : SubscriptionsFilterGroup.values()) { @@ -45,7 +46,7 @@ public class SubscriptionsFilterDialog { } else { filter2.setVisibility(View.GONE); } - layout.addView(row); + rows.addView(row); } for (String filterId : filterValues) { @@ -56,11 +57,11 @@ public class SubscriptionsFilterDialog { builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { filterValues.clear(); - for (int i = 0; i < layout.getChildCount(); i++) { - if (!(layout.getChildAt(i) instanceof RecursiveRadioGroup)) { + for (int i = 0; i < rows.getChildCount(); i++) { + if (!(rows.getChildAt(i) instanceof RecursiveRadioGroup)) { continue; } - RecursiveRadioGroup group = (RecursiveRadioGroup) layout.getChildAt(i); + RecursiveRadioGroup group = (RecursiveRadioGroup) rows.getChildAt(i); if (group.getCheckedButton() != null) { String tag = (String) group.getCheckedButton().getTag(); if (tag != null) { // Clear buttons use no tag diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index 681d3a88e..550e4761e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -36,8 +36,6 @@ import com.joanzapata.iconify.widget.IconTextView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.EpisodeItemListAdapter; -import de.danoeh.antennapod.core.asynctask.FeedRemover; -import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.DownloaderUpdate; @@ -65,6 +63,7 @@ import de.danoeh.antennapod.core.util.ThemeUtils; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; import de.danoeh.antennapod.dialog.EpisodesApplyActionFragment; import de.danoeh.antennapod.dialog.FilterDialog; +import de.danoeh.antennapod.dialog.RemoveFeedDialog; import de.danoeh.antennapod.dialog.RenameFeedDialog; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.FeedMenuHandler; @@ -298,28 +297,8 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem new RenameFeedDialog(getActivity(), feed).show(); return true; case R.id.remove_item: - final FeedRemover remover = new FeedRemover( - getActivity(), feed) { - @Override - protected void onPostExecute(Void result) { - super.onPostExecute(result); - ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); - } - }; - int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg - : R.string.feed_delete_confirmation_msg; - ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), - R.string.remove_feed_label, - getString(messageId, feed.getTitle())) { - - @Override - public void onConfirmButtonPressed( - DialogInterface dialog) { - dialog.dismiss(); - remover.executeAsync(); - } - }; - conDialog.createNewDialog().show(); + RemoveFeedDialog.show(getContext(), feed, () -> + ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null)); return true; default: return false; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java index 4f99e8130..c69d46265 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java @@ -26,19 +26,15 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.PreferenceActivity; import de.danoeh.antennapod.adapter.NavListAdapter; -import de.danoeh.antennapod.core.asynctask.FeedRemover; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.event.FeedListUpdateEvent; import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.FeedItemUtil; -import de.danoeh.antennapod.core.util.IntentUtils; +import de.danoeh.antennapod.dialog.RemoveFeedDialog; import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; import de.danoeh.antennapod.dialog.RenameFeedDialog; import io.reactivex.Observable; @@ -192,41 +188,15 @@ public class NavDrawerFragment extends Fragment implements AdapterView.OnItemCli new RenameFeedDialog(getActivity(), feed).show(); return true; case R.id.remove_item: - final FeedRemover remover = new FeedRemover(getContext(), feed) { - @Override - protected void onPostExecute(Void result) { - super.onPostExecute(result); - if (selectedNavListIndex == position) { - if (getActivity() instanceof MainActivity) { - ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); - } else { - showMainActivity(EpisodesFragment.TAG); - } - } - } - }; - int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg - : R.string.feed_delete_confirmation_msg; - ConfirmationDialog conDialog = new ConfirmationDialog(getContext(), - R.string.remove_feed_label, - getString(messageId, feed.getTitle())) { - @Override - public void onConfirmButtonPressed(DialogInterface dialog) { - dialog.dismiss(); - long mediaId = PlaybackPreferences.getCurrentlyPlayingFeedMediaId(); - if (mediaId > 0 && FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId) >= 0) { - Log.d(TAG, "Currently playing episode is about to be deleted, skipping"); - remover.skipOnCompletion = true; - int playerStatus = PlaybackPreferences.getCurrentPlayerStatus(); - if (playerStatus == PlaybackPreferences.PLAYER_STATUS_PLAYING) { - IntentUtils.sendLocalBroadcast(getContext(), - PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE); - } + RemoveFeedDialog.show(getContext(), feed, () -> { + if (selectedNavListIndex == position) { + if (getActivity() instanceof MainActivity) { + ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); + } else { + showMainActivity(EpisodesFragment.TAG); } - remover.executeAsync(); } - }; - conDialog.createNewDialog().show(); + }); return true; default: return super.onContextItemSelected(item); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 4549e2a09..973fcb978 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -20,6 +20,7 @@ import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.PlaybackHistoryEvent; import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.event.PlayerStatusEvent; +import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; @@ -180,6 +181,12 @@ public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuI refreshToolbarState(); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { + loadItems(); + refreshToolbarState(); + } + private void onFragmentLoaded() { adapter.notifyDataSetChanged(); refreshToolbarState(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index 3b4246e3a..4735cab42 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -33,22 +33,18 @@ import java.util.concurrent.Callable; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.SubscriptionsAdapter; -import de.danoeh.antennapod.core.asynctask.FeedRemover; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.FeedListUpdateEvent; import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; -import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; -import de.danoeh.antennapod.core.util.FeedItemUtil; -import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; +import de.danoeh.antennapod.dialog.RemoveFeedDialog; import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; import de.danoeh.antennapod.dialog.FeedSortDialog; import de.danoeh.antennapod.dialog.RenameFeedDialog; @@ -299,45 +295,13 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem new RenameFeedDialog(getActivity(), feed).show(); return true; case R.id.remove_item: - displayRemoveFeedDialog(feed); + RemoveFeedDialog.show(getContext(), feed, null); return true; default: return super.onContextItemSelected(item); } } - private void displayRemoveFeedDialog(Feed feed) { - final FeedRemover remover = new FeedRemover(getContext(), feed) { - @Override - protected void onPostExecute(Void result) { - super.onPostExecute(result); - loadSubscriptions(); - } - }; - - int messageId = feed.isLocalFeed() ? R.string.feed_delete_confirmation_local_msg - : R.string.feed_delete_confirmation_msg; - String message = getString(messageId, feed.getTitle()); - ConfirmationDialog dialog = new ConfirmationDialog(getContext(), R.string.remove_feed_label, message) { - @Override - public void onConfirmButtonPressed(DialogInterface clickedDialog) { - clickedDialog.dismiss(); - long mediaId = PlaybackPreferences.getCurrentlyPlayingFeedMediaId(); - if (mediaId > 0 && FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId) >= 0) { - Log.d(TAG, "Currently playing episode is about to be deleted, skipping"); - remover.skipOnCompletion = true; - int playerStatus = PlaybackPreferences.getCurrentPlayerStatus(); - if(playerStatus == PlaybackPreferences.PLAYER_STATUS_PLAYING) { - IntentUtils.sendLocalBroadcast(getContext(), PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE); - - } - } - remover.executeAsync(); - } - }; - dialog.createNewDialog().show(); - } - private <T> void displayConfirmationDialog(@StringRes int title, @StringRes int message, Callable<? extends T> task) { ConfirmationDialog dialog = new ConfirmationDialog(getActivity(), title, message) { @Override diff --git a/app/src/main/play/listings/ca/full-description.txt b/app/src/main/play/listings/ca/full-description.txt new file mode 100644 index 000000000..90227a4c0 --- /dev/null +++ b/app/src/main/play/listings/ca/full-description.txt @@ -0,0 +1,31 @@ +AntennaPod és un reproductor i organitzador de podcasts que et dona accés instantani a milions de podcasts tant de pagament com gratuïts, des de podcasters independents fins a grans publicacions com la BBC, NPR i CNN. Afegeix, importa i exporta els seus feeds sense problemes usant la base de dates de podcasts de iTunes, arxius OPML o simples URLs RSS. +Descarrega, transmet o posa en cola episodis i disfruta'ls com tu vulgues amb velocitats de reproducció ajustables, suport per a capítols i un temporitzador per a dormir. +Estalvia esforç, bateria i us de dades mòbils amb controls d'automatització per a descarregar (hores específiques, intervals i xarxes Wi-Fi) i esborrar episodis (basant-se en els teus favorits i els ajustos de retard). + +Fet per entusiastes dels podcasts, AntennaPod es lliure en tots els sentits de la paraula: codi obert, sense cost, sense anuncis. + +<b>Importa, organitza i reprodueix</b> +• Organitza la reproducció desde qualsevol lloc: widget a la pantalla principal, notificacions de sistema i controls d'auricular amb fil o bluetooth. +• Afegeix i importa feeds via iTunes, gPodder.net, fitxers OPML o enllaços RSS o Atom. +• Disfruta escoltant a la teua manera amb velocitat de reproducció ajustable, suport per a capitols, memòria de posició de reproducció i un avançat temporitzador per a dormir (que pots resetetjar agitant el mòbil) +• Accedix a feeds i episodis protegits amb contrasenya + +<b>Organitza, comparteix i aprecia</b> +• Recorda als millors dels millors marcant episodis com a favorits. +• Troba un episodi usant el historial de reproducció o buscant títols i notes. +• Comparteix episodis i feeds a través d'opcions avançades de medis socials i email, els serveis de gPodder.net i via l'exportació OPML. + +<b>Controla el sistema</b> +• Pren control de les descarregues automàtiques: tria feeds, exclou xarxes mòbils, selecciona xarxes WiFi específiques, requereix que el telèfon estiga carregant i selecciona hores o intervals. +• Gestioneu l'emmagatzematge ajustant la quantitat d'episodis en emmagatzematge temporal, l'esborrat intel·ligent i triant la vostra ubicació preferida. +• Adapteu-vos al vostre entorn fent servir el tema clar o el fosc. +• Feu còpies de seguretat de les vostres subscripcions amb la integració amb gPodder.net i l'exportació a OPML. + +<b>Uniu-vos a la comunitat d'AntennaPod!</b> +L'AntennaPod el desenvolupen voluntaris. Podeu col·laborar, amb codi o comentaris. + +Els amigables membres del nostre fòrum estaran contents d'ajudar-vos amb qualsevol pregunta. Esteu convidats a parlar de les features i de podcasting en general, a més. +https://forum.antennapod.org/ + +Transifex és el lloc on podeu ajudar amb les traduccions. +https://www.transifex.com/antennapod/antennapod
\ No newline at end of file diff --git a/app/src/main/play/listings/ca/short-description.txt b/app/src/main/play/listings/ca/short-description.txt new file mode 100644 index 000000000..25b884d1b --- /dev/null +++ b/app/src/main/play/listings/ca/short-description.txt @@ -0,0 +1 @@ +Reproductor i organitzador de podcasts, fàcil d'usar, flexible i de codi obert.
\ No newline at end of file diff --git a/app/src/main/play/listings/ca/title.txt b/app/src/main/play/listings/ca/title.txt new file mode 100644 index 000000000..31552f353 --- /dev/null +++ b/app/src/main/play/listings/ca/title.txt @@ -0,0 +1 @@ +AntennaPod
\ No newline at end of file diff --git a/app/src/main/play/listings/cs-CZ/full-description.txt b/app/src/main/play/listings/cs-CZ/full-description.txt new file mode 100644 index 000000000..8411a2e7f --- /dev/null +++ b/app/src/main/play/listings/cs-CZ/full-description.txt @@ -0,0 +1,31 @@ +AntennaPod je správce a přehrávač podcastů, co vám umožňuje okamžitý přístup k milionům podcastů (placené i zdarma) od nezávislých autorů, přes velké zahraniční korporace jako BBC, NPR a CNN, až po české DVTV nebo Český rozhlas. Své podcasty můžete jednoduše přidávat, importovat i exportovat pomocí iTunes, OPML souborů nebo RSS. +Stahujte, streamujte nebo si vytvořte frontu epizod a užijte si poslech tak, jak ho máte rádi s nastavitelnou rychlostí přehrávání, podporou kapitol a s časovačem vypnutí. +Ušetři si námahu, baterku i mobilní data s pomocí robustní automatické kontroly nad stahováním epizod (urči časy, intervaly a WIFI sítě) a mazáním epizod (na základě oblíbenosti a nastavení zpoždění). + +Vytvořeno nadšenci do podcastů, AntennaPod je otevřený software (OSS), zdarma a bez reklam. + +<b>Importujte, zorganizujte a přehrávejte</b> +• Ovládejte přehrávání odkudkoli: z widgetu na domovské obrazovce, z oznámení nebo pomocí tlačítek na sluchátkách včetně Bluetooth +• Přidejte a importujte podcasty přes iTunes anebo gPodder.net, OPML soubory a RSS anebo Atom odkazy +• Užijte si poslech s nastavitelnou rychlostí přehrávání, podporou kapitol, zapamatování poslední pozice přehrávání a pokročilým časovačem vypnutí (restart zatřesením, snížení hlasitosti) +• Přistupujte k zaheslovaným podcastům a epizodám + +<b>Udržovat přehled, sdílet & ocenit</b> +• Udržujte si seznam toho nejlepšího z nejlepšího přidáním epizod do oblíbených +• Vyhledej tu správnou epizodu ve své historii přehrávání nebo prohledáním jmen a popisů epizod +• Sdílej epizody a kanály pomocí pokročilých nastavení pro sociální média a email, gPodder.net službu nebo OPML export + +<b>Ovládat systém</b> +• Převezmi kontrolu nad automatickým stahováním: vybírej kanály, vyluč mobilní sítě, vyber specifické WIFI sítě, vyžaduj stav nabíjení telefonu a nastav časy nebo intervaly +• Spravujte využití úložiště nastavením množství uložených epizod, chytrého mazání a výběrem místa uložení +• Přizpůsobte si aplikaci svému prostředí pomocí světlého nebo tmavého motivu +• Zálohujte své sbírky pomocí služby gPodder.net nebo exportem OPML souborů + +<b>Přidejte se do komunity AntennaPodu!</b> +AntennaPod je aktivně vyvíjen dobrovolníky. Můžete přispět také svým kódem nebo komentáři! + +Naše přátelská členská základna vám ráda zodpoví jakékoli dotazy. Zveme vás k diskuzi o AntennaPodu nebo i podcastech obecně. +https://forum.antennapod.org/ + +Na Transifexu můžete pomoct s překladem: +https://www.transifex.com/antennapod/antennapod
\ No newline at end of file diff --git a/app/src/main/play/listings/cs-CZ/short-description.txt b/app/src/main/play/listings/cs-CZ/short-description.txt new file mode 100644 index 000000000..e0df116ee --- /dev/null +++ b/app/src/main/play/listings/cs-CZ/short-description.txt @@ -0,0 +1 @@ +Jednoduchý a flexibilní open-source program pro správu a poslech podcastů
\ No newline at end of file diff --git a/app/src/main/play/listings/cs-CZ/title.txt b/app/src/main/play/listings/cs-CZ/title.txt new file mode 100644 index 000000000..31552f353 --- /dev/null +++ b/app/src/main/play/listings/cs-CZ/title.txt @@ -0,0 +1 @@ +AntennaPod
\ No newline at end of file diff --git a/app/src/main/play/listings/de-DE/graphics/large-tablet-screenshots/tablet.png b/app/src/main/play/listings/de-DE/graphics/large-tablet-screenshots/tablet.png Binary files differnew file mode 100644 index 000000000..5ff81f1e0 --- /dev/null +++ b/app/src/main/play/listings/de-DE/graphics/large-tablet-screenshots/tablet.png diff --git a/app/src/main/play/listings/en-US/graphics/large-tablet-screenshots/tablet.png b/app/src/main/play/listings/en-US/graphics/large-tablet-screenshots/tablet.png Binary files differnew file mode 100644 index 000000000..2defb5ce9 --- /dev/null +++ b/app/src/main/play/listings/en-US/graphics/large-tablet-screenshots/tablet.png diff --git a/app/src/main/play/listings/es-ES/full-description.txt b/app/src/main/play/listings/es-ES/full-description.txt index b15dd1762..52897ce9c 100644 --- a/app/src/main/play/listings/es-ES/full-description.txt +++ b/app/src/main/play/listings/es-ES/full-description.txt @@ -24,8 +24,8 @@ Creado por entusiastas del pódcast, AntennaPod es libre en todos los sentidos: <b>¡Únete a la comunidad AntennaPod!</b> AntennaPod es desarrollado por voluntarios. ¡Tú también puedes contribuir, con tu código o con tus comentarios! -Visita GitHub para solicitar características nuevas, reportar fallos y contribuir con código: -https://www.github.com/AntennaPod/AntennaPod +Nuestros amables miembros del foro te ayudarán con cualquier duda que tengas. Estás invitado a discutir sobre las características y el podcasting en general. +https://forum.antennapod.org/ Ayuda con las traducciones en Transifex: https://www.transifex.com/antennapod/antennapod
\ No newline at end of file diff --git a/app/src/main/play/release-notes/en-US/default.txt b/app/src/main/play/release-notes/en-US/default.txt index 6baa07d5a..c911a4f1f 100644 --- a/app/src/main/play/release-notes/en-US/default.txt +++ b/app/src/main/play/release-notes/en-US/default.txt @@ -1,5 +1,3 @@ -This is a beta release for AntennaPod 2.1.0 - - A long-standing wish of many: playing local files! In the 'Add podcast' screen simply tap 'Add local folder' and select a location on your phone! (@ByteHamster, @igoralmeida & @damoasda) - Pick a country for the 'Discover' screen (@tonytamsf) - Keyboard shortcuts (@asdoi) diff --git a/app/src/main/res/layout/filter_dialog.xml b/app/src/main/res/layout/filter_dialog.xml index 39e9258d9..d700f0365 100644 --- a/app/src/main/res/layout/filter_dialog.xml +++ b/app/src/main/res/layout/filter_dialog.xml @@ -1,11 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:paddingLeft="24dp" - android:paddingTop="24dp" - android:paddingRight="24dp" - android:paddingBottom="8dp"> - -</LinearLayout>
\ No newline at end of file +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/filter_rows" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingLeft="24dp" + android:paddingTop="24dp" + android:paddingRight="24dp" + android:paddingBottom="8dp"> + </LinearLayout> +</ScrollView> diff --git a/app/src/main/res/layout/filter_dialog_row.xml b/app/src/main/res/layout/filter_dialog_row.xml index 0863997b3..5011812d9 100644 --- a/app/src/main/res/layout/filter_dialog_row.xml +++ b/app/src/main/res/layout/filter_dialog_row.xml @@ -28,7 +28,7 @@ android:layout_marginRight="2dp" android:layout_weight="1" android:background="?attr/filter_dialog_button_background" - android:button="@android:color/transparent" + style="@style/NoButtonRadio" android:foreground="?android:attr/selectableItemBackground" android:checked="false" android:gravity="center" @@ -40,7 +40,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:background="?attr/filter_dialog_button_background" - android:button="@android:color/transparent" + style="@style/NoButtonRadio" android:foreground="?android:attr/selectableItemBackground" android:checked="false" android:gravity="center" @@ -53,7 +53,7 @@ android:layout_width="48dp" android:layout_height="48dp" android:background="@drawable/ic_filter_close" - android:button="@android:color/transparent" + style="@style/NoButtonRadio" android:foreground="?android:attr/selectableItemBackground" android:layout_gravity="center_vertical" android:checked="true" /> |