diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java | 211 |
1 files changed, 97 insertions, 114 deletions
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 122524b48..11457e46d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -6,8 +6,6 @@ import android.content.SharedPreferences; import android.os.Bundle; 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; @@ -15,7 +13,7 @@ import android.widget.CheckBox; import android.widget.ProgressBar; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; @@ -67,7 +65,7 @@ import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REM /** * Shows all items in the queue. */ -public class QueueFragment extends Fragment { +public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickListener { public static final String TAG = "QueueFragment"; private TextView infoBar; @@ -75,6 +73,7 @@ public class QueueFragment extends Fragment { private QueueRecyclerAdapter recyclerAdapter; private EmptyViewHandler emptyView; private ProgressBar progLoading; + private Toolbar toolbar; private List<FeedItem> queue; @@ -91,7 +90,6 @@ public class QueueFragment extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); - setHasOptionsMenu(true); prefs = getActivity().getSharedPreferences(PREFS, Context.MODE_PRIVATE); } @@ -182,7 +180,7 @@ public class QueueFragment extends Fragment { Log.d(TAG, "onEventMainThread() called with DownloadEvent"); DownloaderUpdate update = event.update; if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); } if (recyclerAdapter != null && update.mediaIds.length > 0) { for (long mediaId : update.mediaIds) { @@ -212,7 +210,7 @@ public class QueueFragment extends Fragment { public void onPlayerStatusChanged(PlayerStatusEvent event) { loadItems(false); if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); } } @@ -221,7 +219,7 @@ public class QueueFragment extends Fragment { // Sent when playback position is reset loadItems(false); if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); } } @@ -238,114 +236,93 @@ public class QueueFragment extends Fragment { private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if(!isAdded()) { - return; - } - super.onCreateOptionsMenu(menu, inflater); - if (queue != null) { - inflater.inflate(R.menu.queue, menu); - MenuItemUtils.setupSearchItem(menu, (MainActivity) getActivity(), 0, ""); - MenuItemUtils.refreshLockItem(getActivity(), menu); - - // Show Lock Item only if queue is sorted manually - boolean keepSorted = UserPreferences.isQueueKeepSorted(); - MenuItem lockItem = menu.findItem(R.id.queue_lock); - lockItem.setVisible(!keepSorted); - - // Random sort is not supported in keep sorted mode - MenuItem sortRandomItem = menu.findItem(R.id.queue_sort_random); - sortRandomItem.setVisible(!keepSorted); - - // Set keep sorted checkbox - MenuItem keepSortedItem = menu.findItem(R.id.queue_keep_sorted); - keepSortedItem.setChecked(keepSorted); + private void refreshToolbarState() { + MenuItemUtils.refreshLockItem(getActivity(), toolbar.getMenu()); + boolean keepSorted = UserPreferences.isQueueKeepSorted(); + toolbar.getMenu().findItem(R.id.queue_lock).setVisible(!keepSorted); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } + 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); } @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (!super.onOptionsItemSelected(item)) { - switch (item.getItemId()) { - case R.id.queue_lock: - toggleQueueLock(); - return true; - case R.id.refresh_item: - AutoUpdateManager.runImmediate(requireContext()); - return true; - case R.id.clear_queue: - // make sure the user really wants to clear the queue - ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), - R.string.clear_queue_label, - R.string.clear_queue_confirmation_msg) { - - @Override - public void onConfirmButtonPressed( - DialogInterface dialog) { - dialog.dismiss(); - DBWriter.clearQueue(); - } - }; - conDialog.createNewDialog().show(); - return true; - case R.id.episode_actions: - ((MainActivity) requireActivity()).loadChildFragment( - EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE | ACTION_DOWNLOAD)); - return true; - case R.id.queue_sort_episode_title_asc: - setSortOrder(SortOrder.EPISODE_TITLE_A_Z); - return true; - case R.id.queue_sort_episode_title_desc: - setSortOrder(SortOrder.EPISODE_TITLE_Z_A); - return true; - case R.id.queue_sort_date_asc: - setSortOrder(SortOrder.DATE_OLD_NEW); - return true; - case R.id.queue_sort_date_desc: - setSortOrder(SortOrder.DATE_NEW_OLD); - return true; - case R.id.queue_sort_duration_asc: - setSortOrder(SortOrder.DURATION_SHORT_LONG); - return true; - case R.id.queue_sort_duration_desc: - setSortOrder(SortOrder.DURATION_LONG_SHORT); - return true; - case R.id.queue_sort_feed_title_asc: - setSortOrder(SortOrder.FEED_TITLE_A_Z); - return true; - case R.id.queue_sort_feed_title_desc: - setSortOrder(SortOrder.FEED_TITLE_Z_A); - return true; - case R.id.queue_sort_random: - setSortOrder(SortOrder.RANDOM); - return true; - case R.id.queue_sort_smart_shuffle_asc: - setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW); - return true; - case R.id.queue_sort_smart_shuffle_desc: - setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD); - return true; - case R.id.queue_keep_sorted: - boolean keepSortedOld = UserPreferences.isQueueKeepSorted(); - boolean keepSortedNew = !keepSortedOld; - UserPreferences.setQueueKeepSorted(keepSortedNew); - if (keepSortedNew) { - SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder(); - DBWriter.reorderQueue(sortOrder, true); - } - if (recyclerAdapter != null) { - recyclerAdapter.updateDragDropEnabled(); + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.queue_lock: + toggleQueueLock(); + return true; + case R.id.refresh_item: + AutoUpdateManager.runImmediate(requireContext()); + return true; + case R.id.clear_queue: + // make sure the user really wants to clear the queue + ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), + R.string.clear_queue_label, + R.string.clear_queue_confirmation_msg) { + + @Override + public void onConfirmButtonPressed( + DialogInterface dialog) { + dialog.dismiss(); + DBWriter.clearQueue(); } - getActivity().invalidateOptionsMenu(); - return true; - default: - return false; - } - } else { - return true; + }; + conDialog.createNewDialog().show(); + return true; + case R.id.episode_actions: + ((MainActivity) requireActivity()).loadChildFragment( + EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE | ACTION_DOWNLOAD)); + return true; + case R.id.queue_sort_episode_title_asc: + setSortOrder(SortOrder.EPISODE_TITLE_A_Z); + return true; + case R.id.queue_sort_episode_title_desc: + setSortOrder(SortOrder.EPISODE_TITLE_Z_A); + return true; + case R.id.queue_sort_date_asc: + setSortOrder(SortOrder.DATE_OLD_NEW); + return true; + case R.id.queue_sort_date_desc: + setSortOrder(SortOrder.DATE_NEW_OLD); + return true; + case R.id.queue_sort_duration_asc: + setSortOrder(SortOrder.DURATION_SHORT_LONG); + return true; + case R.id.queue_sort_duration_desc: + setSortOrder(SortOrder.DURATION_LONG_SHORT); + return true; + case R.id.queue_sort_feed_title_asc: + setSortOrder(SortOrder.FEED_TITLE_A_Z); + return true; + case R.id.queue_sort_feed_title_desc: + setSortOrder(SortOrder.FEED_TITLE_Z_A); + return true; + case R.id.queue_sort_random: + setSortOrder(SortOrder.RANDOM); + return true; + case R.id.queue_sort_smart_shuffle_asc: + setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW); + return true; + case R.id.queue_sort_smart_shuffle_desc: + setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD); + return true; + case R.id.queue_keep_sorted: + boolean keepSortedOld = UserPreferences.isQueueKeepSorted(); + boolean keepSortedNew = !keepSortedOld; + UserPreferences.setQueueKeepSorted(keepSortedNew); + if (keepSortedNew) { + SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder(); + DBWriter.reorderQueue(sortOrder, true); + } + if (recyclerAdapter != null) { + recyclerAdapter.updateDragDropEnabled(); + } + refreshToolbarState(); + return true; + default: + return false; } } @@ -378,7 +355,7 @@ public class QueueFragment extends Fragment { private void setQueueLocked(boolean locked) { UserPreferences.setQueueLocked(locked); - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); if (recyclerAdapter != null) { recyclerAdapter.updateDragDropEnabled(); } @@ -440,7 +417,13 @@ public class QueueFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View root = inflater.inflate(R.layout.queue_fragment, container, false); - ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar)); + toolbar = root.findViewById(R.id.toolbar); + toolbar.setOnMenuItemClickListener(this); + ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + toolbar.inflateMenu(R.menu.queue); + MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, ""); + refreshToolbarState(); + infoBar = root.findViewById(R.id.info_bar); recyclerView = root.findViewById(R.id.recyclerView); RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator(); @@ -568,7 +551,7 @@ public class QueueFragment extends Fragment { // we need to refresh the options menu because it sometimes // needs data that may have just been loaded. - getActivity().invalidateOptionsMenu(); + refreshToolbarState(); refreshInfoBar(); } |