0.3.17
Fix the crash on every cold start of a signed-in television. MembyIcons' currentIconPack and DesignTokens' activePalette are process-wide mutableStateOf. The first thing in the process to touch either was ThemeSync, applying the cached pack and palette from an IO thread within milliseconds of the settings store's first emission -- reliably after MainActivity had taken its composition snapshot. A state object created in a newer snapshot than the composition reading it makes that read throw, so HomeNavigation's first MembyIcon.mark read died with "Reading a state that was created after the snapshot was taken". MembyApp.onCreate now creates both on the main thread before anything else can. Both calls are value-level no-ops; what matters is the thread and the ordering. It was invisible on a fresh install because first-run and sign-in draw no marks, which is why clearing app data appeared to fix it -- and it looked like an update bug only because replacing the APK is what forces a cold start with the launcher as the first screen. A reboot did it too. Also: AppRoot filtered neither read of the persisted requiredUpdateVersion through requiredUpdateSatisfied, so a set that had just installed the demanded version opened on the retired-build screen it was updating to escape, until a /v1/update round trip completed. Both reads now apply the rule the in-memory signal and markRequiredUpdate already did. Verified on 10.0.0.238: three cold starts, no crash, launcher fully drawn. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HoEWidWhZu9kZzNURatmcT
This commit is contained in:
co-authored by
Claude Opus 5
parent
067395a362
commit
1ae07b93ec
@@ -38,7 +38,7 @@ val membyGatewayUrl: String = (project.findProperty("memby.gatewayUrl") as Strin
|
||||
val membyDiagnosticLogLevel: String = (project.findProperty("memby.diagnosticLogLevel") as String?)
|
||||
?.trim()?.uppercase()?.takeIf { it in setOf("INFO", "DEBUG", "TRACE") } ?: "INFO"
|
||||
|
||||
val defaultVersionName = "0.3.16"
|
||||
val defaultVersionName = "0.3.17"
|
||||
val membyVersionName: String =
|
||||
(project.findProperty("memby.versionName") as String?)
|
||||
?.trim()
|
||||
|
||||
Reference in New Issue
Block a user