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() {
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" />
+
+