mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-02 11:46:55 +01:00
Reduced lag when switching tabs
This commit is contained in:
parent
bec385a0a8
commit
87e7a67610
@ -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
|
||||
|
@ -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
|
||||
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);
|
||||
}
|
||||
|
@ -165,14 +165,10 @@ public class DownloadLogFragment extends ListFragment {
|
||||
loadItems();
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
@ -116,18 +114,6 @@ public abstract class EpisodesListFragment extends Fragment {
|
||||
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker =
|
||||
() -> 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)));
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -87,13 +87,10 @@ public class RunningDownloadsFragment extends ListFragment {
|
||||
setListAdapter(null);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
@ -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"
|
@ -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