summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index 04b5b676d..eca3d1bb9 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -996,13 +996,37 @@ public class PlaybackService extends MediaBrowserServiceCompat {
state = PlaybackStateCompat.STATE_NONE;
}
sessionState.setState(state, mediaPlayer.getPosition(), mediaPlayer.getPlaybackSpeed());
- sessionState.setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE
+ long capabilities = PlaybackStateCompat.ACTION_PLAY_PAUSE
| PlaybackStateCompat.ACTION_REWIND
| PlaybackStateCompat.ACTION_FAST_FORWARD
- | PlaybackStateCompat.ACTION_SKIP_TO_NEXT);
+ | PlaybackStateCompat.ACTION_SKIP_TO_NEXT;
+
+ if (useSkipToPreviousForRewindInLockscreen()) {
+ // Workaround to fool Android so that Lockscreen will expose a skip-to-previous button,
+ // which will be used for rewind.
+ // The workaround is used for pre Lollipop (Androidv5) devices.
+ // For Androidv5+, lockscreen widges are really notifications (compact),
+ // with an independent codepath
+ //
+ // @see #sessionCallback in the backing callback, skipToPrevious implementation
+ // is actually the same as rewind. So no new inconsistency is created.
+ // @see #setupNotification() for the method to create Androidv5+ lockscreen UI
+ // with notification (compact)
+ capabilities = capabilities | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;
+ }
+
+ sessionState.setActions(capabilities);
mediaSession.setPlaybackState(sessionState.build());
}
+ private static boolean useSkipToPreviousForRewindInLockscreen() {
+ // showRewindOnCompactNotification() corresponds to the "Set Lockscreen Buttons"
+ // Settings in UI.
+ // Hence, from user perspective, he/she is setting the buttons for Lockscreen
+ return ( UserPreferences.showRewindOnCompactNotification() &&
+ (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) );
+ }
+
/**
* Used by updateMediaSessionMetadata to load notification data in another thread.
*/