diff options
Diffstat (limited to 'app')
4 files changed, 45 insertions, 14 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 71b3c27a2..f3421c8fd 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -272,6 +272,13 @@ public class QueueFragment extends Fragment { MenuItemUtils.refreshLockItem(getActivity(), menu); + // Show Lock Item and Sort Item only if queue is sorted manually + boolean sortedManually = UserPreferences.isQueueSortedManually(); + MenuItem lockItem = menu.findItem(R.id.queue_lock); + lockItem.setVisible(sortedManually); + MenuItem sortItem = menu.findItem(R.id.queue_sort); + sortItem.setVisible(sortedManually); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } } @@ -317,37 +324,37 @@ public class QueueFragment extends Fragment { conDialog.createNewDialog().show(); return true; case R.id.queue_sort_episode_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_ASC, true); + QueueSorter.sort(QueueSorter.Rule.EPISODE_TITLE_ASC, true); return true; case R.id.queue_sort_episode_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_DESC, true); + QueueSorter.sort(QueueSorter.Rule.EPISODE_TITLE_DESC, true); return true; case R.id.queue_sort_date_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_ASC, true); + QueueSorter.sort(QueueSorter.Rule.DATE_ASC, true); return true; case R.id.queue_sort_date_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_DESC, true); + QueueSorter.sort(QueueSorter.Rule.DATE_DESC, true); return true; case R.id.queue_sort_duration_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_ASC, true); + QueueSorter.sort(QueueSorter.Rule.DURATION_ASC, true); return true; case R.id.queue_sort_duration_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_DESC, true); + QueueSorter.sort(QueueSorter.Rule.DURATION_DESC, true); return true; case R.id.queue_sort_feed_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_ASC, true); + QueueSorter.sort(QueueSorter.Rule.FEED_TITLE_ASC, true); return true; case R.id.queue_sort_feed_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_DESC, true); + QueueSorter.sort(QueueSorter.Rule.FEED_TITLE_DESC, true); return true; case R.id.queue_sort_random: - QueueSorter.sort(getActivity(), QueueSorter.Rule.RANDOM, true); + QueueSorter.sort(QueueSorter.Rule.RANDOM, true); return true; case R.id.queue_sort_smart_shuffle_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_ASC, true); + QueueSorter.sort(QueueSorter.Rule.SMART_SHUFFLE_ASC, true); return true; case R.id.queue_sort_smart_shuffle_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_DESC, true); + QueueSorter.sort(QueueSorter.Rule.SMART_SHUFFLE_DESC, true); return true; default: return false; @@ -661,5 +668,4 @@ public class QueueFragment extends Fragment { } }, error -> Log.e(TAG, Log.getStackTraceString(error))); } - } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java index e1d44f7d3..db852cee7 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java @@ -11,7 +11,12 @@ import android.widget.ListView; import android.widget.Toast; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.Permutor; +import de.danoeh.antennapod.core.util.QueueSorter; + import org.apache.commons.lang3.ArrayUtils; import java.util.List; @@ -89,6 +94,17 @@ public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat { if (Build.VERSION.SDK_INT >= 26) { findPreference(UserPreferences.PREF_EXPANDED_NOTIFICATION).setVisible(false); } + + findPreference(UserPreferences.PREF_QUEUE_SORT_ORDER) + .setOnPreferenceChangeListener((preference, newValue) -> { + UserPreferences.QueueSortOrder newSortOrder = UserPreferences.parseQueueSortOrder((String) newValue); + if (newSortOrder != UserPreferences.QueueSortOrder.MANUALLY) { + QueueSorter.Rule sortRule = QueueSorter.queueSortOrder2Rule(newSortOrder); + Permutor<FeedItem> permutor = QueueSorter.getPermutor(sortRule); + DBWriter.reorderQueue(permutor, true); + } + return true; + }); } private void showDrawerPreferencesDialog() { 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 3f8d88af7..2886a7e33 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -68,16 +68,17 @@ public class FeedItemMenuHandler { } boolean hasMedia = selectedItem.getMedia() != null; boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING; + boolean sortedManually = UserPreferences.isQueueSortedManually(); 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() || !sortedManually) { 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() || !sortedManually) { mi.setItemVisibility(R.id.move_to_bottom_item, false); } if (!isInQueue) { diff --git a/app/src/main/res/xml/preferences_user_interface.xml b/app/src/main/res/xml/preferences_user_interface.xml index 1d970a5f7..455838048 100644 --- a/app/src/main/res/xml/preferences_user_interface.xml +++ b/app/src/main/res/xml/preferences_user_interface.xml @@ -32,6 +32,14 @@ android:summary="@string/pref_nav_drawer_feed_counter_sum" android:defaultValue="0" app:useStockLayout="true"/> + <ListPreference + android:entryValues="@array/nav_queue_sort_values" + android:entries="@array/nav_queue_sort_options" + android:title="@string/pref_queue_sort_title" + android:key="prefQueueSortOrder" + android:summary="@string/pref_queue_sort_sum" + android:defaultValue="MANUALLY" + app:useStockLayout="true"/> </PreferenceCategory> <PreferenceCategory android:title="@string/external_elements"> <SwitchPreference |