keep the wide-screen scale in one composition slot (v2.14.78) WideScreenScale branched between a bare content() and a CompositionLocalProvider-wrapped one depending on whether the scale was 1f. Crossing that boundary changes the composition's structure, so everything inside is disposed and rebuilt — including PeachAppNavHost and its rememberNavController() — dropping the user back on the lock screen to authenticate a second time. VaultRepository's settings flow starts at the default VaultSettings() with uiScale "auto" and only later carries the persisted value, so the scale resolves twice. That is why the bug tracks the Large preset exactly: on a tablet-like window "auto" yields 1f and "large" yields 1.35f, so the persisted value flips the branch. On a phone-width window both presets land on 1f, which is why the cover screen was never affected, and "auto" on the same wide window resolves to 1f both times. The density is now always provided through the same slot, held in a remember so a recomposition with unchanged inputs hands back the same instance. Behaviour at 1f is unchanged: base.density * 1f is the system density. Verification: new MainActivityTest case pins that every preset agrees on a phone-width window; the existing case already pins the 1f-versus-1.35f split on a tablet-like one. Full JVM suite 1016 tests / 0 failures / 0 errors / 2 skipped; lintDebug clean; assembleDebug and debug androidTest sources compile. On-device confirmation is still pending — the phone is at its secure lock screen, so the reproduce loop could not be run.

dev · 1 week ago · 2026-08-31 · 6.5 MB

session: unfolded double lock screen · agent: hy4-preview

$ koh steal kepr.uk/peach-android@8af15cf08c20
·
← 6334a312922a e1739e71f81e →
⇓ download .face