Skip to content

Commit

Permalink
Fix system screensaver starting during video playback
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsvanvelzen committed Dec 10, 2023
1 parent 67581d1 commit d9eb849
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,20 @@ class ScreensaverViewModel(
) : ViewModel() {
private var timer: Job? = null
private var locks = 0
val enabled get() = userPreferences[UserPreferences.screensaverInAppEnabled]

// Preferences

val inAppEnabled get() = userPreferences[UserPreferences.screensaverInAppEnabled]
private val timeout get() = userPreferences[UserPreferences.screensaverInAppTimeout].milliseconds

// State

private val _visible = MutableStateFlow(false)
val visible get() = _visible.asStateFlow()

private val _keepScreenOn = MutableStateFlow(inAppEnabled)
val keepScreenOn get() = _keepScreenOn.asStateFlow()

var activityPaused: Boolean = false
set(value) {
field = value
Expand All @@ -38,17 +47,20 @@ class ScreensaverViewModel(
timer?.cancel()

// Hide when interacted with allowed cancelation or when disabled
if (_visible.value && (canCancel || !enabled || activityPaused)) {
if (_visible.value && (canCancel || !inAppEnabled || activityPaused)) {
_visible.value = false
}

// Create new timer to show screensaver when enabled
if (enabled && !activityPaused && locks == 0) {
if (inAppEnabled && !activityPaused && locks == 0) {
timer = viewModelScope.launch {
delay(timeout)
_visible.value = true
}
}

// Update KEEP_SCREEN_ON flag value
_keepScreenOn.value = inAppEnabled || locks > 0
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ class MainActivity : FragmentActivity() {

if (!validateAuthentication()) return

screensaverViewModel.keepScreenOn.flowWithLifecycle(lifecycle, Lifecycle.State.RESUMED)
.onEach { keepScreenOn ->
if (keepScreenOn) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}.launchIn(lifecycleScope)

onBackPressedDispatcher.addCallback(this, backPressedCallback)

supportFragmentManager.addOnBackStackChangedListener {
Expand Down Expand Up @@ -87,9 +93,6 @@ class MainActivity : FragmentActivity() {
applyTheme()

screensaverViewModel.activityPaused = false

if (screensaverViewModel.enabled) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}

private fun validateAuthentication(): Boolean {
Expand Down

0 comments on commit d9eb849

Please sign in to comment.