Reduced lag when switching tabs
This commit is contained in:
parent
bec385a0a8
commit
87e7a67610
@ -56,10 +56,11 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onPrepareOptionsMenu(menu);
|
||||||
menu.findItem(R.id.filter_items).setVisible(true);
|
menu.findItem(R.id.filter_items).setVisible(true);
|
||||||
menu.findItem(R.id.mark_all_read_item).setVisible(true);
|
menu.findItem(R.id.mark_all_read_item).setVisible(true);
|
||||||
|
menu.findItem(R.id.remove_all_new_flags_item).setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -104,13 +104,9 @@ public class CompletedDownloadsFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
|
||||||
inflater.inflate(R.menu.downloads_completed, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
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);
|
menu.findItem(R.id.episode_actions).setVisible(items.size() > 0);
|
||||||
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
||||||
}
|
}
|
||||||
|
@ -165,14 +165,10 @@ public class DownloadLogFragment extends ListFragment {
|
|||||||
loadItems();
|
loadItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
|
||||||
inflater.inflate(R.menu.downloads_log, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
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);
|
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ public class DownloadsFragment extends PagedToolbarFragment {
|
|||||||
View root = inflater.inflate(R.layout.pager_fragment, container, false);
|
View root = inflater.inflate(R.layout.pager_fragment, container, false);
|
||||||
Toolbar toolbar = root.findViewById(R.id.toolbar);
|
Toolbar toolbar = root.findViewById(R.id.toolbar);
|
||||||
toolbar.setTitle(R.string.downloads_label);
|
toolbar.setTitle(R.string.downloads_label);
|
||||||
|
toolbar.inflateMenu(R.menu.downloads);
|
||||||
((MainActivity) getActivity()).setupToolbarToggle(toolbar);
|
((MainActivity) getActivity()).setupToolbarToggle(toolbar);
|
||||||
|
|
||||||
viewPager = root.findViewById(R.id.viewpager);
|
viewPager = root.findViewById(R.id.viewpager);
|
||||||
|
@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayoutMediator;
|
|||||||
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.activity.MainActivity;
|
import de.danoeh.antennapod.activity.MainActivity;
|
||||||
|
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
|
||||||
|
|
||||||
public class EpisodesFragment extends PagedToolbarFragment {
|
public class EpisodesFragment extends PagedToolbarFragment {
|
||||||
|
|
||||||
@ -41,6 +42,8 @@ public class EpisodesFragment extends PagedToolbarFragment {
|
|||||||
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
|
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
|
||||||
Toolbar toolbar = rootView.findViewById(R.id.toolbar);
|
Toolbar toolbar = rootView.findViewById(R.id.toolbar);
|
||||||
toolbar.setTitle(R.string.episodes_label);
|
toolbar.setTitle(R.string.episodes_label);
|
||||||
|
toolbar.inflateMenu(R.menu.episodes);
|
||||||
|
MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, "");
|
||||||
((MainActivity) getActivity()).setupToolbarToggle(toolbar);
|
((MainActivity) getActivity()).setupToolbarToggle(toolbar);
|
||||||
|
|
||||||
ViewPager2 viewPager = rootView.findViewById(R.id.viewpager);
|
ViewPager2 viewPager = rootView.findViewById(R.id.viewpager);
|
||||||
|
@ -13,7 +13,6 @@ import android.os.Looper;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -76,7 +75,6 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
List<FeedItem> episodes = new ArrayList<>();
|
List<FeedItem> episodes = new ArrayList<>();
|
||||||
|
|
||||||
private volatile boolean isUpdatingFeeds;
|
private volatile boolean isUpdatingFeeds;
|
||||||
private boolean isMenuVisible = true;
|
|
||||||
protected Disposable disposable;
|
protected Disposable disposable;
|
||||||
protected TextView txtvInformation;
|
protected TextView txtvInformation;
|
||||||
|
|
||||||
@ -116,18 +114,6 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker =
|
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker =
|
||||||
() -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds();
|
() -> 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
|
@Override
|
||||||
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
||||||
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
||||||
@ -288,7 +274,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
if (restoreScrollPosition) {
|
if (restoreScrollPosition) {
|
||||||
recyclerView.restoreScrollPosition(getPrefName());
|
recyclerView.restoreScrollPosition(getPrefName());
|
||||||
}
|
}
|
||||||
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
||||||
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -343,7 +329,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
public void onEventMainThread(DownloadEvent event) {
|
public void onEventMainThread(DownloadEvent event) {
|
||||||
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
|
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
|
||||||
DownloaderUpdate update = event.update;
|
DownloaderUpdate update = event.update;
|
||||||
if (isMenuVisible && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
|
if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
|
||||||
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
||||||
}
|
}
|
||||||
if (update.mediaIds.length > 0) {
|
if (update.mediaIds.length > 0) {
|
||||||
@ -358,7 +344,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
|
|
||||||
private void updateUi() {
|
private void updateUi() {
|
||||||
loadItems();
|
loadItems();
|
||||||
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
||||||
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,6 +376,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
|||||||
hasMoreItems = true;
|
hasMoreItems = true;
|
||||||
episodes = data;
|
episodes = data;
|
||||||
onFragmentLoaded(episodes);
|
onFragmentLoaded(episodes);
|
||||||
|
((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
|
||||||
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
|
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package de.danoeh.antennapod.fragment;
|
package de.danoeh.antennapod.fragment;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
@ -42,6 +43,14 @@ public class FavoriteEpisodesFragment extends EpisodesListFragment {
|
|||||||
loadItems();
|
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
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -38,8 +38,10 @@ public class NewEpisodesFragment extends EpisodesListFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
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);
|
menu.findItem(R.id.remove_all_new_flags_item).setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,20 +6,19 @@ import androidx.viewpager2.widget.ViewPager2;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment with a ViewPager where the displayed items influence the top toolbar's menu.
|
* 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 {
|
public abstract class PagedToolbarFragment extends Fragment {
|
||||||
private Toolbar toolbar;
|
private Toolbar toolbar;
|
||||||
private ViewPager2 viewPager;
|
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) {
|
void invalidateOptionsMenuIfActive(Fragment child) {
|
||||||
Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
|
Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
|
||||||
if (visibleChild == child) {
|
if (visibleChild == child || child == null) {
|
||||||
if (currentInflatedMenu != viewPager.getCurrentItem()) {
|
|
||||||
currentInflatedMenu = viewPager.getCurrentItem();
|
|
||||||
toolbar.getMenu().clear();
|
|
||||||
child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater());
|
|
||||||
}
|
|
||||||
child.onPrepareOptionsMenu(toolbar.getMenu());
|
child.onPrepareOptionsMenu(toolbar.getMenu());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -39,11 +38,7 @@ public abstract class PagedToolbarFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onPageSelected(int position) {
|
public void onPageSelected(int position) {
|
||||||
Fragment child = getChildFragmentManager().findFragmentByTag("f" + position);
|
Fragment child = getChildFragmentManager().findFragmentByTag("f" + position);
|
||||||
if (child != null && getActivity() != null) {
|
if (child != null) {
|
||||||
toolbar.getMenu().clear();
|
|
||||||
child.onCreateOptionsMenu(toolbar.getMenu(), getActivity().getMenuInflater());
|
|
||||||
currentInflatedMenu = position;
|
|
||||||
|
|
||||||
child.onPrepareOptionsMenu(toolbar.getMenu());
|
child.onPrepareOptionsMenu(toolbar.getMenu());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,13 +87,10 @@ public class RunningDownloadsFragment extends ListFragment {
|
|||||||
setListAdapter(null);
|
setListAdapter(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
|
||||||
inflater.inflate(R.menu.downloads_running, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPrepareOptionsMenu(@NonNull Menu menu) {
|
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);
|
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,14 @@
|
|||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
android:title="@string/multi_select"
|
android:title="@string/multi_select"
|
||||||
android:icon="?attr/checkbox_multiple"
|
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" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/refresh_item"
|
android:id="@+id/refresh_item"
|
@ -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>
|
|
@ -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>
|
|
Loading…
x
Reference in New Issue
Block a user