Skip to content

Fix screensaver dismiss-app after handoff, silent Immich fallback, and forced gradient (#146, #103, #142, #144)#147

Merged
starbrightlab merged 3 commits into
mainfrom
claude/review-open-prs-issues-iwbqa9
Jul 10, 2026
Merged

Fix screensaver dismiss-app after handoff, silent Immich fallback, and forced gradient (#146, #103, #142, #144)#147
starbrightlab merged 3 commits into
mainfrom
claude/review-open-prs-issues-iwbqa9

Conversation

@starbrightlab

Copy link
Copy Markdown
Owner

Three fixes from the issue triage, one commit each.

1. "Open app on dismiss" dies after the ~2-minute handoff (closes #146, most of #103)

PhotoDreamService's tap handler launches the chosen dismiss target, but the PhotoFramePreviewActivity continuation frame — which takes over when Android force-wakes the DreamService, i.e. most of the frame's lifetime under the default ALWAYS_ON mode — dismissed with a bare finish(). Its tap-exit now:

2. Immich failures fall back to the stock feed with zero trace (#142, part 1 of 2)

The whole Immich chain was runCatching { … }.getOrNull() with no logging, by design — which made #142 (album selection silently showing the built-in feed) undiagnosable from user reports. Non-2xx responses now log method/endpoint/status plus the first 300 chars of the server's error body under ImmortalImmich, and the fallback swap logs under ImmortalPhotoFrame. The root-cause fix for the album filter follows once the reporter's curl test confirms what the server actually returns (asked on the issue).

3. Legibility gradient can't be disabled (closes #144)

FaceRenderer drew the bottom scrim unconditionally on every non-full-bleed face, even with every widget off. New showGradient setting (default on — the original look is unchanged), wired through the settings registry so it appears on-device and on the phone remote, gates the scrim.

Testing

🤖 Generated with Claude Code

https://claude.ai/code/session_01DRTP7kN5WbzXFGoCWYR89s


Generated by Claude Code

claude added 3 commits July 9, 2026 22:45
#146)

The "open when dismissed" target only worked for ~2 minutes: Android
force-wakes any third-party DreamService, and the PhotoFramePreviewActivity
continuation frame that takes over dismissed with a bare finish(). Route
its tap-exit through ScreensaverDismiss.launchChosenApp, gated to the
DreamPolicy continuation launch by a new EXTRA_LAUNCH_DISMISS_APP extra so
on-demand previews (settings, face picker, MQTT command) still return to
their caller, and the night clock stays dark.

The same tap now also flips PresenceHub to INTERACTIVE — finishing an
Activity fires no dream-stop, so the hub stayed stuck on DREAMING and MQTT
screen/state never reported "interactive" after the handoff (issue #103).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRTP7kN5WbzXFGoCWYR89s
Every failure in the Immich chain was runCatching{}.getOrNull() with zero
logging, so an album-filtered fetch that fails looks identical to success
with the stock feed — undiagnosable from a user report. Non-2xx responses
now log the method, endpoint, status, and the first 300 chars of the
server's error body under ImmortalImmich; empty/failed listings and the
built-in-feed fallback log too.

Diagnostic groundwork for #142 (album selection silently falls back);
the root-cause fix follows once the server-side response is confirmed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRTP7kN5WbzXFGoCWYR89s
FaceRenderer drew the bottom scrim unconditionally on every non-full-bleed
face, even with every widget turned off — art-frame setups couldn't show
the photo clean to the edge. New showGradient setting (default on, so the
original look is unchanged) wired through the settings registry, so it
appears on-device and on the phone remote.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRTP7kN5WbzXFGoCWYR89s
@starbrightlab starbrightlab merged commit 597500f into main Jul 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Open app (Home Assistant) on dismiss (Screen Saver) not working Screensaver always has gradient at bottom

2 participants