Merge pull request #3874 from ByteHamster/fix-refresh-flashing

Fixed flashing refresh button
This commit is contained in:
H. Lehmann 2020-02-21 18:57:30 +01:00 committed by GitHub
commit f4223900fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 34 deletions

View File

@ -62,7 +62,7 @@ public class AllEpisodesFragment extends EpisodesListFragment {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
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(!episodes.isEmpty()); menu.findItem(R.id.mark_all_read_item).setVisible(true);
} }
@Override @Override

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
@ -47,7 +48,7 @@ public class EpisodesFragment extends Fragment {
View rootView = inflater.inflate(R.layout.pager_fragment, container, false); View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
viewPager = rootView.findViewById(R.id.viewpager); viewPager = rootView.findViewById(R.id.viewpager);
viewPager.setAdapter(new EpisodesPagerAdapter(getChildFragmentManager(), getResources())); viewPager.setAdapter(new EpisodesPagerAdapter());
// Give the TabLayout the ViewPager // Give the TabLayout the ViewPager
tabLayout = rootView.findViewById(R.id.sliding_tabs); tabLayout = rootView.findViewById(R.id.sliding_tabs);
@ -76,23 +77,23 @@ public class EpisodesFragment extends Fragment {
viewPager.setCurrentItem(lastPosition); viewPager.setCurrentItem(lastPosition);
} }
public static class EpisodesPagerAdapter extends FragmentPagerAdapter { public class EpisodesPagerAdapter extends FragmentPagerAdapter {
private final Resources resources; public EpisodesPagerAdapter() {
private final EpisodesListFragment[] fragments = { super(getChildFragmentManager());
new NewEpisodesFragment(),
new AllEpisodesFragment(),
new FavoriteEpisodesFragment()
};
public EpisodesPagerAdapter(FragmentManager fm, Resources resources) {
super(fm);
this.resources = resources;
} }
@Override @Override
@NonNull
public Fragment getItem(int position) { 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 @Override
@ -104,23 +105,14 @@ public class EpisodesFragment extends Fragment {
public CharSequence getPageTitle(int position) { public CharSequence getPageTitle(int position) {
switch (position) { switch (position) {
case POS_ALL_EPISODES: 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: case POS_NEW_EPISODES:
return resources.getString(R.string.new_episodes_label); return getString(R.string.new_episodes_label);
case POS_FAV_EPISODES: case POS_FAV_EPISODES:
return resources.getString(R.string.favorite_episodes_label); return getString(R.string.favorite_episodes_label);
default: default:
return super.getPageTitle(position); 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);
}
}
} }
} }

View File

@ -81,9 +81,8 @@ public abstract class EpisodesListFragment extends Fragment {
@NonNull @NonNull
List<FeedItem> episodes = new ArrayList<>(); List<FeedItem> episodes = new ArrayList<>();
private boolean isUpdatingFeeds; private volatile boolean isUpdatingFeeds;
boolean isMenuInvalidationAllowed = false; private boolean isMenuVisible = true;
protected Disposable disposable; protected Disposable disposable;
private LinearLayoutManager layoutManager; private LinearLayoutManager layoutManager;
protected TextView txtvInformation; protected TextView txtvInformation;
@ -156,6 +155,12 @@ 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 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (!isAdded()) { if (!isAdded()) {
@ -346,7 +351,9 @@ public abstract class EpisodesListFragment extends Fragment {
} }
restoreScrollPosition(); 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) { 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;
List<Downloader> downloaderList = update.downloaders; if (isMenuVisible && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
if (isMenuInvalidationAllowed && event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) {
requireActivity().invalidateOptionsMenu(); requireActivity().invalidateOptionsMenu();
} }
if (update.mediaIds.length > 0) { if (update.mediaIds.length > 0) {
@ -416,7 +422,7 @@ public abstract class EpisodesListFragment extends Fragment {
private void updateUi() { private void updateUi() {
loadItems(); loadItems();
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { if (isMenuVisible && isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
requireActivity().invalidateOptionsMenu(); requireActivity().invalidateOptionsMenu();
} }
} }

View File

@ -40,7 +40,7 @@ public class NewEpisodesFragment extends EpisodesListFragment {
@Override @Override
public void onPrepareOptionsMenu(Menu menu) { public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(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 @NonNull