From a22f4e30b318edbec7b31ca9c226d89b5e4bd21a Mon Sep 17 00:00:00 2001 From: klaviartur <_github@fambit.de> Date: Sun, 27 Jul 2025 23:11:50 +0200 Subject: [PATCH 1/2] Add setting to allow seeking instead of skipping / changing track when external media button event is triggered --- app/src/main/res/values/settings_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/video_audio_settings.xml | 8 ++++++++ 3 files changed, 11 insertions(+) diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 41de40e20..ba962216d 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -24,6 +24,7 @@ screen_brightness_timestamp_key clear_queue_confirmation_key ignore_hardware_media_buttons_key + seek_on_media_button_events_key popup_saved_width popup_saved_x diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c1944dda1..0f2bc4fbf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,6 +89,8 @@ The active player queue will be replaced Ignore hardware media button events Useful, for instance, if you are using a headset with broken physical buttons + Seek instead of skipping on external media button events + Imitates behaviour of most Podcast apps Show comments Turn off to hide comments Show \'Next\' and \'Similar\' videos diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml index 3d13e0b71..5b02a5f5e 100644 --- a/app/src/main/res/xml/video_audio_settings.xml +++ b/app/src/main/res/xml/video_audio_settings.xml @@ -259,5 +259,13 @@ android:title="@string/ignore_hardware_media_buttons_title" app:singleLineTitle="false" app:iconSpaceReserved="false" /> + + From bbd5513ca4405e7ebd5bc5dc53e2ad723c1b6303 Mon Sep 17 00:00:00 2001 From: klaviartur <_github@fambit.de> Date: Sun, 27 Jul 2025 23:12:00 +0200 Subject: [PATCH 2/2] Make player obey the new setting and seek instead of skipping --- .../schabi/newpipe/player/helper/PlayerHelper.java | 5 +++++ .../player/mediasession/PlayQueueNavigator.java | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index 6a51bdbea..9c1d2751d 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -304,6 +304,11 @@ public static SeekParameters getSeekParameters(@NonNull final Context context) { return isUsingInexactSeek(context) ? SeekParameters.CLOSEST_SYNC : SeekParameters.EXACT; } + public static boolean getSeekInsteadOfSkip(@NonNull final Context context) { + return getPreferences(context).getBoolean( + context.getString(R.string.seek_on_media_button_events_key), false); + } + public static long getPreferredCacheSize() { return 64 * 1024 * 1024L; } diff --git a/app/src/main/java/org/schabi/newpipe/player/mediasession/PlayQueueNavigator.java b/app/src/main/java/org/schabi/newpipe/player/mediasession/PlayQueueNavigator.java index 3339869c1..5d829ec9e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediasession/PlayQueueNavigator.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediasession/PlayQueueNavigator.java @@ -18,6 +18,7 @@ import com.google.android.exoplayer2.util.Util; import org.schabi.newpipe.player.Player; +import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.util.image.ImageStrategy; @@ -73,7 +74,11 @@ public long getActiveQueueItemId( @Override public void onSkipToPrevious(@NonNull final com.google.android.exoplayer2.Player exoPlayer) { - player.playPrevious(); + if (PlayerHelper.getSeekInsteadOfSkip(player.getContext())) { + player.fastRewind(); + } else { + player.playPrevious(); + } } @Override @@ -86,7 +91,11 @@ public void onSkipToQueueItem(@NonNull final com.google.android.exoplayer2.Playe @Override public void onSkipToNext(@NonNull final com.google.android.exoplayer2.Player exoPlayer) { - player.playNext(); + if (PlayerHelper.getSeekInsteadOfSkip(player.getContext())) { + player.fastForward(); + } else { + player.playNext(); + } } private void publishFloatingQueueWindow() {