diff options
author | ByteHamster <info@bytehamster.com> | 2020-11-01 16:06:02 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-11-01 16:59:59 +0100 |
commit | 87e7a6761036d5a700cbd4ffdebf87fa76ca7848 (patch) | |
tree | 98c8b3a17311f67397aebf9a48a77c1c921e5684 | |
parent | bec385a0a854de10b223f6bb3efdd35f506ceb48 (diff) | |
download | AntennaPod-87e7a6761036d5a700cbd4ffdebf87fa76ca7848.zip |
Reduced lag when switching tabs
13 files changed, 44 insertions, 75 deletions
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 0c75b7eea..ae3ba3a54 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -56,10 +56,11 @@ public class AllEpisodesFragment extends EpisodesListFragment { } @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); + public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); menu.findItem(R.id.filter_items).setVisible(true); menu.findItem(R.id.mark_all_read_item).setVisible(true); + menu.findItem(R.id.remove_all_new_flags_item).setVisible(false); } @Override 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 a18d7acb9..59b2cd234 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -105,12 +105,8 @@ public class CompletedDownloadsFragment extends Fragment { } @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.downloads_completed, menu); - } - - @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + menu.findItem(R.id.clear_logs_item).setVisible(false); menu.findItem(R.id.episode_actions).setVisible(items.size() > 0); isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java index 91b8ee5cb..98d6a946b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java @@ -166,13 +166,9 @@ public class DownloadLogFragment extends ListFragment { } @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.downloads_log, menu); - } - - @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { - menu.findItem(R.id.clear_history_item).setVisible(!downloadLog.isEmpty()); + menu.findItem(R.id.episode_actions).setVisible(false); + menu.findItem(R.id.clear_logs_item).setVisible(!downloadLog.isEmpty()); isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java index 1a84fd69e..ffb3e71fa 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java @@ -47,6 +47,7 @@ public class DownloadsFragment extends PagedToolbarFragment { View root = inflater.inflate(R.layout.pager_fragment, container, false); Toolbar toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.downloads_label); + toolbar.inflateMenu(R.menu.downloads); ((MainActivity) getActivity()).setupToolbarToggle(toolbar); viewPager = root.findViewById(R.id.viewpager); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java index 83f769207..eff23f7a3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java @@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayoutMediator; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; public class EpisodesFragment extends PagedToolbarFragment { @@ -41,6 +42,8 @@ public class EpisodesFragment extends PagedToolbarFragment { View rootView = inflater.inflate(R.layout.pager_fragment, container, false); Toolbar toolbar = rootView.findViewById(R.id.toolbar); toolbar.setTitle(R.string.episodes_label); + toolbar.inflateMenu(R.menu.episodes); + MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, ""); ((MainActivity) getActivity()).setupToolbarToggle(toolbar); ViewPager2 viewPager = rootView.findViewById(R.id.viewpager); 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 cfb38881d..8dae310ba 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -13,7 +13,6 @@ import android.os.Looper; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -76,7 +75,6 @@ public abstract class EpisodesListFragment extends Fragment { List<FeedItem> episodes = new ArrayList<>(); private volatile boolean isUpdatingFeeds; - private boolean isMenuVisible = true; protected Disposable disposable; protected TextView txtvInformation; @@ -117,18 +115,6 @@ public abstract class EpisodesListFragment extends Fragment { () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); @Override - public void setMenuVisibility(final boolean visible) { - super.setMenuVisibility(visible); - isMenuVisible = visible; - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.episodes, menu); - MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), 0, ""); - } - - @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } @@ -288,7 +274,7 @@ public abstract class EpisodesListFragment extends Fragment { if (restoreScrollPosition) { recyclerView.restoreScrollPosition(getPrefName()); } - if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { + if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this); } } @@ -343,7 +329,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 (isMenuVisible && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { + if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this); } if (update.mediaIds.length > 0) { @@ -358,7 +344,7 @@ public abstract class EpisodesListFragment extends Fragment { private void updateUi() { loadItems(); - if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { + if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this); } } @@ -390,6 +376,7 @@ public abstract class EpisodesListFragment extends Fragment { hasMoreItems = true; episodes = data; onFragmentLoaded(episodes); + ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this); }, error -> Log.e(TAG, Log.getStackTraceString(error))); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java index d50be88c5..e1fd36731 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.fragment; import android.os.Bundle; +import android.view.Menu; import androidx.annotation.NonNull; import com.google.android.material.snackbar.Snackbar; import androidx.recyclerview.widget.RecyclerView; @@ -42,6 +43,14 @@ public class FavoriteEpisodesFragment extends EpisodesListFragment { loadItems(); } + @Override + public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); + menu.findItem(R.id.filter_items).setVisible(false); + menu.findItem(R.id.mark_all_read_item).setVisible(false); + menu.findItem(R.id.remove_all_new_flags_item).setVisible(false); + } + @NonNull @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 96c02f54d..d748d14c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -38,8 +38,10 @@ public class NewEpisodesFragment extends EpisodesListFragment { } @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); + public void onPrepareOptionsMenu(@NonNull Menu menu) { + super.onPrepareOptionsMenu(menu); + menu.findItem(R.id.filter_items).setVisible(false); + menu.findItem(R.id.mark_all_read_item).setVisible(false); menu.findItem(R.id.remove_all_new_flags_item).setVisible(true); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java index 686765b90..2ed26b1c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java @@ -6,20 +6,19 @@ import androidx.viewpager2.widget.ViewPager2; /** * Fragment with a ViewPager where the displayed items influence the top toolbar's menu. + * All items share the same general menu items and are just allowed to show/hide them. */ public abstract class PagedToolbarFragment extends Fragment { private Toolbar toolbar; private ViewPager2 viewPager; - private int currentInflatedMenu = -1; + /** + * Invalidate the toolbar menu if the current child fragment is visible. + * @param child The fragment, or null to force-refresh whatever the active fragment is. + */ void invalidateOptionsMenuIfActive(Fragment child) { Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem()); - if (visibleChild == child) { - if (currentInflatedMenu != viewPager.getCurrentItem()) { - currentInflatedMenu = viewPager.getCurrentItem(); - toolbar.getMenu().clear(); - child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater()); - } + if (visibleChild == child || child == null) { child.onPrepareOptionsMenu(toolbar.getMenu()); } } @@ -39,11 +38,7 @@ public abstract class PagedToolbarFragment extends Fragment { @Override public void onPageSelected(int position) { Fragment child = getChildFragmentManager().findFragmentByTag("f" + position); - if (child != null && getActivity() != null) { - toolbar.getMenu().clear(); - child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater()); - currentInflatedMenu = position; - + if (child != null) { child.onPrepareOptionsMenu(toolbar.getMenu()); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java index d02da8b36..087abc327 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -88,12 +88,9 @@ public class RunningDownloadsFragment extends ListFragment { } @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.downloads_running, menu); - } - - @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { + menu.findItem(R.id.clear_logs_item).setVisible(false); + menu.findItem(R.id.episode_actions).setVisible(false); isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } diff --git a/app/src/main/res/menu/downloads_completed.xml b/app/src/main/res/menu/downloads.xml index e07af520f..c8ee20e35 100644 --- a/app/src/main/res/menu/downloads_completed.xml +++ b/app/src/main/res/menu/downloads.xml @@ -6,6 +6,14 @@ android:menuCategory="container" android:title="@string/multi_select" android:icon="?attr/checkbox_multiple" + android:visible="false" + app:showAsAction="ifRoom" /> + <item + android:id="@+id/clear_logs_item" + android:menuCategory="container" + android:title="@string/clear_history_label" + android:icon="?attr/ic_delete" + android:visible="false" app:showAsAction="ifRoom" /> <item android:id="@+id/refresh_item" diff --git a/app/src/main/res/menu/downloads_log.xml b/app/src/main/res/menu/downloads_log.xml deleted file mode 100644 index d37d9bf3f..000000000 --- a/app/src/main/res/menu/downloads_log.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto"> - <item - android:id="@+id/clear_history_item" - android:menuCategory="container" - android:title="@string/clear_history_label" - android:icon="?attr/ic_delete" - app:showAsAction="ifRoom" /> - <item - android:id="@+id/refresh_item" - android:title="@string/refresh_label" - android:menuCategory="container" - app:showAsAction="ifRoom" - android:icon="?attr/navigation_refresh"/> -</menu>
\ No newline at end of file diff --git a/app/src/main/res/menu/downloads_running.xml b/app/src/main/res/menu/downloads_running.xml deleted file mode 100644 index a2240d4aa..000000000 --- a/app/src/main/res/menu/downloads_running.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto"> - <item - android:id="@+id/refresh_item" - android:title="@string/refresh_label" - android:menuCategory="container" - app:showAsAction="ifRoom" - android:icon="?attr/navigation_refresh"/> -</menu>
\ No newline at end of file |