From 57504acd0017b2825ecbb68a4ff7bec9c7f64fdc Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Sat, 29 Feb 2020 11:23:21 +0100 Subject: [PATCH 1/9] If inexact seekt is used, hide 5,15,25 seconds seek duration options when opening settings --- .../settings/VideoAudioSettingsFragment.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index d5f46fb22..5476158c4 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -11,6 +11,8 @@ import androidx.preference.ListPreference; import com.google.android.material.snackbar.Snackbar; +import java.util.LinkedList; +import java.util.List; import org.schabi.newpipe.R; import org.schabi.newpipe.util.PermissionHelper; @@ -26,19 +28,28 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { Resources res = getResources(); String[] durationsValues = res.getStringArray(R.array.seek_duration_value); String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description); + List durationsValResult = new LinkedList<>(); + List durationsDesResult = new LinkedList<>(); int currentDurationValue; + final boolean inexactSeek = getPreferenceManager().getSharedPreferences() + .getBoolean(res.getString(R.string.use_inexact_seek_key), false); + for (int i = 0; i < durationsDescriptions.length; i++) { currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000; - try { - durationsDescriptions[i] = String.format( + if (inexactSeek && currentDurationValue % 10 != 5) { + try { + durationsValResult.add(durationsValues[i]); + durationsDesResult.add(String.format( res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue), - currentDurationValue); - } catch (Resources.NotFoundException ignored) { - //if this happens, the translation is missing, and the english string will be displayed instead + currentDurationValue)); + } catch (Resources.NotFoundException ignored) { + //if this happens, the translation is missing, and the english string will be displayed instead + } } } ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); - durations.setEntries(durationsDescriptions); + durations.setEntryValues(durationsValResult.toArray(new CharSequence[0])); + durations.setEntries(durationsDesResult.toArray(new CharSequence[0])); listener = (sharedPreferences, s) -> { @@ -62,7 +73,6 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { }; } - @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.video_audio_settings); From 446380433804c1c38213c37562d8d34151caca3b Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Sat, 29 Feb 2020 11:53:04 +0100 Subject: [PATCH 2/9] Update seek options on inexact seek option change. Reset to 10 seconds when previous value is not valid anymore --- .../settings/VideoAudioSettingsFragment.java | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 5476158c4..20e68078a 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -24,32 +24,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //initializing R.array.seek_duration_description to display the translation of seconds - Resources res = getResources(); - String[] durationsValues = res.getStringArray(R.array.seek_duration_value); - String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description); - List durationsValResult = new LinkedList<>(); - List durationsDesResult = new LinkedList<>(); - int currentDurationValue; - final boolean inexactSeek = getPreferenceManager().getSharedPreferences() - .getBoolean(res.getString(R.string.use_inexact_seek_key), false); - - for (int i = 0; i < durationsDescriptions.length; i++) { - currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000; - if (inexactSeek && currentDurationValue % 10 != 5) { - try { - durationsValResult.add(durationsValues[i]); - durationsDesResult.add(String.format( - res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue), - currentDurationValue)); - } catch (Resources.NotFoundException ignored) { - //if this happens, the translation is missing, and the english string will be displayed instead - } - } - } - ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); - durations.setEntryValues(durationsValResult.toArray(new CharSequence[0])); - durations.setEntries(durationsDesResult.toArray(new CharSequence[0])); + updateSeekOptions(); listener = (sharedPreferences, s) -> { @@ -69,10 +44,49 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { .show(); } + } else if (s.equals(getString(R.string.use_inexact_seek_key))) { + updateSeekOptions(); } }; } + /** + * Update fast-forward/-rewind seek duration options according to language and inexact seek setting. + * Exoplayer can't seek 5 seconds in audio when using inexact seek. + */ + private void updateSeekOptions() { + //initializing R.array.seek_duration_description to display the translation of seconds + final Resources res = getResources(); + final String[] durationsValues = res.getStringArray(R.array.seek_duration_value); + final List displayedDurationValues = new LinkedList<>(); + final List displayedDescriptionValues = new LinkedList<>(); + int currentDurationValue; + final boolean inexactSeek = getPreferenceManager().getSharedPreferences() + .getBoolean(res.getString(R.string.use_inexact_seek_key), false); + + for (String durationsValue : durationsValues) { + currentDurationValue = Integer.parseInt(durationsValue) / 1000; + if (inexactSeek && currentDurationValue % 10 == 5) { + continue; + } + try { + displayedDurationValues.add(durationsValue); + displayedDescriptionValues.add(String.format( + res.getQuantityString(R.plurals.dynamic_seek_duration_description, + currentDurationValue), + currentDurationValue)); + } catch (Resources.NotFoundException ignored) { + //if this happens, the translation is missing, and the english string will be displayed instead + } + } + final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); + durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0])); + durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0])); + if (Integer.parseInt(durations.getValue()) / 1000 % 10 == 5) { + durations.setValueIndex(0); + } + } + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.video_audio_settings); From 288a61895cde2c271ae80c7b927a0200ca1480c9 Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Sat, 29 Feb 2020 11:58:41 +0100 Subject: [PATCH 3/9] Update inexact seek summary --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 42b4b77c5..f7fe9c2b2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,7 +71,7 @@ Remember popup size and position Remember last size and position of popup Use fast inexact seek - Inexact seek allows the player to seek to positions faster with reduced precision + Inexact seek allows the player to seek to positions faster with reduced precision. Seeking for 5, 15 or 25 seconds doesn\'t work with this. Fast-forward/-rewind seek duration Load thumbnails Show comments From 6a42714326dbd42dabdf4b072cf25396fa4da529 Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Mon, 2 Mar 2020 19:52:42 +0100 Subject: [PATCH 4/9] Round seek duration up instead of setting it to 10 seconds --- .../schabi/newpipe/settings/VideoAudioSettingsFragment.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 20e68078a..05c9ca9fc 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -82,8 +82,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0])); durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0])); - if (Integer.parseInt(durations.getValue()) / 1000 % 10 == 5) { - durations.setValueIndex(0); + final int selectedDuration = Integer.parseInt(durations.getValue()); + if (selectedDuration / 1000 % 10 == 5) { + durations.setValue(Integer.toString(selectedDuration + 5 * 1000)); } } From 7d3b21582cc94b3954d88d57ec3c186712396a78 Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Mon, 2 Mar 2020 19:54:08 +0100 Subject: [PATCH 5/9] Use DateUtils constant for 1000 --- .../newpipe/settings/VideoAudioSettingsFragment.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 05c9ca9fc..134285a41 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -6,6 +6,7 @@ import android.os.Build; import android.os.Bundle; import android.provider.Settings; +import android.text.format.DateUtils; import androidx.annotation.Nullable; import androidx.preference.ListPreference; @@ -65,7 +66,8 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { .getBoolean(res.getString(R.string.use_inexact_seek_key), false); for (String durationsValue : durationsValues) { - currentDurationValue = Integer.parseInt(durationsValue) / 1000; + currentDurationValue = + Integer.parseInt(durationsValue) / (int) DateUtils.SECOND_IN_MILLIS; if (inexactSeek && currentDurationValue % 10 == 5) { continue; } @@ -83,8 +85,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0])); durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0])); final int selectedDuration = Integer.parseInt(durations.getValue()); - if (selectedDuration / 1000 % 10 == 5) { - durations.setValue(Integer.toString(selectedDuration + 5 * 1000)); + if (selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) { + durations.setValue( + Integer.toString(selectedDuration + 5 * (int) DateUtils.SECOND_IN_MILLIS)); } } From e3fff4356a5c7cc4138f9a4dde954cf2bdea03ef Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Mon, 2 Mar 2020 20:15:54 +0100 Subject: [PATCH 6/9] Show a toast when seek duration was rounded up --- .../settings/VideoAudioSettingsFragment.java | 13 +++++++++++-- app/src/main/res/values/strings.xml | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 134285a41..f68fc5e23 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.provider.Settings; import android.text.format.DateUtils; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.preference.ListPreference; @@ -86,8 +87,16 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0])); final int selectedDuration = Integer.parseInt(durations.getValue()); if (selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) { - durations.setValue( - Integer.toString(selectedDuration + 5 * (int) DateUtils.SECOND_IN_MILLIS)); + final int newDuration = selectedDuration / (int) DateUtils.SECOND_IN_MILLIS + 5; + durations.setValue(Integer.toString(newDuration * (int) DateUtils.SECOND_IN_MILLIS)); + + Toast toast = Toast.makeText(getContext(), + getString(R.string.new_seek_duration_toast) + " " + String.format( + res.getQuantityString(R.plurals.dynamic_seek_duration_description, + newDuration), + newDuration), + Toast.LENGTH_LONG); + toast.show(); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f7fe9c2b2..6152221c0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,6 +593,7 @@ App language System default %s seconds + Due to ExoPlayer contraints the seek duration was set to %s seconds From efb67b0fd4e98fe5e99b6d323a4d8686bc6c06f7 Mon Sep 17 00:00:00 2001 From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com> Date: Tue, 3 Mar 2020 19:50:50 +0100 Subject: [PATCH 7/9] Change toast string resource to be useable with different languages --- .../newpipe/settings/VideoAudioSettingsFragment.java | 11 +++++------ app/src/main/res/values/strings.xml | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index f68fc5e23..27ae4d3aa 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -82,6 +82,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { //if this happens, the translation is missing, and the english string will be displayed instead } } + final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0])); durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0])); @@ -90,12 +91,10 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { final int newDuration = selectedDuration / (int) DateUtils.SECOND_IN_MILLIS + 5; durations.setValue(Integer.toString(newDuration * (int) DateUtils.SECOND_IN_MILLIS)); - Toast toast = Toast.makeText(getContext(), - getString(R.string.new_seek_duration_toast) + " " + String.format( - res.getQuantityString(R.plurals.dynamic_seek_duration_description, - newDuration), - newDuration), - Toast.LENGTH_LONG); + Toast toast = Toast + .makeText(getContext(), + getString(R.string.new_seek_duration_toast, newDuration), + Toast.LENGTH_LONG); toast.show(); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6152221c0..e46bef4e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,7 +593,7 @@ App language System default %s seconds - Due to ExoPlayer contraints the seek duration was set to + Due to ExoPlayer contraints the seek duration was set to %d seconds %s seconds From f7ef7a18ac764f53c7b2a748af43a34a252abe90 Mon Sep 17 00:00:00 2001 From: XiangRongLin <41164160+XiangRongLin@users.noreply.github.com> Date: Tue, 3 Mar 2020 21:41:15 +0100 Subject: [PATCH 8/9] Update app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java Co-Authored-By: Stypox --- .../schabi/newpipe/settings/VideoAudioSettingsFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 27ae4d3aa..d4897ecaa 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -72,8 +72,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { if (inexactSeek && currentDurationValue % 10 == 5) { continue; } + + displayedDurationValues.add(durationsValue); try { - displayedDurationValues.add(durationsValue); displayedDescriptionValues.add(String.format( res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue), From 4bb6a146e8212af975d9c1acd1bbd3cf51fa6af6 Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 3 Mar 2020 21:51:46 +0100 Subject: [PATCH 9/9] Update app/src/main/res/values/strings.xml --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e46bef4e8..2e5b1d75c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,7 +593,7 @@ App language System default %s seconds - Due to ExoPlayer contraints the seek duration was set to %d seconds + Due to ExoPlayer constraints the seek duration was set to %d seconds %s seconds