Skip to content

Commit

Permalink
Merge pull request #1464 from nichwall/sleep_timer_cleanup_2
Browse files Browse the repository at this point in the history
Android Sleep Timer cleanup part 2
  • Loading branch information
advplyr authored Feb 2, 2025
2 parents abdf51d + e4e7679 commit 02b83f0
Showing 1 changed file with 20 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
}

/**
* Gets the chapter end time for use in End of Chapter timers. If less than 2 seconds remain in
* Gets the chapter end time for use in End of Chapter timers. If less than 10 seconds remain in
* the chapter, then use the next chapter.
* @return Long? - the chapter end time in milliseconds, or null if there is no current session.
*/
Expand All @@ -276,8 +276,11 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
}

val timeLeftInChapter = currentChapterEndTimeMs - getCurrentTime()
return if (timeLeftInChapter < 2000L) {
Log.i(tag, "Getting chapter sleep timer time and current chapter has less than 2s remaining")
// If less than 10 seconds remain in the chapter, set the timer to the next chapter or track
// This handles the auto-rewind from not playing media for a little bit to select the next
// chapter
return if (timeLeftInChapter < 10000L) {
Log.i(tag, "Getting chapter sleep timer time and current chapter has less than 10s remaining")
val nextChapterEndTimeMs = playerNotificationService.getEndTimeOfNextChapterOrTrack()
if (nextChapterEndTimeMs == null || currentChapterEndTimeMs == nextChapterEndTimeMs) {
Log.e(
Expand Down Expand Up @@ -332,6 +335,14 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
return
}

// If timer was cleared by going negative on time, clear the sleep timer length so pressing
// play allows playback to continue without the sleep timer continuously setting for 1 second.
if (sleepTimerLength == 1000L) {
Log.d(tag, "Sleep timer cleared by manually subtracting time, clearing sleep timer")
sleepTimerFinishedAt = 0L
return
}

// Automatically rewind in the book if settings are enabled
tryRewindAutoSleepTimer()

Expand All @@ -343,9 +354,12 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
}
}

/** Handles the shake event to reset the sleep timer. */
/**
* Handles the shake event to reset the sleep timer. Shaking to reset only works during the 2
* minute grace period after the timer ends or while media is playing.
*/
fun handleShake() {
if (sleepTimerRunning || sleepTimerFinishedAt > 0L) {
if ((sleepTimerRunning && getIsPlaying()) || sleepTimerFinishedAt > 0L) {
if (DeviceManager.deviceData.deviceSettings?.disableShakeToResetSleepTimer == true) {
Log.d(tag, "Shake to reset sleep timer is disabled")
return
Expand Down Expand Up @@ -460,7 +474,7 @@ constructor(private val playerNotificationService: PlayerNotificationService) {
// Start an auto sleep timer
val currentHour = currentCalendar.get(Calendar.HOUR_OF_DAY)
val currentMin = currentCalendar.get(Calendar.MINUTE)
Log.i(tag, "Starting sleep timer at $currentHour:$currentMin")
Log.i(tag, "Starting auto sleep timer at $currentHour:$currentMin")

// Automatically rewind in the book if settings is enabled
tryRewindAutoSleepTimer()
Expand Down

0 comments on commit 02b83f0

Please sign in to comment.