diff options
5 files changed, 35 insertions, 2 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java index 1795dfc29..64ac1b8ed 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java @@ -63,6 +63,20 @@ public class PlaybackPreferencesFragment extends PreferenceFragmentCompat { behaviour.setEntries(R.array.video_background_behavior_options_without_pip); behaviour.setEntryValues(R.array.video_background_behavior_values_without_pip); } + + findPreference(UserPreferences.PREF_QUEUE_ADD_TO_FRONT).setOnPreferenceChangeListener( + (preference, newValue) -> { + if (newValue instanceof Boolean) { + boolean enableKeepInProgressAtFront = ((Boolean) newValue); + checkKeepInProgressAtFrontItemVisibility(enableKeepInProgressAtFront); + } + return true; + }); + checkKeepInProgressAtFrontItemVisibility(UserPreferences.enqueueAtFront()); + } + + private void checkKeepInProgressAtFrontItemVisibility(boolean enabled) { + findPreference(UserPreferences.PREF_QUEUE_KEEP_IN_PROGESS_AT_FRONT).setEnabled(enabled); } private void buildSmartMarkAsPlayedPreference() { diff --git a/app/src/main/res/xml/preferences_playback.xml b/app/src/main/res/xml/preferences_playback.xml index 2334e1b1c..b743bdbaf 100644 --- a/app/src/main/res/xml/preferences_playback.xml +++ b/app/src/main/res/xml/preferences_playback.xml @@ -97,6 +97,12 @@ android:summary="@string/pref_queueAddToFront_sum" android:title="@string/pref_queueAddToFront_title"/> <SwitchPreference + android:defaultValue="false" + android:enabled="false" + android:key="prefQueueKeepInProgressAtFront" + android:summary="@string/pref_queueKeepInProgressAtFront_sum" + android:title="@string/pref_queueKeepInProgressAtFront_title"/> + <SwitchPreference android:defaultValue="true" android:enabled="true" android:key="prefFollowQueue" diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index be130c00f..edd5e61d1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -62,7 +62,8 @@ public class UserPreferences { private static final String PREF_BACK_BUTTON_GO_TO_PAGE = "prefBackButtonGoToPage"; // Queue - private static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront"; + public static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront"; + public static final String PREF_QUEUE_KEEP_IN_PROGESS_AT_FRONT = "prefQueueKeepInProgressAtFront"; public static final String PREF_QUEUE_KEEP_SORTED = "prefQueueKeepSorted"; public static final String PREF_QUEUE_KEEP_SORTED_ORDER = "prefQueueKeepSortedOrder"; @@ -288,6 +289,16 @@ public class UserPreferences { return prefs.getBoolean(PREF_QUEUE_ADD_TO_FRONT, false); } + /** + * + * @return {@code true} if in enqueuing items/podcast episodes, when the existing front item is + * in-progress, i.e., the user has played part of it, such item remains at the front of the + * queue; {@code false} otherwise. + */ + public static boolean keepInProgressAtFront() { + return prefs.getBoolean(PREF_QUEUE_KEEP_IN_PROGESS_AT_FRONT, false); + } + public static boolean isPauseOnHeadsetDisconnect() { return prefs.getBoolean(PREF_PAUSE_ON_HEADSET_DISCONNECT, true); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 872ed973d..097f07b27 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -329,7 +329,7 @@ public class DBWriter { new ItemEnqueuePositionCalculator( new ItemEnqueuePositionCalculator.Options() .setEnqueueAtFront(UserPreferences.enqueueAtFront()) - .setKeepInProgressAtFront(true) // TODO: to expose with preference + .setKeepInProgressAtFront(UserPreferences.keepInProgressAtFront()) ); for (int i = 0; i < itemIds.length; i++) { diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 6541524fb..cf6bc620d 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -456,6 +456,8 @@ <string name="pref_expand_notify_unsupport_toast">Android versions before 4.1 do not support expanded notifications.</string> <string name="pref_queueAddToFront_sum">Add new episodes to the front of the queue.</string> <string name="pref_queueAddToFront_title">Enqueue at Front</string> + <string name="pref_queueKeepInProgressAtFront_title">Keep In-progress Episode at Front</string> + <string name="pref_queueKeepInProgressAtFront_sum">If the episode at front is in-progress, i.e., you have listened to part of it, keep it at the front of the queue.</string> <string name="pref_smart_mark_as_played_disabled">Disabled</string> <string name="pref_image_cache_size_title">Image Cache Size</string> <string name="pref_image_cache_size_sum">Size of the disk cache for images.</string> |