Auto formatted code and added function comments

This commit is contained in:
Nicholas Wallace
2025-01-24 19:55:03 -07:00
parent 7ec93cd91e
commit d81e47204c
@@ -1,7 +1,6 @@
package com.audiobookshelf.app.managers package com.audiobookshelf.app.managers
import android.content.Context import android.content.Context
import android.media.metrics.PlaybackSession
import android.os.* import android.os.*
import android.util.Log import android.util.Log
import com.audiobookshelf.app.device.DeviceManager import com.audiobookshelf.app.device.DeviceManager
@@ -12,44 +11,67 @@ import java.util.*
import kotlin.concurrent.schedule import kotlin.concurrent.schedule
import kotlin.math.roundToInt import kotlin.math.roundToInt
class SleepTimerManager constructor(private val playerNotificationService: PlayerNotificationService) { class SleepTimerManager
constructor(private val playerNotificationService: PlayerNotificationService) {
private val tag = "SleepTimerManager" private val tag = "SleepTimerManager"
private var sleepTimerTask:TimerTask? = null private var sleepTimerTask: TimerTask? = null
private var sleepTimerRunning:Boolean = false private var sleepTimerRunning: Boolean = false
private var sleepTimerEndTime:Long = 0L private var sleepTimerEndTime: Long = 0L
private var sleepTimerLength:Long = 0L private var sleepTimerLength: Long = 0L
private var sleepTimerElapsed:Long = 0L private var sleepTimerElapsed: Long = 0L
private var sleepTimerFinishedAt:Long = 0L private var sleepTimerFinishedAt: Long = 0L
private var isAutoSleepTimer:Boolean = false // When timer was auto-set private var isAutoSleepTimer: Boolean = false // When timer was auto-set
private var isFirstAutoSleepTimer: Boolean = true private var isFirstAutoSleepTimer: Boolean = true
private var sleepTimerSessionId:String = "" private var sleepTimerSessionId: String = ""
private fun getCurrentTime():Long { /**
* Gets the current time from the player notification service.
* @return Long - the current time in milliseconds.
*/
private fun getCurrentTime(): Long {
return playerNotificationService.getCurrentTime() return playerNotificationService.getCurrentTime()
} }
private fun getDuration():Long { /**
* Gets the duration of the current playback.
* @return Long - the duration in milliseconds.
*/
private fun getDuration(): Long {
return playerNotificationService.getDuration() return playerNotificationService.getDuration()
} }
private fun getIsPlaying():Boolean { /**
* Checks if the player is currently playing.
* @return Boolean - true if the player is playing, false otherwise.
*/
private fun getIsPlaying(): Boolean {
return playerNotificationService.currentPlayer.isPlaying return playerNotificationService.currentPlayer.isPlaying
} }
private fun setVolume(volume:Float) { /**
* Sets the volume of the player.
* @param volume Float - the volume level to set.
*/
private fun setVolume(volume: Float) {
playerNotificationService.currentPlayer.volume = volume playerNotificationService.currentPlayer.volume = volume
} }
/** Pauses the player. */
private fun pause() { private fun pause() {
playerNotificationService.currentPlayer.pause() playerNotificationService.currentPlayer.pause()
} }
/** Plays the player. */
private fun play() { private fun play() {
playerNotificationService.currentPlayer.play() playerNotificationService.currentPlayer.play()
} }
private fun getSleepTimerTimeRemainingSeconds():Int { /**
* Gets the remaining time of the sleep timer in seconds.
* @return Int - the remaining time in seconds.
*/
private fun getSleepTimerTimeRemainingSeconds(): Int {
if (sleepTimerEndTime == 0L && sleepTimerLength > 0) { // For regular timer if (sleepTimerEndTime == 0L && sleepTimerLength > 0) { // For regular timer
return ((sleepTimerLength - sleepTimerElapsed) / 1000).toDouble().roundToInt() return ((sleepTimerLength - sleepTimerElapsed) / 1000).toDouble().roundToInt()
} }
@@ -58,7 +80,13 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
return (((sleepTimerEndTime - getCurrentTime()) / 1000).toDouble()).roundToInt() return (((sleepTimerEndTime - getCurrentTime()) / 1000).toDouble()).roundToInt()
} }
private fun setSleepTimer(time: Long, isChapterTime: Boolean) : Boolean { /**
* Sets the sleep timer.
* @param time Long - the time to set the sleep timer for.
* @param isChapterTime Boolean - true if the time is for the end of a chapter, false otherwise.
* @return Boolean - true if the sleep timer was set successfully, false otherwise.
*/
private fun setSleepTimer(time: Long, isChapterTime: Boolean): Boolean {
Log.d(tag, "Setting Sleep Timer for $time is chapter time $isChapterTime") Log.d(tag, "Setting Sleep Timer for $time is chapter time $isChapterTime")
sleepTimerTask?.cancel() sleepTimerTask?.cancel()
sleepTimerRunning = true sleepTimerRunning = true
@@ -86,48 +114,75 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
sleepTimerEndTime = 0L sleepTimerEndTime = 0L
} }
playerNotificationService.clientEventEmitter?.onSleepTimerSet(getSleepTimerTimeRemainingSeconds(), isAutoSleepTimer) playerNotificationService.clientEventEmitter?.onSleepTimerSet(
getSleepTimerTimeRemainingSeconds(),
isAutoSleepTimer
)
sleepTimerTask = Timer("SleepTimer", false).schedule(0L, 1000L) { sleepTimerTask =
Handler(Looper.getMainLooper()).post { Timer("SleepTimer", false).schedule(0L, 1000L) {
if (getIsPlaying()) { Handler(Looper.getMainLooper()).post {
sleepTimerElapsed += 1000L if (getIsPlaying()) {
sleepTimerElapsed += 1000L
val sleepTimeSecondsRemaining = getSleepTimerTimeRemainingSeconds() val sleepTimeSecondsRemaining = getSleepTimerTimeRemainingSeconds()
Log.d(tag, "Timer Elapsed $sleepTimerElapsed | Sleep TIMER time remaining $sleepTimeSecondsRemaining s") Log.d(
tag,
"Timer Elapsed $sleepTimerElapsed | Sleep TIMER time remaining $sleepTimeSecondsRemaining s"
)
if (sleepTimeSecondsRemaining > 0) { if (sleepTimeSecondsRemaining > 0) {
playerNotificationService.clientEventEmitter?.onSleepTimerSet(sleepTimeSecondsRemaining, isAutoSleepTimer) playerNotificationService.clientEventEmitter?.onSleepTimerSet(
} sleepTimeSecondsRemaining,
isAutoSleepTimer
)
}
if (sleepTimeSecondsRemaining <= 0) { if (sleepTimeSecondsRemaining <= 0) {
Log.d(tag, "Sleep Timer Pausing Player on Chapter") Log.d(tag, "Sleep Timer Pausing Player on Chapter")
pause() pause()
playerNotificationService.clientEventEmitter?.onSleepTimerEnded(getCurrentTime()) playerNotificationService.clientEventEmitter?.onSleepTimerEnded(
clearSleepTimer() getCurrentTime()
sleepTimerFinishedAt = System.currentTimeMillis() )
} else if (sleepTimeSecondsRemaining <= 60 && DeviceManager.deviceData.deviceSettings?.disableSleepTimerFadeOut != true) { clearSleepTimer()
// Start fading out audio down to 10% volume sleepTimerFinishedAt = System.currentTimeMillis()
val percentToReduce = 1 - (sleepTimeSecondsRemaining / 60F) } else if (sleepTimeSecondsRemaining <= 60 &&
val volume = 1f - (percentToReduce * 0.9f) DeviceManager.deviceData
Log.d(tag, "SLEEP VOLUME FADE $volume | ${sleepTimeSecondsRemaining}s remaining") .deviceSettings
setVolume(volume) ?.disableSleepTimerFadeOut != true
} else { ) {
setVolume(1f) // Start fading out audio down to 10% volume
} val percentToReduce = 1 - (sleepTimeSecondsRemaining / 60F)
} val volume = 1f - (percentToReduce * 0.9f)
} Log.d(
} tag,
"SLEEP VOLUME FADE $volume | ${sleepTimeSecondsRemaining}s remaining"
)
setVolume(volume)
} else {
setVolume(1f)
}
}
}
}
return true return true
} }
fun setManualSleepTimer(playbackSessionId:String, time: Long, isChapterTime:Boolean):Boolean { /**
* Sets a manual sleep timer.
* @param playbackSessionId String - the playback session ID.
* @param time Long - the time to set the sleep timer for.
* @param isChapterTime Boolean - true if the time is for the end of a chapter, false otherwise.
* @return Boolean - true if the sleep timer was set successfully, false otherwise.
*/
fun setManualSleepTimer(playbackSessionId: String, time: Long, isChapterTime: Boolean): Boolean {
sleepTimerSessionId = playbackSessionId sleepTimerSessionId = playbackSessionId
isAutoSleepTimer = false isAutoSleepTimer = false
return setSleepTimer(time, isChapterTime) return setSleepTimer(time, isChapterTime)
} }
/** Clears the sleep timer. */
private fun clearSleepTimer() { private fun clearSleepTimer() {
sleepTimerTask?.cancel() sleepTimerTask?.cancel()
sleepTimerTask = null sleepTimerTask = null
@@ -138,10 +193,15 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
setVolume(1f) setVolume(1f)
} }
fun getSleepTimerTime():Long { /**
* Gets the sleep timer end time.
* @return Long - the sleep timer end time in milliseconds.
*/
fun getSleepTimerTime(): Long {
return sleepTimerEndTime return sleepTimerEndTime
} }
/** Cancels the sleep timer. */
fun cancelSleepTimer() { fun cancelSleepTimer() {
Log.d(tag, "Canceling Sleep Timer") Log.d(tag, "Canceling Sleep Timer")
@@ -155,15 +215,15 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
playerNotificationService.clientEventEmitter?.onSleepTimerSet(0, false) playerNotificationService.clientEventEmitter?.onSleepTimerSet(0, false)
} }
// Vibrate when resetting sleep timer /** Provides vibration feedback when resetting the sleep timer. */
private fun vibrateFeedback() { private fun vibrateFeedback() {
if (DeviceManager.deviceData.deviceSettings?.disableSleepTimerResetFeedback == true) return if (DeviceManager.deviceData.deviceSettings?.disableSleepTimerResetFeedback == true) return
val context = playerNotificationService.getContext() val context = playerNotificationService.getContext()
val vibrator:Vibrator val vibrator: Vibrator
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val vibratorManager = val vibratorManager =
context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibrator = vibratorManager.defaultVibrator vibrator = vibratorManager.defaultVibrator
} else { } else {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -172,18 +232,20 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
vibrator.let { vibrator.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val vibrationEffect = VibrationEffect.createWaveform(longArrayOf(0, 150, 150, 150),-1) val vibrationEffect = VibrationEffect.createWaveform(longArrayOf(0, 150, 150, 150), -1)
it.vibrate(vibrationEffect) it.vibrate(vibrationEffect)
} else { } else {
@Suppress("DEPRECATION") @Suppress("DEPRECATION") it.vibrate(10)
it.vibrate(10)
} }
} }
} }
// Get the chapter end time for use in End of Chapter timers /**
// if less than 2s remain in chapter then use the next chapter * Gets the chapter end time for use in End of Chapter timers. If less than 2 seconds remain in
private fun getChapterEndTime():Long? { * the chapter, then use the next chapter.
* @return Long? - the chapter end time in milliseconds, or null if there is no current session.
*/
private fun getChapterEndTime(): Long? {
val currentChapterEndTimeMs = playerNotificationService.getEndTimeOfChapterOrTrack() val currentChapterEndTimeMs = playerNotificationService.getEndTimeOfChapterOrTrack()
if (currentChapterEndTimeMs == null) { if (currentChapterEndTimeMs == null) {
Log.e(tag, "Getting chapter sleep timer end of chapter/track but there is no current session") Log.e(tag, "Getting chapter sleep timer end of chapter/track but there is no current session")
@@ -195,7 +257,10 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
Log.i(tag, "Getting chapter sleep timer time and current chapter has less than 2s remaining") Log.i(tag, "Getting chapter sleep timer time and current chapter has less than 2s remaining")
val nextChapterEndTimeMs = playerNotificationService.getEndTimeOfNextChapterOrTrack() val nextChapterEndTimeMs = playerNotificationService.getEndTimeOfNextChapterOrTrack()
if (nextChapterEndTimeMs == null || currentChapterEndTimeMs == nextChapterEndTimeMs) { if (nextChapterEndTimeMs == null || currentChapterEndTimeMs == nextChapterEndTimeMs) {
Log.e(tag, "Invalid next chapter time. No current session or equal to current chapter. $nextChapterEndTimeMs") Log.e(
tag,
"Invalid next chapter time. No current session or equal to current chapter. $nextChapterEndTimeMs"
)
null null
} else { } else {
nextChapterEndTimeMs nextChapterEndTimeMs
@@ -205,6 +270,7 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
} }
} }
/** Resets the chapter timer. */
private fun resetChapterTimer() { private fun resetChapterTimer() {
this.getChapterEndTime()?.let { chapterEndTime -> this.getChapterEndTime()?.let { chapterEndTime ->
Log.d(tag, "Resetting stopped sleep timer to end of chapter $chapterEndTime") Log.d(tag, "Resetting stopped sleep timer to end of chapter $chapterEndTime")
@@ -214,6 +280,7 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
} }
} }
/** Checks if the sleep timer should be reset. */
private fun checkShouldResetSleepTimer() { private fun checkShouldResetSleepTimer() {
if (!sleepTimerRunning) { if (!sleepTimerRunning) {
if (sleepTimerFinishedAt <= 0L) return if (sleepTimerFinishedAt <= 0L) return
@@ -230,7 +297,10 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
if (isAutoSleepTimer) { if (isAutoSleepTimer) {
DeviceManager.deviceData.deviceSettings?.let { deviceSettings -> DeviceManager.deviceData.deviceSettings?.let { deviceSettings ->
if (deviceSettings.autoSleepTimerAutoRewind && !isFirstAutoSleepTimer) { if (deviceSettings.autoSleepTimerAutoRewind && !isFirstAutoSleepTimer) {
Log.i(tag, "Auto sleep timer auto rewind seeking back ${deviceSettings.autoSleepTimerAutoRewindTime}ms") Log.i(
tag,
"Auto sleep timer auto rewind seeking back ${deviceSettings.autoSleepTimerAutoRewindTime}ms"
)
playerNotificationService.seekBackward(deviceSettings.autoSleepTimerAutoRewindTime) playerNotificationService.seekBackward(deviceSettings.autoSleepTimerAutoRewindTime)
} }
isFirstAutoSleepTimer = false isFirstAutoSleepTimer = false
@@ -260,7 +330,10 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
// When navigating to previous chapters make sure this is still the end of the current chapter // When navigating to previous chapters make sure this is still the end of the current chapter
this.getChapterEndTime()?.let { chapterEndTime -> this.getChapterEndTime()?.let { chapterEndTime ->
if (chapterEndTime != sleepTimerEndTime) { if (chapterEndTime != sleepTimerEndTime) {
Log.d(tag, "Resetting chapter sleep timer to end of chapter $chapterEndTime from $sleepTimerEndTime") Log.d(
tag,
"Resetting chapter sleep timer to end of chapter $chapterEndTime from $sleepTimerEndTime"
)
vibrateFeedback() vibrateFeedback()
setSleepTimer(chapterEndTime, true) setSleepTimer(chapterEndTime, true)
play() play()
@@ -269,6 +342,7 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
} }
} }
/** Handles the shake event to reset the sleep timer. */
fun handleShake() { fun handleShake() {
if (sleepTimerRunning || sleepTimerFinishedAt > 0L) { if (sleepTimerRunning || sleepTimerFinishedAt > 0L) {
if (DeviceManager.deviceData.deviceSettings?.disableShakeToResetSleepTimer == true) { if (DeviceManager.deviceData.deviceSettings?.disableShakeToResetSleepTimer == true) {
@@ -279,48 +353,65 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
} }
} }
/**
* Increases the sleep timer time.
* @param time Long - the time to increase the sleep timer by.
*/
fun increaseSleepTime(time: Long) { fun increaseSleepTime(time: Long) {
Log.d(tag, "Increase Sleep time $time") Log.d(tag, "Increase Sleep time $time")
if (!sleepTimerRunning) return if (!sleepTimerRunning) return
if (sleepTimerEndTime == 0L) { if (sleepTimerEndTime == 0L) {
sleepTimerLength += time sleepTimerLength += time
if (sleepTimerLength + getCurrentTime() > getDuration()) sleepTimerLength = getDuration() - getCurrentTime() if (sleepTimerLength + getCurrentTime() > getDuration())
sleepTimerLength = getDuration() - getCurrentTime()
} else { } else {
val newSleepEndTime = sleepTimerEndTime + time val newSleepEndTime = sleepTimerEndTime + time
sleepTimerEndTime = if (newSleepEndTime >= getDuration()) { sleepTimerEndTime =
getDuration() if (newSleepEndTime >= getDuration()) {
} else { getDuration()
newSleepEndTime } else {
} newSleepEndTime
}
} }
setVolume(1F) setVolume(1F)
playerNotificationService.clientEventEmitter?.onSleepTimerSet(getSleepTimerTimeRemainingSeconds(), isAutoSleepTimer) playerNotificationService.clientEventEmitter?.onSleepTimerSet(
getSleepTimerTimeRemainingSeconds(),
isAutoSleepTimer
)
} }
/**
* Decreases the sleep timer time.
* @param time Long - the time to decrease the sleep timer by.
*/
fun decreaseSleepTime(time: Long) { fun decreaseSleepTime(time: Long) {
Log.d(tag, "Decrease Sleep time $time") Log.d(tag, "Decrease Sleep time $time")
if (!sleepTimerRunning) return if (!sleepTimerRunning) return
if (sleepTimerEndTime == 0L) { if (sleepTimerEndTime == 0L) {
sleepTimerLength -= time sleepTimerLength -= time
if (sleepTimerLength <= 0) sleepTimerLength = 1000L if (sleepTimerLength <= 0) sleepTimerLength = 1000L
} else { } else {
val newSleepEndTime = sleepTimerEndTime - time val newSleepEndTime = sleepTimerEndTime - time
sleepTimerEndTime = if (newSleepEndTime <= 1000) { sleepTimerEndTime =
// End sleep timer in 1 second if (newSleepEndTime <= 1000) {
getCurrentTime() + 1000 // End sleep timer in 1 second
} else { getCurrentTime() + 1000
newSleepEndTime } else {
} newSleepEndTime
}
} }
setVolume(1F) setVolume(1F)
playerNotificationService.clientEventEmitter?.onSleepTimerSet(getSleepTimerTimeRemainingSeconds(), isAutoSleepTimer) playerNotificationService.clientEventEmitter?.onSleepTimerSet(
getSleepTimerTimeRemainingSeconds(),
isAutoSleepTimer
)
} }
/** Checks if the auto sleep timer should be set. */
fun checkAutoSleepTimer() { fun checkAutoSleepTimer() {
if (sleepTimerRunning) { // Sleep timer already running if (sleepTimerRunning) { // Sleep timer already running
return return
@@ -337,10 +428,13 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
val currentCalendar = Calendar.getInstance() val currentCalendar = Calendar.getInstance()
// In cases where end time is before start time then we shift the time window forward or backward based on the current time. // In cases where end time is before start time then we shift the time window forward or
// backward based on the current time.
// e.g. start time 22:00 and end time 06:00. // e.g. start time 22:00 and end time 06:00.
// If current time is less than start time (e.g. 00:30) then start time will be the previous day. // If current time is less than start time (e.g. 00:30) then start time will be the
// If current time is greater than start time (e.g. 23:00) then end time will be the next day. // previous day.
// If current time is greater than start time (e.g. 23:00) then end time will be the
// next day.
if (endCalendar.before(startCalendar)) { if (endCalendar.before(startCalendar)) {
if (currentCalendar.before(startCalendar)) { // Shift start back a day if (currentCalendar.before(startCalendar)) { // Shift start back a day
startCalendar.add(Calendar.DAY_OF_MONTH, -1) startCalendar.add(Calendar.DAY_OF_MONTH, -1)
@@ -351,11 +445,17 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
val currentHour = SimpleDateFormat("HH:mm", Locale.getDefault()).format(currentCalendar.time) val currentHour = SimpleDateFormat("HH:mm", Locale.getDefault()).format(currentCalendar.time)
if (currentCalendar.after(startCalendar) && currentCalendar.before(endCalendar)) { if (currentCalendar.after(startCalendar) && currentCalendar.before(endCalendar)) {
Log.i(tag, "Current hour $currentHour is between ${deviceSettings.autoSleepTimerStartTime} and ${deviceSettings.autoSleepTimerEndTime} - starting sleep timer") 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 // Automatically Rewind in the book if settings is enabled
if (deviceSettings.autoSleepTimerAutoRewind && !isFirstAutoSleepTimer) { if (deviceSettings.autoSleepTimerAutoRewind && !isFirstAutoSleepTimer) {
Log.i(tag, "Auto sleep timer auto rewind seeking back ${deviceSettings.autoSleepTimerAutoRewindTime}ms") Log.i(
tag,
"Auto sleep timer auto rewind seeking back ${deviceSettings.autoSleepTimerAutoRewindTime}ms"
)
playerNotificationService.seekBackward(deviceSettings.autoSleepTimerAutoRewindTime) playerNotificationService.seekBackward(deviceSettings.autoSleepTimerAutoRewindTime)
} }
isFirstAutoSleepTimer = false isFirstAutoSleepTimer = false
@@ -365,7 +465,10 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
if (deviceSettings.sleepTimerLength == 0L) { if (deviceSettings.sleepTimerLength == 0L) {
val chapterEndTimeMs = this.getChapterEndTime() val chapterEndTimeMs = this.getChapterEndTime()
if (chapterEndTimeMs == null) { if (chapterEndTimeMs == null) {
Log.e(tag, "Setting auto sleep timer to end of chapter/track but there is no current session") Log.e(
tag,
"Setting auto sleep timer to end of chapter/track but there is no current session"
)
} else { } else {
isAutoSleepTimer = true isAutoSleepTimer = true
setSleepTimer(chapterEndTimeMs, true) setSleepTimer(chapterEndTimeMs, true)
@@ -376,15 +479,23 @@ class SleepTimerManager constructor(private val playerNotificationService: Playe
} }
} else { } else {
isFirstAutoSleepTimer = true isFirstAutoSleepTimer = true
Log.d(tag, "Current hour $currentHour is NOT between ${deviceSettings.autoSleepTimerStartTime} and ${deviceSettings.autoSleepTimerEndTime}") Log.d(
tag,
"Current hour $currentHour is NOT between ${deviceSettings.autoSleepTimerStartTime} and ${deviceSettings.autoSleepTimerEndTime}"
)
} }
} }
} }
fun handleMediaPlayEvent(playbackSessionId:String) { /**
* Handles the media play event and checks if the sleep timer should be reset or set.
* @param playbackSessionId String - the playback session ID.
*/
fun handleMediaPlayEvent(playbackSessionId: String) {
// Check if the playback session has changed // Check if the playback session has changed
// If it hasn't changed OR the sleep timer is running then check reset the timer // If it hasn't changed OR the sleep timer is running then check reset the timer
// e.g. You set a manual sleep timer for 10 mins, then decide to change books, the sleep timer will stay on and reset to 10 mins // e.g. You set a manual sleep timer for 10 mins, then decide to change books, the sleep timer
// will stay on and reset to 10 mins
if (sleepTimerSessionId == playbackSessionId || sleepTimerRunning) { if (sleepTimerSessionId == playbackSessionId || sleepTimerRunning) {
checkShouldResetSleepTimer() checkShouldResetSleepTimer()
} else { } else {