From 52521ecddb7d7e66e5e132def7341d451c1dbee2 Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 28 Oct 2019 12:40:56 -0700 Subject: [PATCH] #2652 the UI of a new setting enqueue location - replaced existing enqueue at front - the option after current episode will replace Keep In-Progress in Queue that was in the PR (30f104f4). --- .../test/antennapod/ui/PreferencesTest.java | 13 ++--- .../PlaybackPreferencesFragment.java | 52 +++++++++++++++---- app/src/main/res/xml/preferences_playback.xml | 19 +++---- .../core/preferences/UserPreferences.java | 26 ++++++++-- core/src/main/res/values/arrays.xml | 13 +++++ core/src/main/res/values/strings.xml | 9 ++-- 6 files changed, 93 insertions(+), 39 deletions(-) diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index 65bc7d745..6f541e5cf 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -4,13 +4,13 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.preference.PreferenceManager; -import androidx.test.filters.LargeTest; +import androidx.test.filters.LargeTest; import androidx.test.rule.ActivityTestRule; + import com.robotium.solo.Solo; import com.robotium.solo.Timeout; -import de.test.antennapod.EspressoTestUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -28,6 +28,7 @@ import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; import de.danoeh.antennapod.fragment.EpisodesFragment; import de.danoeh.antennapod.fragment.QueueFragment; import de.danoeh.antennapod.fragment.SubscriptionFragment; +import de.test.antennapod.EspressoTestUtils; import static androidx.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.espresso.Espresso.onView; @@ -126,13 +127,9 @@ public class PreferencesTest { } @Test - public void testEnqueueAtFront() { + public void testEnqueueLocation() { clickPreference(R.string.playback_pref); - final boolean enqueueAtFront = UserPreferences.enqueueAtFront(); - clickPreference(R.string.pref_queueAddToFront_title); - assertTrue(solo.waitForCondition(() -> enqueueAtFront != UserPreferences.enqueueAtFront(), Timeout.getLargeTimeout())); - clickPreference(R.string.pref_queueAddToFront_title); - assertTrue(solo.waitForCondition(() -> enqueueAtFront == UserPreferences.enqueueAtFront(), Timeout.getLargeTimeout())); + // TODO-2652: implement the test } @Test 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 64ac1b8ed..5d9af14bd 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 @@ -4,8 +4,15 @@ import android.app.Activity; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.collection.ArrayMap; import androidx.preference.ListPreference; +import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; + +import java.util.Map; + import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MediaplayerActivity; import de.danoeh.antennapod.activity.PreferenceActivity; @@ -64,19 +71,42 @@ public class PlaybackPreferencesFragment extends PreferenceFragmentCompat { 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()); + buildEnqueueLocationPreference(); } - private void checkKeepInProgressAtFrontItemVisibility(boolean enabled) { - findPreference(UserPreferences.PREF_QUEUE_KEEP_IN_PROGESS_AT_FRONT).setEnabled(enabled); + private void buildEnqueueLocationPreference() { + final Resources res = requireActivity().getResources(); + final Map options = new ArrayMap<>(); + { + String[] keys = res.getStringArray(R.array.enqueue_location_values); + String[] values = res.getStringArray(R.array.enqueue_location_options); + for (int i = 0; i < keys.length; i++) { + options.put(keys[i], values[i]); + } + } + + ListPreference pref = requirePreference(UserPreferences.PREF_ENQUEUE_LOCATION); + pref.setSummary(res.getString(R.string.pref_enqueue_location_sum, options.get(pref.getValue()))); + + pref.setOnPreferenceChangeListener((preference, newValue) -> { + if (!(newValue instanceof String)) { + return false; + } + String newValStr = (String)newValue; + pref.setSummary(res.getString(R.string.pref_enqueue_location_sum, options.get(newValStr))); + return true; + }); + } + + @NonNull + private T requirePreference(@NonNull CharSequence key) { + // Possibly put it to a common method in abstract base class + T result = findPreference(key); + if (result == null) { + throw new IllegalArgumentException("Preference with key '" + key + "' is not found"); + + } + return result; } private void buildSmartMarkAsPlayedPreference() { diff --git a/app/src/main/res/xml/preferences_playback.xml b/app/src/main/res/xml/preferences_playback.xml index 44ecf32ec..254c907c5 100644 --- a/app/src/main/res/xml/preferences_playback.xml +++ b/app/src/main/res/xml/preferences_playback.xml @@ -90,18 +90,13 @@ android:key="prefEnqueueDownloaded" android:summary="@string/pref_enqueue_downloaded_summary" android:title="@string/pref_enqueue_downloaded_title" /> - - + @string/episode_cleanup_never + + @string/enqueue_location_back + @string/enqueue_location_front + @string/enqueue_location_after_current + + + + + BACK + FRONT + AFTER_CURRENTLY_PLAYING + + -1 0 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index cf6bc620d..19fc3a81c 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -454,10 +454,11 @@ Show Download Report If downloads fail, generate a report that shows the details of the failure. Android versions before 4.1 do not support expanded notifications. - Add new episodes to the front of the queue. - Enqueue at Front - Keep In-progress Episode at Front - 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. + Enqueue Location + Add episodes to: %1$s. + back of the queue + front of the queue + after current episode Disabled Image Cache Size Size of the disk cache for images.