diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt index 078b5b09..bf3408e3 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt @@ -107,6 +107,7 @@ data class PlayItemRequestPayload( data class DeviceSettings( var disableAutoRewind:Boolean, var enableAltView:Boolean, + var allowSeekingOnWidget:Boolean, var jumpBackwardsTime:Int, var jumpForwardTime:Int, var enableMp3IndexSeeking:Boolean, @@ -130,6 +131,7 @@ data class DeviceSettings( return DeviceSettings( disableAutoRewind = false, enableAltView = true, + allowSeekingOnWidget = false, jumpBackwardsTime = 10, jumpForwardTime = 10, enableMp3IndexSeeking = false, diff --git a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt index 16e0f19b..6ed37369 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt @@ -329,15 +329,18 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { } } - mediaSessionConnector.setEnabledPlaybackActions( - PlaybackStateCompat.ACTION_PLAY_PAUSE - or PlaybackStateCompat.ACTION_PLAY - or PlaybackStateCompat.ACTION_PAUSE - or PlaybackStateCompat.ACTION_SEEK_TO - or PlaybackStateCompat.ACTION_FAST_FORWARD - or PlaybackStateCompat.ACTION_REWIND - or PlaybackStateCompat.ACTION_STOP - ) + val playbackActions = PlaybackStateCompat.ACTION_PLAY_PAUSE or + PlaybackStateCompat.ACTION_PLAY or + PlaybackStateCompat.ACTION_PAUSE or + PlaybackStateCompat.ACTION_FAST_FORWARD or + PlaybackStateCompat.ACTION_REWIND or + PlaybackStateCompat.ACTION_STOP + + if (deviceSettings.allowSeekingOnWidget) { + playbackActions = playbackActions or PlaybackStateCompat.ACTION_SEEK_TO + } + + mediaSessionConnector.setEnabledPlaybackActions(playbackActions) mediaSessionConnector.setQueueNavigator(queueNavigator) mediaSessionConnector.setPlaybackPreparer(MediaSessionPlaybackPreparer(this)) diff --git a/ios/App/App/plugins/AbsDatabase.swift b/ios/App/App/plugins/AbsDatabase.swift index 44f542db..56c8cc2d 100644 --- a/ios/App/App/plugins/AbsDatabase.swift +++ b/ios/App/App/plugins/AbsDatabase.swift @@ -238,6 +238,7 @@ public class AbsDatabase: CAPPlugin { @objc func updateDeviceSettings(_ call: CAPPluginCall) { let disableAutoRewind = call.getBool("disableAutoRewind") ?? false let enableAltView = call.getBool("enableAltView") ?? false + let allowSeekingOnWidget = call.getBool("allowSeekingOnWidget") ?? false let jumpBackwardsTime = call.getInt("jumpBackwardsTime") ?? 10 let jumpForwardTime = call.getInt("jumpForwardTime") ?? 10 let lockOrientation = call.getString("lockOrientation") ?? "NONE" @@ -246,6 +247,7 @@ public class AbsDatabase: CAPPlugin { let settings = DeviceSettings() settings.disableAutoRewind = disableAutoRewind settings.enableAltView = enableAltView + settings.allowSeekingOnWidget = allowSeekingOnWidget settings.jumpBackwardsTime = jumpBackwardsTime settings.jumpForwardTime = jumpForwardTime settings.lockOrientation = lockOrientation diff --git a/ios/App/Shared/models/DeviceSettings.swift b/ios/App/Shared/models/DeviceSettings.swift index 4156fa29..0f97f5f4 100644 --- a/ios/App/Shared/models/DeviceSettings.swift +++ b/ios/App/Shared/models/DeviceSettings.swift @@ -11,6 +11,7 @@ import RealmSwift class DeviceSettings: Object { @Persisted var disableAutoRewind: Bool = false @Persisted var enableAltView: Bool = true + @Persisted var allowSeekingOnWidget: Bool = true @Persisted var jumpBackwardsTime: Int = 10 @Persisted var jumpForwardTime: Int = 10 @Persisted var lockOrientation: String = "NONE" @@ -26,6 +27,7 @@ func deviceSettingsToJSON(settings: DeviceSettings) -> Dictionary { return [ "disableAutoRewind": settings.disableAutoRewind, "enableAltView": settings.enableAltView, + "allowSeekingOnWidget": settings.allowSeekingOnWidget, "jumpBackwardsTime": settings.jumpBackwardsTime, "jumpForwardTime": settings.jumpForwardTime, "lockOrientation": settings.lockOrientation, diff --git a/ios/App/Shared/player/AudioPlayer.swift b/ios/App/Shared/player/AudioPlayer.swift index 5bc075cf..1f1dc2f2 100644 --- a/ios/App/Shared/player/AudioPlayer.swift +++ b/ios/App/Shared/player/AudioPlayer.swift @@ -672,7 +672,7 @@ class AudioPlayer: NSObject { return .success } - commandCenter.changePlaybackPositionCommand.isEnabled = true + commandCenter.changePlaybackPositionCommand.isEnabled = deviceSettings.allowSeekingOnWidget commandCenter.changePlaybackPositionCommand.addTarget { [weak self] event in guard let event = event as? MPChangePlaybackPositionCommandEvent else { return .noSuchContent diff --git a/pages/settings.vue b/pages/settings.vue index a217410f..16503b96 100644 --- a/pages/settings.vue +++ b/pages/settings.vue @@ -8,6 +8,12 @@

{{ $strings.LabelUseBookshelfView }}

+
+
+ +
+

{{ $strings.LabelAllowSeekingOnWidget }}

+
@@ -154,6 +160,7 @@ export default { settings: { disableAutoRewind: false, enableAltView: true, + allowSeekingOnWidget: false, jumpForwardTime: 10, jumpBackwardsTime: 10, enableMp3IndexSeeking: false, @@ -429,6 +436,10 @@ export default { this.settings.enableAltView = !this.settings.enableAltView this.saveSettings() }, + toggleAllowSeekingOnWidget() { + this.settings.allowSeekingOnWidget = !this.settings.allowSeekingOnWidget + this.saveSettings() + }, getCurrentOrientation() { const orientation = window.screen?.orientation || {} const type = orientation.type || '' @@ -471,6 +482,7 @@ export default { const deviceSettings = this.deviceData.deviceSettings || {} this.settings.disableAutoRewind = !!deviceSettings.disableAutoRewind this.settings.enableAltView = !!deviceSettings.enableAltView + this.settings.allowSeekingOnWidget = !!deviceSettings.allowSeekingOnWidget this.settings.jumpForwardTime = deviceSettings.jumpForwardTime || 10 this.settings.jumpBackwardsTime = deviceSettings.jumpBackwardsTime || 10 this.settings.enableMp3IndexSeeking = !!deviceSettings.enableMp3IndexSeeking diff --git a/strings/de.json b/strings/de.json index c0261ab4..43b95059 100644 --- a/strings/de.json +++ b/strings/de.json @@ -228,6 +228,7 @@ "LabelType": "Typ", "LabelUnlockPlayer": "Mediaplayer entsperren", "LabelUseBookshelfView": "Benutze Bücherregalansicht", + "LabelAllowSeekingOnWidget": "Erlaube Vor- oder Zurückspulen auf dem 'Jetzt Läuft' Widget", "LabelUser": "Benutzer", "LabelUsername": "Benutzername", "LabelVeryHigh": "Sehr hoch", diff --git a/strings/en-us.json b/strings/en-us.json index 55464878..5d370b8c 100644 --- a/strings/en-us.json +++ b/strings/en-us.json @@ -228,6 +228,7 @@ "LabelType": "Type", "LabelUnlockPlayer": "Unlock Player", "LabelUseBookshelfView": "Use bookshelf view", + "LabelAllowSeekingOnWidget": "Allow position seeking on the 'Now Playing' widget", "LabelUser": "User", "LabelUsername": "Username", "LabelVeryHigh": "Very High",