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 f1befcd94..b4e4bebb9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -4,7 +4,6 @@ import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -22,7 +21,6 @@ import de.danoeh.antennapod.adapter.actionbutton.DeleteActionButton; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.DownloadLogEvent; import de.danoeh.antennapod.core.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; @@ -67,16 +65,14 @@ public class CompletedDownloadsFragment extends Fragment private Disposable disposable; private EmptyViewHandler emptyView; private boolean displayUpArrow; - private boolean isUpdatingFeeds = false; private SpeedDialView speedDialView; - private Toolbar toolbar; private SwipeActions swipeActions; @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.simple_list_fragment, container, false); - toolbar = root.findViewById(R.id.toolbar); + Toolbar toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.downloads_label); toolbar.inflateMenu(R.menu.downloads_completed); toolbar.setOnMenuItemClickListener(this); @@ -85,7 +81,6 @@ public class CompletedDownloadsFragment extends Fragment recyclerView.post(() -> recyclerView.smoothScrollToPosition(0)); return false; }); - refreshToolbarState(); displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; if (savedInstanceState != null) { displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); @@ -166,12 +161,6 @@ public class CompletedDownloadsFragment extends Fragment } } - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - menu.findItem(R.id.clear_logs_item).setVisible(false); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.refresh_item) { @@ -190,9 +179,6 @@ public class CompletedDownloadsFragment extends Fragment @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } if (!Arrays.equals(event.update.mediaIds, runningDownloads)) { runningDownloads = event.update.mediaIds; loadItems(); @@ -208,9 +194,6 @@ public class CompletedDownloadsFragment extends Fragment } } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - @Override public boolean onContextItemSelected(@NonNull MenuItem item) { FeedItem selectedItem = adapter.getLongPressedItem(); @@ -270,11 +253,6 @@ public class CompletedDownloadsFragment extends Fragment } } - private void refreshToolbarState() { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { loadItems(); 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 f581a16f5..03764f61c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -8,7 +8,6 @@ import android.util.Log; import android.view.ContextMenu; import android.view.KeyEvent; import android.view.LayoutInflater; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -84,11 +83,9 @@ public abstract class EpisodesListFragment extends Fragment @NonNull List episodes = new ArrayList<>(); - private volatile boolean isUpdatingFeeds; protected Disposable disposable; protected TextView txtvInformation; - @Override public void onStart() { super.onStart(); @@ -118,14 +115,6 @@ public abstract class EpisodesListFragment extends Fragment } } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } - @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (super.onOptionsItemSelected(item)) { @@ -423,9 +412,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 (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - updateToolbar(); - } + updateToolbar(); if (update.mediaIds.length > 0) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(episodes, mediaId); @@ -436,26 +423,19 @@ public abstract class EpisodesListFragment extends Fragment } } - private void updateUi() { - loadItems(); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - updateToolbar(); - } - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { - updateUi(); + loadItems(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { - updateUi(); + loadItems(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onFeedListChanged(FeedListUpdateEvent event) { - updateUi(); + loadItems(); } void loadItems() { @@ -498,8 +478,10 @@ public abstract class EpisodesListFragment extends Fragment protected abstract String getPrefName(); protected void updateToolbar() { - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + if (toolbar.getMenu().findItem(R.id.refresh_item) != null) { + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFeeds()); + } } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index d5dd51e93..dfae22491 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -92,7 +92,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem private long feedID; private Feed feed; private boolean headerCreated = false; - private boolean isUpdatingFeed; private Disposable disposable; private FeedItemListFragmentBinding viewBinding; private MultiSelectSpeedDialBinding speedDialBinding; @@ -140,7 +139,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); } ((MainActivity) getActivity()).setupToolbarToggle(viewBinding.toolbar, displayUpArrow); - refreshToolbarState(); + updateToolbar(); viewBinding.recyclerView.setRecycledViewPool(((MainActivity) getActivity()).getRecycledViewPool()); viewBinding.progLoading.setVisibility(View.VISIBLE); @@ -234,17 +233,14 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem super.onSaveInstanceState(outState); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFile(feed.getDownload_url()); - - private void refreshToolbarState() { + private void updateToolbar() { if (feed == null) { return; } viewBinding.toolbar.getMenu().findItem(R.id.visit_website_item).setVisible(feed.getLink() != null); - isUpdatingFeed = MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(viewBinding.toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFile(feed.getDownload_url())); FeedMenuHandler.onPrepareOptionsMenu(viewBinding.toolbar.getMenu(), feed); } @@ -338,9 +334,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); DownloaderUpdate update = event.update; - if (event.hasChangedFeedUpdateStatus(isUpdatingFeed)) { - updateSyncProgressBarVisibility(); - } + updateToolbar(); if (adapter != null && update.mediaIds.length > 0 && feed != null) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId); @@ -383,7 +377,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem speedDialBinding.fabSD.removeActionItemById(R.id.delete_batch); } speedDialBinding.fabSD.setVisibility(View.VISIBLE); - refreshToolbarState(); + updateToolbar(); } @Override @@ -416,9 +410,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem } private void updateSyncProgressBarVisibility() { - if (isUpdatingFeed != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + updateToolbar(); if (!DownloadService.isDownloadingFeeds()) { nextPageLoader.getRoot().setVisibility(View.GONE); } @@ -443,7 +435,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem swipeActions.setFilter(feed.getItemFilter()); } - refreshToolbarState(); + updateToolbar(); updateSyncProgressBarVisibility(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 370deee76..467299e4c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -87,8 +87,6 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi private List queue; - private boolean isUpdatingFeeds = false; - private static final String PREFS = "QueueFragment"; private static final String PREF_SHOW_LOCK_WARNING = "show_lock_warning"; @@ -191,9 +189,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with DownloadEvent"); DownloaderUpdate update = event.update; - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } + refreshToolbarState(); if (recyclerAdapter != null && update.mediaIds.length > 0) { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(queue, mediaId); @@ -221,18 +217,14 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerStatusChanged(PlayerStatusEvent event) { loadItems(false); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + refreshToolbarState(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { // Sent when playback position is reset loadItems(false); - if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - refreshToolbarState(); - } + refreshToolbarState(); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -261,17 +253,14 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi recyclerAdapter = null; } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - private void refreshToolbarState() { boolean keepSorted = UserPreferences.isQueueKeepSorted(); toolbar.getMenu().findItem(R.id.queue_lock).setChecked(UserPreferences.isQueueLocked()); toolbar.getMenu().findItem(R.id.queue_lock).setVisible(!keepSorted); toolbar.getMenu().findItem(R.id.queue_sort_random).setVisible(!keepSorted); toolbar.getMenu().findItem(R.id.queue_keep_sorted).setChecked(keepSorted); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), + R.id.refresh_item, DownloadService.isRunning && DownloadService.isDownloadingFeeds()); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index 578a2fa84..6ee5d5c20 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -93,7 +93,6 @@ public class SubscriptionFragment extends Fragment private TextView feedsFilteredMsg; private Toolbar toolbar; private String displayedFolder = null; - private boolean isUpdatingFeeds = false; private boolean displayUpArrow; private Disposable disposable; @@ -200,8 +199,8 @@ public class SubscriptionFragment extends Fragment int columns = prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns()); toolbar.getMenu().findItem(COLUMN_CHECKBOX_IDS[columns - MIN_NUM_COLUMNS]).setChecked(true); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), - R.id.refresh_item, updateRefreshMenuItemChecker); + MenuItemUtils.updateRefreshMenuItem(toolbar.getMenu(), R.id.refresh_item, + DownloadService.isRunning && DownloadService.isDownloadingFeeds()); } @Override @@ -407,14 +406,9 @@ public class SubscriptionFragment extends Fragment @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventMainThread(DownloadEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - refreshToolbarState(); - } + refreshToolbarState(); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); - @Override public void onEndSelectMode() { speedDialView.close(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java b/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java index cfa35ea29..3b9d6a08d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java @@ -11,31 +11,21 @@ import de.danoeh.antennapod.core.R; public class MenuItemUtils { /** - * Changes the appearance of a MenuItem depending on whether the given UpdateRefreshMenuItemChecker - * is refreshing or not. If it returns true, the menu item will be replaced by an indeterminate progress - * bar, otherwise the progress bar will be hidden. - * * @param menu The menu that the MenuItem belongs to * @param resId The id of the MenuItem - * @param checker Is used for checking whether to show the progress indicator or not. - * @return The returned value of the UpdateRefreshMenuItemChecker's isRefreshing() method. */ - public static boolean updateRefreshMenuItem(Menu menu, int resId, UpdateRefreshMenuItemChecker checker) { + public static void updateRefreshMenuItem(Menu menu, int resId, boolean isRefreshing) { // expand actionview if feeds are being downloaded, collapse otherwise MenuItem refreshItem = menu.findItem(resId); - if (checker.isRefreshing()) { - refreshItem.setActionView(R.layout.refresh_action_view); - return true; + if (isRefreshing) { + if (refreshItem.getActionView() == null) { + refreshItem.setActionView(R.layout.refresh_action_view); + } } else { refreshItem.setActionView(null); - return false; } } - public interface UpdateRefreshMenuItemChecker { - boolean isRefreshing(); - } - /** * When pressing a context menu item, Android calls onContextItemSelected * for ALL fragments in arbitrary order, not just for the fragment that the