From bc094d19201230fcd97255bd7a87f7788f170e73 Mon Sep 17 00:00:00 2001 From: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:06:05 -0400 Subject: [PATCH] fix(session): keep wake locks released under a manual hold and retry the paused frame --- app/src/main/java/com/droiddeck/launcher/SessionActivity.kt | 2 +- .../java/com/droiddeck/launcher/session/SessionService.kt | 2 +- .../java/com/droiddeck/launcher/ui/SessionPausedOverlay.kt | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt index 219d69102..893075507 100644 --- a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt @@ -3116,7 +3116,7 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback { private fun capturePausedFrame(manual: Boolean = false) { if (!SessionState.running || pipUi || isInPictureInPictureMode || glassesOutputActive) return if (SessionState.suspended && pausedFrame != null) return - if ((suspendPolicy == SessionPrefs.SUSPEND_NEVER && !manual) || !::surfaceView.isInitialized) return + if ((suspendPolicy == SessionPrefs.SUSPEND_NEVER && !manual && !SessionState.manualPause) || !::surfaceView.isInitialized) return if (surfaceView.holder.surface?.isValid != true) return val width = surfaceView.width val height = surfaceView.height diff --git a/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt b/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt index 74785e34f..d30244656 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/SessionService.kt @@ -1556,7 +1556,7 @@ class SessionService : Service() { manualPauseRequested = false } val controller = suspendController ?: return - if (downloadsBlockingSuspend) acquireLocks() + if (downloadsBlockingSuspend && !manualHold) acquireLocks() val steamPause = SessionState.mode == MODE_STEAM && (manualHold || !downloadsBlockingSuspend && when (suspendPolicy) { SessionPrefs.SUSPEND_AUTO, SessionPrefs.SUSPEND_NATIVE -> hidden SessionPrefs.SUSPEND_MANUAL -> manualPauseRequested diff --git a/app/src/main/java/com/droiddeck/launcher/ui/SessionPausedOverlay.kt b/app/src/main/java/com/droiddeck/launcher/ui/SessionPausedOverlay.kt index 8f7be4e22..2b9127306 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/SessionPausedOverlay.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/SessionPausedOverlay.kt @@ -109,6 +109,10 @@ fun SessionPausedOverlay( when { suspended && !engaged -> { if (!shown && animateIn) { + if (currentFrame == null) { + onFrameNeeded() + withTimeoutOrNull(FRAME_WAIT_MS) { snapshotFlow { currentFrame }.first { it != null } } + } shown = true launch { press.animateTo(1f, Motion.sp(0.5f, Spring.StiffnessMedium)) } launch { ring.animateTo(0f, Motion.tw(200)) }