diff options
author | H. Lehmann <ByteHamster@users.noreply.github.com> | 2019-08-11 14:48:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-11 14:48:01 +0200 |
commit | 4e79ddb51bf4b281ce637bb883f6b5d3de12432b (patch) | |
tree | f2635e1f0c712de74849141beb2f9b943e8332fb /app | |
parent | 3ceb99d2e242244ab62f5ed4edc09ff416f2d965 (diff) | |
parent | c4399de8cb15de5f3e6c9c194cebb2521b9352f7 (diff) | |
download | AntennaPod-4e79ddb51bf4b281ce637bb883f6b5d3de12432b.zip |
Merge pull request #3315 from damoasda/Queue-Sort-Order2
Queue sort order - with keep sorted checkbox
Diffstat (limited to 'app')
3 files changed, 55 insertions, 15 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 b4aca3be0..0fe413954 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -49,6 +49,7 @@ import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.QueueSorter; +import de.danoeh.antennapod.core.util.SortOrder; import de.danoeh.antennapod.dialog.EpisodesApplyActionFragment; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; @@ -276,6 +277,19 @@ public class QueueFragment extends Fragment { 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); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } } @@ -325,37 +339,50 @@ public class QueueFragment extends Fragment { EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE)); return true; case R.id.queue_sort_episode_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_ASC, true); + setSortOrder(SortOrder.EPISODE_TITLE_A_Z); return true; case R.id.queue_sort_episode_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_DESC, true); + setSortOrder(SortOrder.EPISODE_TITLE_Z_A); return true; case R.id.queue_sort_date_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_ASC, true); + setSortOrder(SortOrder.DATE_OLD_NEW); return true; case R.id.queue_sort_date_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_DESC, true); + setSortOrder(SortOrder.DATE_NEW_OLD); return true; case R.id.queue_sort_duration_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_ASC, true); + setSortOrder(SortOrder.DURATION_SHORT_LONG); return true; case R.id.queue_sort_duration_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_DESC, true); + setSortOrder(SortOrder.DURATION_LONG_SHORT); return true; case R.id.queue_sort_feed_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_ASC, true); + setSortOrder(SortOrder.FEED_TITLE_A_Z); return true; case R.id.queue_sort_feed_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_DESC, true); + setSortOrder(SortOrder.FEED_TITLE_Z_A); return true; case R.id.queue_sort_random: - QueueSorter.sort(getActivity(), QueueSorter.Rule.RANDOM, true); + setSortOrder(SortOrder.RANDOM); return true; case R.id.queue_sort_smart_shuffle_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_ASC, true); + setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW); return true; case R.id.queue_sort_smart_shuffle_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_DESC, true); + 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(); + QueueSorter.sort(sortOrder, true); + recyclerAdapter.setLocked(true); + } else { + recyclerAdapter.setLocked(UserPreferences.isQueueLocked()); + } + getActivity().invalidateOptionsMenu(); return true; default: return false; @@ -365,6 +392,15 @@ public class QueueFragment extends Fragment { } } + /** + * This method is called if the user clicks on a sort order menu item. + * + * @param sortOrder New sort order. + */ + private void setSortOrder(SortOrder sortOrder) { + UserPreferences.setQueueKeepSortedOrder(sortOrder); + QueueSorter.sort(sortOrder, true); + } @Override public boolean onContextItemSelected(MenuItem item) { @@ -670,5 +706,4 @@ public class QueueFragment extends Fragment { } }, error -> Log.e(TAG, Log.getStackTraceString(error))); } - } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 074601dbc..156657a00 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -15,7 +15,6 @@ import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction.Action; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; -import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.IntentUtils; @@ -68,16 +67,17 @@ public class FeedItemMenuHandler { } boolean hasMedia = selectedItem.getMedia() != null; boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING; + boolean keepSorted = UserPreferences.isQueueKeepSorted(); if (!isPlaying) { mi.setItemVisibility(R.id.skip_episode_item, false); } boolean isInQueue = selectedItem.isTagged(FeedItem.TAG_QUEUE); - if(queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId()) { + if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId() || keepSorted) { mi.setItemVisibility(R.id.move_to_top_item, false); } - if(queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId()) { + if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId() || keepSorted) { mi.setItemVisibility(R.id.move_to_bottom_item, false); } if (!isInQueue) { diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index 0f7729be1..a4e511eb8 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -102,6 +102,11 @@ android:title="@string/sort_new_to_old"/> </menu> </item> + + <item + android:id="@+id/queue_keep_sorted" + android:title="@string/keep_sorted" + android:checkable="true" /> </menu> </item> |