diff options
Diffstat (limited to 'app')
14 files changed, 90 insertions, 138 deletions
diff --git a/app/build.gradle b/app/build.gradle index b4526aaf8..9d73b77e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { // Version code schema: // "1.2.3-beta4" -> 1020304 // "1.2.3" -> 1020395 - versionCode 2060295 - versionName "2.6.2" + versionCode 2070095 + versionName "2.7.0" def commit = "" try { diff --git a/app/src/main/assets/developers.csv b/app/src/main/assets/developers.csv index 675f3cf93..e059d7e68 100644 --- a/app/src/main/assets/developers.csv +++ b/app/src/main/assets/developers.csv @@ -113,6 +113,7 @@ jmdouglas;10855634;Contributor olivoto;15932680;Contributor PtilopsisLeucotis;54054883;Contributor abhinavg1997;60095795;Contributor +adrns;13379985;Contributor alanorth;191754;Contributor alexte;7724992;Contributor andrey-krutov;1488973;Contributor @@ -127,6 +128,7 @@ danielm5;66779;Contributor ariedov;958646;Contributor brettle;118192;Contributor cdhiraj40;75211982;Contributor +dhruvpatidar359;103873587;Contributor edwinhere;19705425;Contributor eirikv;4076243;Contributor eerden;277513;Contributor @@ -160,6 +162,7 @@ nproth;48482306;Contributor oliver;2344;Contributor panoreak;25068506;Contributor patrickjkennedy;8617261;Contributor +pganssle;1377457;Contributor ortylp;470439;Contributor RafaelBod;77226971;Contributor ramzan;55637406;Contributor @@ -178,6 +181,7 @@ vimsick;20211590;Contributor lyallemma;25173082;Contributor edent;837136;Contributor atrus6;357881;Contributor +Toover;8531603;Contributor heyyviv;56256802;Contributor waylife;3348620;Contributor yarons;406826;Contributor diff --git a/app/src/main/assets/translators.csv b/app/src/main/assets/translators.csv index e60f85313..391e2201f 100644 --- a/app/src/main/assets/translators.csv +++ b/app/src/main/assets/translators.csv @@ -1,49 +1,49 @@ -Arabic;abuzar3.khalid, AhmedHll, badarotti, HeshamTB, keunes, Mehyar, mhamade, moftasa, mohmans, MustafaAlgurabi, nabilMaghura, rex07, shubbar +Arabic;abuzar3.khalid, AhmedHll, badarotti, HeshamTB, keunes, Mehyar, mh.abdelhay, mhamade, moftasa, mohmans, MustafaAlgurabi, nabilMaghura, rex07, shubbar Asturian (ast_ES);enolp, keunes -Azerbaijani;5NOER227O +Azerbaijani;5NOER227O, xxmn77 Basque;bipoza, gaztainalde, IngrownMink4, keunes, Osoitz, pospolos Bengali;laggybird Breton;Belvar, Eorn, Iriep, keunes, technozuzici Bulgarian;keunes, ma4ko, ppk89, solusitor, x7ype Catalan;arseru, badlop, bluegeekgh, carles.llacer, dvd1985, exort12, IvanAmarante, javiercoll, keunes, Kintu, lambdani, marcmetallextrem, xc70 -Chinese (zh_CN);Biacke, brnme, claybiockiller, cyril3, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, jhxie, jxj2zzz79pfp9bpo, JY3, keunes, kyleehee, molisiye, owen8877, RainSlide, RangerNJU, Sak94664, spice2wolf, tupunco, wongsyrone, yangyang, yiqiok +Chinese (zh_CN);135e2, Biacke, brnme, claybiockiller, clong289734997, cyril3, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, jhxie, jxj2zzz79pfp9bpo, JY3, 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, befeleme, elich, Hanzmeister, jjh, McLenin666, md.share, svetlemodry, Thomaash, viotalJiplk +Czech (cs_CZ);anotheranonymoususer, befeleme, elich, Hanzmeister, jjh, McLenin666, md.share, ShimonH, svetlemodry, Thomaash, viotalJiplk Danish;deusdenton, ERYpTION, JFreak, jhertel, keunes, mikini, petterbejo, SebastianKiwiDk Dutch;e2jk, keunes, mijnheer, oldblue, rwv, Vistaus Estonian;beez276, Eraser, keunes, mahfiaz Finnish;Ban3, keunes, ktstmu, Kuutar, noppa, Sahtor, scop, teemue -French;5NOER227O, ayiniho, ChaoticMind, clombion, Cornegidouille, Daremo, e2jk, keunes, klintom, Kuscoo, lacouture, LouFex, Matth78, petterbejo, Poussinou, RomainTT, sterylmreep, teamon +French;5NOER227O, ayiniho, ChaoticMind, clombion, Cornegidouille, Daremo, e2jk, keunes, klintom, Kuscoo, lacouture, LouFex, Matth78, petterbejo, PierreLaville, Poussinou, RomainTT, sterylmreep, teamon Galician;antiparvos, pikamoku, Raichely -German;5NOER227O, _Er, axre, ByteHamster, Ceekay, ceving, dadosch, datesastick, DerSilly, elkangaroo, enz, Erc187, f_grubm, finsterwalder, forght, hbilke, HolgerJeromin, JMAN, JoeMcFly, jokap, JoniArida, JonOfUs, kalei, keunes, Macusercom, max.wittig, mfietz, Michael_Strecke, mkida, petterbejo, pudeeh, Quiss42, repat, sadfgdf, Sargon_Isa, teamon, thetrash23, timo.rohwedder, toaskoas, Tobiasff3200, tomte, Tonne11, tweimer, VfBFan, Willhelm, ypid +German;5NOER227O, _Er, axre, ByteHamster, Ceekay, ceving, dadosch, datesastick, DerSilly, elkangaroo, enz, Erc187, f_grubm, finsterwalder, forght, hbilke, HolgerJeromin, JMAN, JoeMcFly, jokap, JoniArida, JonOfUs, kalei, keunes, Kostas_F, Macusercom, max.wittig, mfietz, Michael_Strecke, mkida, petterbejo, pudeeh, Quiss42, repat, sadfgdf, Sargon_Isa, teamon, thetrash23, timo.rohwedder, toaskoas, Tobiasff3200, tomte, Tonne11, tweimer, VfBFan, Willhelm, ypid Hebrew (he_IL);amir.dafnyman, E1i9, mongoose4004, pinkasey, rellieberman, Yaron -Hindi (hi_IN);keunes, purple.coder, siddhusengar, thelazyoxymoron +Hindi (hi_IN);keunes, purple.coder, rajs1942, siddhusengar, singhrishi245021, thelazyoxymoron Hu;hurrikan, keunes, lna91, lomapur, marthynw, meskobalazs, naren93 Icelandic;keunes, marthjod Indonesian;dbrw, justch, keunes, levirs565, liimee -Italian (it_IT);aalex70, allin, alvami, Bonnee, datesastick, dontknowcris, giuseppep, Guybrush88, ilmanzo, juanjom, keunes, lu.por, m.chinni, marco_pag, mat650, mircocau, neonsoftware, niccord, salorock, theloca95 +Italian (it_IT);aalex70, allin, alvami, atilluF, Bonnee, datesastick, dontknowcris, giuseppep, Guybrush88, ilmanzo, juanjom, keunes, lu.por, m.chinni, marco_pag, mat650, mircocau, neonsoftware, niccord, salorock, theloca95 Japanese;ayiniho, keunes, KotaKato, Naofumi, sh3llc4t, tko_cactus, TranslatorG -Kannada (kn_IN);chiraag.nataraj, keunes, thejeshgn +Kannada (kn_IN);chiraag.nataraj, deepu2, keunes, thejeshgn Ko;changwoo, eshc123, keunes, libliboom Latin;nivaca Lithuanian;keunes, naglis, Sharper Macedonian;krisfremen Malayalam;joice, keunes, KiranS, rashivkp -Modern Greek (1453-);AnimaRain, antonist, keunes, pavlosv -Norwegian Bokmål (nb_NO);abstrakct, ahysing, bablecopherye, corkie, forteller, heraldo, jakobkg, keunes, kongk, sevenmaster, tc5, timbast, ttick -Persian;ahangarha, danialbehzadi, ebadi, ebraminio, F7D, hamidrezabayat76, keunes, sinamoghaddas -Polish (pl_PL);befeleme, ewm, hiro2020, Iwangelion, kamila.miodek1991, keunes, lomapur, mandlus, maniexx, Mephistofeles, millup, Rakowy_Manaska, shark103, tyle +Modern Greek (1453-);AnimaRain, antonist, keunes, Kostas_F, pavlosv, pcguy23 +Norwegian Bokmål (nb_NO);abstrakct, ahysing, bablecopherye, corkie, forteller, heraldo, jakobkg, Jamiera, keunes, kongk, sevenmaster, tc5, timbast, TrymSan, ttick +Persian;ahangarha, danialbehzadi, ebadi, ebraminio, F7D, hamidrezabayat76, K2latmanesh, keunes, sinamoghaddas +Polish (pl_PL);befeleme, ewm, Gadzinisko, hiro2020, Iwangelion, kamila.miodek1991, keunes, lomapur, mandlus, maniexx, Mephistofeles, millup, Rakowy_Manaska, shark103, tyle Portuguese;emansije, jmelo461, keunes, lecalam, smarquespt, WalkerPt -Portuguese (pt_BR);alexupits, alysonborges, amalvarenga, andersonvom, aracnus, arua, bandreghetti, caioau, carlo_valente, castrors, jmelo461, keunes, lipefire, mbaltar, olivoto, rogervezaro, RubeensVinicius, SamWilliam, tepadilha, tschertel, ziul123 -Romanian (ro_RO);AdrianMirica, corneliu.e, fuzzmz, keunes, mozartro, ralienpp +Portuguese (pt_BR);alexupits, alysonborges, amalvarenga, andersonvom, aracnus, arua, bandreghetti, caioau, carlo_valente, castrors, jmelo461, keunes, lipefire, mbaltar, olivoto, philosp, rogervezaro, RubeensVinicius, SamWilliam, tepadilha, tschertel, ziul123 +Romanian (ro_RO);AdrianMirica, fuzzmz, keunes, mozartro, ralienpp Russian (ru_RU);ashed, btimofeev, Duke_Raven, flexagoon, gammja, homocomputeris, IgorPolyakov, keunes, mercutiy, nachoman, null, overmind88, Platun0v, PtilopsisLeucotis, s.chebotar, tepxd, un_logic, Vladryyu, whereisthetea, yako Slovak;ati3, jose1711, keunes, marulinko, McLenin666, real_name, tiborepcek Slovenian (sl_SI);anzepintar, asovic, keunes, panter23, TheFireFighter, trus2 -Spanish;AleksSyntek, andersonvom, andrespelaezp, arseru, Atreyu94, badlop, CaeM0R, carlos.levy, cartojo, deandreamatias, devarops, dvd1985, elojodepajaro, Fitoschido, frandavid100, hard_ware, javiercoll, keunes, kiekie, LatinSuD, leogrignafini, meanderingDot, nivaca, rafael.osuna, technozuzici, tres.14159, vfmatzkin, wakutiteo, ziul123 +Spanish;5NOER227O, AleksSyntek, andersonvom, andrespelaezp, arseru, Atreyu94, badlop, CaeM0R, carlos.levy, cartojo, deandreamatias, delthia, devarops, dvd1985, elojodepajaro, Fitoschido, frandavid100, hard_ware, javiercoll, keunes, kiekie, LatinSuD, leogrignafini, meanderingDot, nivaca, rafael.osuna, technozuzici, tres.14159, vfmatzkin, victorzequeida96, wakutiteo, ziul123 Swahili (macrolanguage);1silvester, keunes, kmtra Swedish (sv_SE);aiix, bittin, bpnilsson, keunes, LinAGKar, nilso, TwoD, victorhggqvst Tatar;seber Telugu;keunes, veeven -Turkish;AhmedDuran, alianilkocak, AliGaygisiz, androtuna, brsata, Erdy, keunes, overbite, Slsdem -Ukrainian (uk_UA);anmizyk, hishak, keunes, older, paul_sm, sergiyr, voinovich_vyacheslav, zhenya97 +Turkish;AhmedDuran, alianilkocak, AliGaygisiz, androtuna, archixe, brsata, Erdy, keunes, overbite, Slsdem +Ukrainian (uk_UA);hishak, keunes, older, paul_sm, sergiyr, voinovich_vyacheslav, zhenya97 Vietnamese;abnvolk, bruhwut, keunes, ppanhh diff --git a/app/src/main/assets/website-languages.txt b/app/src/main/assets/website-languages.txt index b52b558f9..fbbe50993 100644 --- a/app/src/main/assets/website-languages.txt +++ b/app/src/main/assets/website-languages.txt @@ -2,3 +2,4 @@ en fr nl it +da diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 36e02929a..475a6a109 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -15,7 +15,8 @@ import de.danoeh.antennapod.model.feed.FeedItemFilter; import org.apache.commons.lang3.StringUtils; import org.greenrobot.eventbus.Subscribe; -import java.util.Collections; +import java.util.ArrayList; +import java.util.HashSet; /** * Shows all episodes (possibly filtered by user). @@ -33,9 +34,8 @@ public class AllEpisodesFragment extends EpisodesListFragment { toolbar.setTitle(R.string.episodes_label); updateToolbar(); updateFilterUi(); - speedDialView.removeActionItemById(R.id.mark_unread_batch); - speedDialView.removeActionItemById(R.id.remove_from_queue_batch); - speedDialView.removeActionItemById(R.id.delete_batch); + txtvInformation.setOnClickListener( + v -> AllEpisodesFilterDialog.newInstance(getFilter()).show(getChildFragmentManager(), null)); return root; } @@ -64,8 +64,13 @@ public class AllEpisodesFragment extends EpisodesListFragment { AllEpisodesFilterDialog.newInstance(getFilter()).show(getChildFragmentManager(), null); return true; } else if (item.getItemId() == R.id.action_favorites) { - onFilterChanged(new AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent(getFilter().showIsFavorite - ? Collections.emptySet() : Collections.singleton(FeedItemFilter.IS_FAVORITE))); + ArrayList<String> filter = new ArrayList<>(getFilter().getValuesList()); + if (filter.contains(FeedItemFilter.IS_FAVORITE)) { + filter.remove(FeedItemFilter.IS_FAVORITE); + } else { + filter.add(FeedItemFilter.IS_FAVORITE); + } + onFilterChanged(new AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent(new HashSet<>(filter))); return true; } return false; @@ -91,5 +96,7 @@ public class AllEpisodesFragment extends EpisodesListFragment { txtvInformation.setVisibility(View.GONE); emptyView.setMessage(R.string.no_all_episodes_label); } + toolbar.getMenu().findItem(R.id.action_favorites).setIcon( + getFilter().showIsFavorite ? R.drawable.ic_star : R.drawable.ic_star_border); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index f1befcd94..b4e4bebb9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -4,7 +4,6 @@ import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -22,7 +21,6 @@ import de.danoeh.antennapod.adapter.actionbutton.DeleteActionButton; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.DownloadLogEvent; import de.danoeh.antennapod.core.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; @@ -67,16 +65,14 @@ public class CompletedDownloadsFragment extends Fragment private Disposable disposable; private EmptyViewHandler emptyView; private boolean displayUpArrow; - private boolean isUpdatingFeeds = false; private SpeedDialView speedDialView; - private Toolbar toolbar; private SwipeActions swipeActions; @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.simple_list_fragment, container, false); - toolbar = root.findViewById(R.id.toolbar); + Toolbar toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.downloads_label); toolbar.inflateMenu(R.menu.downloads_completed); toolbar.setOnMenuItemClickListener(this); @@ -85,7 +81,6 @@ public class CompletedDownloadsFragment extends Fragment recyclerView.post(() -> recyclerView.smoothScrollToPosition(0)); return false; }); - refreshToolbarState(); displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; if (savedInstanceState != null) { displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); @@ -167,12 +162,6 @@ public class CompletedDownloadsFragment extends Fragment } @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - menu.findItem(R.id.clear_logs_item).setVisible(false); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } - - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.refresh_item) { AutoUpdateManager.runImmediate(requireContext()); @@ -190,9 +179,6 @@ public class CompletedDownloadsFragment extends Fragment @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } if (!Arrays.equals(event.update.mediaIds, runningDownloads)) { runningDownloads = event.update.mediaIds; loadItems(); @@ -208,9 +194,6 @@ public class CompletedDownloadsFragment extends Fragment } } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - @Override public boolean onContextItemSelected(@NonNull MenuItem item) { FeedItem selectedItem = adapter.getLongPressedItem(); @@ -270,11 +253,6 @@ public class CompletedDownloadsFragment extends Fragment } } - private void refreshToolbarState() { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { loadItems(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index f581a16f5..03764f61c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -8,7 +8,6 @@ import android.util.Log; import android.view.ContextMenu; import android.view.KeyEvent; import android.view.LayoutInflater; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -84,11 +83,9 @@ public abstract class EpisodesListFragment extends Fragment @NonNull List<FeedItem> episodes = new ArrayList<>(); - private volatile boolean isUpdatingFeeds; protected Disposable disposable; protected TextView txtvInformation; - @Override public void onStart() { super.onStart(); @@ -118,14 +115,6 @@ public abstract class EpisodesListFragment extends Fragment } } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } - @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (super.onOptionsItemSelected(item)) { @@ -423,9 +412,7 @@ public abstract class EpisodesListFragment extends Fragment public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); DownloaderUpdate update = event.update; - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - updateToolbar(); - } + updateToolbar(); if (update.mediaIds.length > 0) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(episodes, mediaId); @@ -436,26 +423,19 @@ public abstract class EpisodesListFragment extends Fragment } } - private void updateUi() { - loadItems(); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - updateToolbar(); - } - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { - updateUi(); + loadItems(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { - updateUi(); + loadItems(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onFeedListChanged(FeedListUpdateEvent event) { - updateUi(); + loadItems(); } void loadItems() { @@ -498,8 +478,10 @@ public abstract class EpisodesListFragment extends Fragment protected abstract String getPrefName(); protected void updateToolbar() { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + if (toolbar.getMenu().findItem(R.id.refresh_item) != null) { + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFeeds()); + } } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java index bca0f8640..909d082af 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java @@ -57,7 +57,7 @@ import io.reactivex.schedulers.Schedulers; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; -import java.util.HashSet; +import java.util.Iterator; /** * Displays information about a feed. @@ -236,13 +236,24 @@ public class FeedInfoFragment extends Fragment implements Toolbar.OnMenuItemClic } else { lblSupport.setVisibility(View.VISIBLE); ArrayList<FeedFunding> fundingList = feed.getPaymentLinks(); + + // Filter for duplicates, but keep items in the order that they have in the feed. + Iterator<FeedFunding> i = fundingList.iterator(); + while (i.hasNext()) { + FeedFunding funding = i.next(); + for (FeedFunding other : fundingList) { + if (TextUtils.equals(other.url, funding.url)) { + if (other.content != null && funding.content != null + && other.content.length() > funding.content.length()) { + i.remove(); + break; + } + } + } + } + StringBuilder str = new StringBuilder(); - HashSet<String> seen = new HashSet<String>(); for (FeedFunding funding : fundingList) { - if (seen.contains(funding.url)) { - continue; - } - seen.add(funding.url); str.append(funding.content.isEmpty() ? getContext().getResources().getString(R.string.support_podcast) : funding.content).append(" ").append(funding.url); 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 d5dd51e93..dfae22491 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -92,7 +92,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem private long feedID; private Feed feed; private boolean headerCreated = false; - private boolean isUpdatingFeed; private Disposable disposable; private FeedItemListFragmentBinding viewBinding; private MultiSelectSpeedDialBinding speedDialBinding; @@ -140,7 +139,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); } ((MainActivity) getActivity()).setupToolbarToggle(viewBinding.toolbar, displayUpArrow); - refreshToolbarState(); + updateToolbar(); viewBinding.recyclerView.setRecycledViewPool(((MainActivity) getActivity()).getRecycledViewPool()); viewBinding.progLoading.setVisibility(View.VISIBLE); @@ -234,17 +233,14 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem super.onSaveInstanceState(outState); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFile(feed.getDownload_url()); - - private void refreshToolbarState() { + private void updateToolbar() { if (feed == null) { return; } viewBinding.toolbar.getMenu().findItem(R.id.visit_website_item).setVisible(feed.getLink() != null); - isUpdatingFeed = MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFile(feed.getDownload_url())); FeedMenuHandler.onPrepareOptionsMenu(viewBinding.toolbar.getMenu(), feed); } @@ -338,9 +334,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); DownloaderUpdate update = event.update; - if (event.hasChangedFeedUpdateStatus(isUpdatingFeed)) { - updateSyncProgressBarVisibility(); - } + updateToolbar(); if (adapter != null && update.mediaIds.length > 0 && feed != null) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId); @@ -383,7 +377,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem speedDialBinding.fabSD.removeActionItemById(R.id.delete_batch); } speedDialBinding.fabSD.setVisibility(View.VISIBLE); - refreshToolbarState(); + updateToolbar(); } @Override @@ -416,9 +410,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem } private void updateSyncProgressBarVisibility() { - if (isUpdatingFeed != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + updateToolbar(); if (!DownloadService.isDownloadingFeeds()) { nextPageLoader.getRoot().setVisibility(View.GONE); } @@ -443,7 +435,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem swipeActions.setFilter(feed.getItemFilter()); } - refreshToolbarState(); + updateToolbar(); updateSyncProgressBarVisibility(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 370deee76..467299e4c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -87,8 +87,6 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi private List<FeedItem> queue; - private boolean isUpdatingFeeds = false; - private static final String PREFS = "QueueFragment"; private static final String PREF_SHOW_LOCK_WARNING = "show_lock_warning"; @@ -191,9 +189,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with DownloadEvent"); DownloaderUpdate update = event.update; - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } + refreshToolbarState(); if (recyclerAdapter != null && update.mediaIds.length > 0) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(queue, mediaId); @@ -221,18 +217,14 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { loadItems(false); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + refreshToolbarState(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { // Sent when playback position is reset loadItems(false); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + refreshToolbarState(); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -261,17 +253,14 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi recyclerAdapter = null; } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - private void refreshToolbarState() { boolean keepSorted = UserPreferences.isQueueKeepSorted(); toolbar.getMenu().findItem(R.id.queue_lock).setChecked(UserPreferences.isQueueLocked()); toolbar.getMenu().findItem(R.id.queue_lock).setVisible(!keepSorted); toolbar.getMenu().findItem(R.id.queue_sort_random).setVisible(!keepSorted); toolbar.getMenu().findItem(R.id.queue_keep_sorted).setChecked(keepSorted); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), + R.id.refresh_item, DownloadService.isRunning && DownloadService.isDownloadingFeeds()); } @Override 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 6256faddb..bb7d9ff30 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -93,7 +93,6 @@ public class SubscriptionFragment extends Fragment private TextView feedsFilteredMsg; private Toolbar toolbar; private String displayedFolder = null; - private boolean isUpdatingFeeds = false; private boolean displayUpArrow; private Disposable disposable; @@ -200,8 +199,8 @@ public class SubscriptionFragment extends Fragment int columns = prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns()); toolbar.getMenu().findItem(COLUMN_CHECKBOX_IDS[columns - MIN_NUM_COLUMNS]).setChecked(true); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFeeds()); } @Override @@ -407,14 +406,9 @@ public class SubscriptionFragment extends Fragment @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } + refreshToolbarState(); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - @Override public void onEndSelectMode() { speedDialView.close(); diff --git a/app/src/main/java/de/danoeh/antennapod/ui/home/HomeFragment.java b/app/src/main/java/de/danoeh/antennapod/ui/home/HomeFragment.java index 27419c8a2..a08907917 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/home/HomeFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/home/HomeFragment.java @@ -52,7 +52,6 @@ public class HomeFragment extends Fragment implements Toolbar.OnMenuItemClickLis private static final String KEY_UP_ARROW = "up_arrow"; private boolean displayUpArrow; private HomeFragmentBinding viewBinding; - private boolean isUpdatingFeeds = false; private Disposable disposable; @NonNull @@ -115,20 +114,14 @@ public class HomeFragment extends Fragment implements Toolbar.OnMenuItemClickLis return new ArrayList<>(Arrays.asList(TextUtils.split(hiddenSectionsString, ","))); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - private void refreshToolbarState() { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), + R.id.refresh_item, DownloadService.isRunning && DownloadService.isDownloadingFeeds()); } @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventMainThread(DownloadEvent event) { - Log.d(TAG, "onEventMainThread() called with DownloadEvent"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } + refreshToolbarState(); } @Override 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 f74f32c72..1232dd6ad 100644 --- a/app/src/main/play/release-notes/en-US/default.txt +++ b/app/src/main/play/release-notes/en-US/default.txt @@ -1,6 +1,6 @@ -∙ Support for podcasting 2.0 chapters (@tonytamsf) -∙ Statistics: filter based on month/year (@ByteHamster), access via button on Subscriptions toolbar instead of Settings (@IordanisKokk) -∙ Local feed bug fixes & improvements (@ByteHamster) -∙ Design improvements (design: George, code: @ByteHamster) -∙ Update feeds to https if possible, better handle captive portal redirects (@ByteHamster) -∙ As always, even though we never list it: new & updated translations (thanks to all our lovely translators) +∙ View "New Episodes" list now in a dedicated screen called Inbox, with swipe actions (@ByteHamster) +∙ Use swipe actions and quickly toggle Favourites on the Episodes screen (@ByteHamster) +∙ View a list of (unplayed) episodes in Android Auto (@tonytamsf) +∙ Scroll to the top of lists by long-pressing the toolbar (@ByteHamster) +∙ Bug fixes around authentication for podcasts & Nextcloud sync (@ByteHamster) +∙ Directly open localised documentation if available (for now: da, fr, it, nl) (@ByteHamster) diff --git a/app/src/main/res/layout/episodes_list_fragment.xml b/app/src/main/res/layout/episodes_list_fragment.xml index 2391a73ae..629b7ab0e 100644 --- a/app/src/main/res/layout/episodes_list_fragment.xml +++ b/app/src/main/res/layout/episodes_list_fragment.xml @@ -20,6 +20,7 @@ android:id="@+id/txtvInformation" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" android:gravity="center" android:layout_below="@id/toolbar" android:paddingTop="2dp" |