From 5399ec67d7020cb4507925afb0a325892279118d Mon Sep 17 00:00:00 2001 From: hstephens Date: Sat, 29 Apr 2023 15:38:51 -0600 Subject: [PATCH] Added Auto Rewind on Sleep Timer setting --- .../audiobookshelf/app/data/DeviceClasses.kt | 5 + .../app/managers/SleepTimerManager.kt | 5 + .../AutoSleepTimerRewindLengthModal.vue | 95 +++++++++++++++++++ pages/settings.vue | 41 +++++++- 4 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 components/modals/AutoSleepTimerRewindLengthModal.vue 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 93fd4c72..6bda6d1b 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 @@ -103,6 +103,8 @@ data class DeviceSettings( var autoSleepTimer: Boolean, var autoSleepTimerStartTime: String, var autoSleepTimerEndTime: String, + var autoSleepTimerAutoRewind: Boolean, + var autoSleepTimerAutoRewindTime: Long, //Time in milliseconds var sleepTimerLength: Long, // Time in milliseconds var disableSleepTimerFadeOut: Boolean, var disableSleepTimerResetFeedback: Boolean @@ -123,6 +125,8 @@ data class DeviceSettings( autoSleepTimerStartTime = "22:00", autoSleepTimerEndTime = "06:00", sleepTimerLength = 900000L, // 15 minutes + autoSleepTimerAutoRewind = false, + autoSleepTimerAutoRewindTime = 300000L, disableSleepTimerFadeOut = false, disableSleepTimerResetFeedback = false ) @@ -142,6 +146,7 @@ data class DeviceSettings( @get:JsonIgnore val autoSleepTimerEndMinute get() = autoSleepTimerEndTime.split(":")[1].toInt() + @JsonIgnore fun getShakeThresholdGravity() : Float { // Used in ShakeDetector return if (shakeSensitivity == ShakeSensitivitySetting.VERY_HIGH) 1.2f diff --git a/android/app/src/main/java/com/audiobookshelf/app/managers/SleepTimerManager.kt b/android/app/src/main/java/com/audiobookshelf/app/managers/SleepTimerManager.kt index 47c3113c..e5413598 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/managers/SleepTimerManager.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/managers/SleepTimerManager.kt @@ -1,6 +1,7 @@ package com.audiobookshelf.app.managers import android.content.Context +import android.media.metrics.PlaybackSession import android.os.* import android.util.Log import com.audiobookshelf.app.device.DeviceManager @@ -343,6 +344,10 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe if (currentCalendar.after(startCalendar) && currentCalendar.before(endCalendar)) { Log.i(tag, "Current hour $currentHour is between ${deviceSettings.autoSleepTimerStartTime} and ${deviceSettings.autoSleepTimerEndTime} - starting sleep timer") + // Automatically Rewind in the book if settings is enabled + if (deviceSettings.autoSleepTimerAutoRewind) { + playerNotificationService.seekBackward(deviceSettings.autoSleepTimerAutoRewindTime) + } // Set sleep timer // When sleepTimerLength is 0 then use end of chapter/track time if (deviceSettings.sleepTimerLength == 0L) { diff --git a/components/modals/AutoSleepTimerRewindLengthModal.vue b/components/modals/AutoSleepTimerRewindLengthModal.vue new file mode 100644 index 00000000..2f13df25 --- /dev/null +++ b/components/modals/AutoSleepTimerRewindLengthModal.vue @@ -0,0 +1,95 @@ + + + diff --git a/pages/settings.vue b/pages/settings.vue index 66a8a5e3..ce7c3ff7 100644 --- a/pages/settings.vue +++ b/pages/settings.vue @@ -95,9 +95,23 @@ +
+
+ +
+

Auto Sleep Timer Auto Rewind

+ info +
+
+

Auto Rewind Time

+
+ +
+
+ @@ -110,6 +124,7 @@ export default { deviceData: null, showMoreMenuDialog: false, showSleepTimerLengthModal: false, + showAutoSleepTimerRewindLengthModal: false, moreMenuSetting: '', settings: { disableAutoRewind: false, @@ -125,7 +140,9 @@ export default { autoSleepTimerEndTime: '06:00', sleepTimerLength: 900000, // 15 minutes disableSleepTimerFadeOut: false, - disableSleepTimerResetFeedback: false + disableSleepTimerResetFeedback: false, + autoSleepTimerAutoRewind: false, + autoSleepTimerAutoRewindTime: 300000, // 5 minutes }, lockCurrentOrientation: false, settingInfo: { @@ -144,6 +161,10 @@ export default { disableSleepTimerResetFeedback: { name: 'Disable vibrate on reset', message: 'When the sleep timer gets reset your device will vibrate. Enable this setting to not vibrate when the sleep timer resets.' + }, + autoSleepTimerAutoRewind: { + name: "Enable sleep timer auto rewind", + message: "When the Auto Sleep Timer plays, automatically rewind your position in the book. " } }, hapticFeedbackItems: [ @@ -234,6 +255,10 @@ export default { const minutes = Number(this.settings.sleepTimerLength) / 1000 / 60 return `${minutes} min` }, + autoSleepTimerRewindLengthOption() { + const minutes = Number(this.settings.autoSleepTimerAutoRewindTime) / 1000 / 60 + return `${minutes} min` + }, moreMenuItems() { if (this.moreMenuSetting === 'shakeSensitivity') return this.shakeSensitivityItems else if (this.moreMenuSetting === 'hapticFeedback') return this.hapticFeedbackItems @@ -245,9 +270,16 @@ export default { this.settings.sleepTimerLength = value this.saveSettings() }, + showAutoSleepTimerRewindLengthModalSelection(value) { + this.settings.autoSleepTimerAutoRewindTime = value + this.saveSettings() + }, showSleepTimerOptions() { this.showSleepTimerLengthModal = true }, + showAutoSleepTimerRewindOptions() { + this.showAutoSleepTimerRewindLengthModal = true + }, showHapticFeedbackOptions() { this.moreMenuSetting = 'hapticFeedback' this.showMoreMenuDialog = true @@ -287,6 +319,10 @@ export default { this.settings.autoSleepTimer = !this.settings.autoSleepTimer this.saveSettings() }, + toggleAutoSleepTimerAutoRewind() { + this.settings.autoSleepTimerAutoRewind = !this.settings.autoSleepTimerAutoRewind + this.saveSettings + }, toggleDisableSleepTimerFadeOut() { this.settings.disableSleepTimerFadeOut = !this.settings.disableSleepTimerFadeOut this.saveSettings() @@ -364,6 +400,9 @@ export default { this.settings.sleepTimerLength = !isNaN(deviceSettings.sleepTimerLength) ? deviceSettings.sleepTimerLength : 900000 // 15 minutes this.settings.disableSleepTimerFadeOut = !!deviceSettings.disableSleepTimerFadeOut this.settings.disableSleepTimerResetFeedback = !!deviceSettings.disableSleepTimerResetFeedback + + this.settings.autoSleepTimerAutoRewind = !!deviceSettings.autoSleepTimerAutoRewind + this.settings.autoSleepTimerAutoRewindTime = !isNaN(deviceSettings.autoSleepTimerAutoRewindTime) ? deviceSettings.autoSleepTimerAutoRewindTime : 600000 // 10 minutes } }, mounted() {