Fixed flashing refresh button
This commit is contained in:
parent
4e26749757
commit
32c0af7e6c
@ -62,7 +62,7 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
menu.findItem(R.id.filter_items).setVisible(true);
|
||||
menu.findItem(R.id.mark_all_read_item).setVisible(!episodes.isEmpty());
|
||||
menu.findItem(R.id.mark_all_read_item).setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
@ -47,7 +48,7 @@ public class EpisodesFragment extends Fragment {
|
||||
|
||||
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
|
||||
viewPager = rootView.findViewById(R.id.viewpager);
|
||||
viewPager.setAdapter(new EpisodesPagerAdapter(getChildFragmentManager(), getResources()));
|
||||
viewPager.setAdapter(new EpisodesPagerAdapter());
|
||||
|
||||
// Give the TabLayout the ViewPager
|
||||
tabLayout = rootView.findViewById(R.id.sliding_tabs);
|
||||
@ -76,23 +77,23 @@ public class EpisodesFragment extends Fragment {
|
||||
viewPager.setCurrentItem(lastPosition);
|
||||
}
|
||||
|
||||
public static class EpisodesPagerAdapter extends FragmentPagerAdapter {
|
||||
public class EpisodesPagerAdapter extends FragmentPagerAdapter {
|
||||
|
||||
private final Resources resources;
|
||||
private final EpisodesListFragment[] fragments = {
|
||||
new NewEpisodesFragment(),
|
||||
new AllEpisodesFragment(),
|
||||
new FavoriteEpisodesFragment()
|
||||
};
|
||||
|
||||
public EpisodesPagerAdapter(FragmentManager fm, Resources resources) {
|
||||
super(fm);
|
||||
this.resources = resources;
|
||||
public EpisodesPagerAdapter() {
|
||||
super(getChildFragmentManager());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public Fragment getItem(int position) {
|
||||
return fragments[position];
|
||||
switch (position) {
|
||||
case 0:
|
||||
return new NewEpisodesFragment();
|
||||
case 1:
|
||||
return new AllEpisodesFragment();
|
||||
default:
|
||||
return new FavoriteEpisodesFragment();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -104,23 +105,14 @@ public class EpisodesFragment extends Fragment {
|
||||
public CharSequence getPageTitle(int position) {
|
||||
switch (position) {
|
||||
case POS_ALL_EPISODES:
|
||||
return resources.getString(R.string.all_episodes_short_label);
|
||||
return getString(R.string.all_episodes_short_label);
|
||||
case POS_NEW_EPISODES:
|
||||
return resources.getString(R.string.new_episodes_label);
|
||||
return getString(R.string.new_episodes_label);
|
||||
case POS_FAV_EPISODES:
|
||||
return resources.getString(R.string.favorite_episodes_label);
|
||||
return getString(R.string.favorite_episodes_label);
|
||||
default:
|
||||
return super.getPageTitle(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrimaryItem(ViewGroup container, int position, Object object) {
|
||||
super.setPrimaryItem(container, position, object);
|
||||
for (int i = 0; i < TOTAL_COUNT; i++) {
|
||||
// Invalidating the OptionsMenu is only allowed for the currently active fragment
|
||||
fragments[i].isMenuInvalidationAllowed = (i == position);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -81,9 +81,8 @@ public abstract class EpisodesListFragment extends Fragment {
|
||||
@NonNull
|
||||
List<FeedItem> episodes = new ArrayList<>();
|
||||
|
||||
private boolean isUpdatingFeeds;
|
||||
boolean isMenuInvalidationAllowed = false;
|
||||
|
||||
private volatile boolean isUpdatingFeeds;
|
||||
private boolean isMenuVisible = true;
|
||||
protected Disposable disposable;
|
||||
private LinearLayoutManager layoutManager;
|
||||
protected TextView txtvInformation;
|
||||
@ -156,6 +155,12 @@ 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(Menu menu, MenuInflater inflater) {
|
||||
if (!isAdded()) {
|
||||
@ -346,7 +351,9 @@ public abstract class EpisodesListFragment extends Fragment {
|
||||
}
|
||||
|
||||
restoreScrollPosition();
|
||||
requireActivity().invalidateOptionsMenu();
|
||||
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
||||
requireActivity().invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -400,8 +407,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
||||
public void onEventMainThread(DownloadEvent event) {
|
||||
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
|
||||
DownloaderUpdate update = event.update;
|
||||
List<Downloader> downloaderList = update.downloaders;
|
||||
if (isMenuInvalidationAllowed && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
|
||||
if (isMenuVisible && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
|
||||
requireActivity().invalidateOptionsMenu();
|
||||
}
|
||||
if (update.mediaIds.length > 0) {
|
||||
@ -416,7 +422,7 @@ public abstract class EpisodesListFragment extends Fragment {
|
||||
|
||||
private void updateUi() {
|
||||
loadItems();
|
||||
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
||||
if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
|
||||
requireActivity().invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class NewEpisodesFragment extends EpisodesListFragment {
|
||||
@Override
|
||||
public void onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
menu.findItem(R.id.remove_all_new_flags_item).setVisible(!episodes.isEmpty());
|
||||
menu.findItem(R.id.remove_all_new_flags_item).setVisible(true);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
Loading…
x
Reference in New Issue
Block a user