summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-11-01 16:06:02 +0100
committerByteHamster <info@bytehamster.com>2020-11-01 16:59:59 +0100
commit87e7a6761036d5a700cbd4ffdebf87fa76ca7848 (patch)
tree98c8b3a17311f67397aebf9a48a77c1c921e5684
parentbec385a0a854de10b223f6bb3efdd35f506ceb48 (diff)
downloadAntennaPod-87e7a6761036d5a700cbd4ffdebf87fa76ca7848.zip
Reduced lag when switching tabs
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java8
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java21
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java19
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java7
-rw-r--r--app/src/main/res/menu/downloads.xml (renamed from app/src/main/res/menu/downloads_completed.xml)8
-rw-r--r--app/src/main/res/menu/downloads_log.xml16
-rw-r--r--app/src/main/res/menu/downloads_running.xml10
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