From d18a05bdb0b40588c1ec1a5172bc3744c0e49da0 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Sat, 7 Nov 2026 01:46:39 +0100 Subject: [PATCH 1/2] Publish pending snapshots while awaiting person-picker identity --- .../wolfskin/tv/PersonPickerSessionTest.kt | 2 ++ docker/README.md | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/src/test/java/org/justinvisser/wolfskin/tv/PersonPickerSessionTest.kt b/app/src/test/java/org/justinvisser/wolfskin/tv/PersonPickerSessionTest.kt index 8e13dca4..95fcbb52 100644 --- a/app/src/test/java/org/justinvisser/wolfskin/tv/PersonPickerSessionTest.kt +++ b/app/src/test/java/org/justinvisser/wolfskin/tv/PersonPickerSessionTest.kt @@ -128,6 +128,8 @@ class PersonPickerSessionTest { private fun awaitLoaded(user: JellyfinUser) { try { rule.waitUntil(10_000) { + // Setup navigation writes Compose state asynchronously; publish it before pumping replacement composition. + androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() Shadows.shadowOf(Looper.getMainLooper()).idle() models.lastOrNull()?.signedInPerson == user.name!!.lowercase() && models.last().conductarr.identity.value?.signedIn == true && diff --git a/docker/README.md b/docker/README.md index 94171e0e..2c1c4c56 100644 --- a/docker/README.md +++ b/docker/README.md @@ -27,6 +27,22 @@ Upstream enables JVM unit tests only for debug variants; there is no `testDefaultReleaseUnitTest` task. `make test` uses the closest default-flavor task without changing upstream's test configuration. +### Full-suite test diagnostics + +The Gradle daemon heap (`org.gradle.jvmargs` in `gradle.properties`) is separate +from the forked test-worker heap. The default test worker uses 512 MiB; changing +the daemon's `-Xmx` does not increase it. A larger worker heap did not resolve +the person-picker fixture's missing Compose snapshot notifications. + +Gradle 9.8.2 runs previously failed test classes first on the next invocation. +An immediate green `make test` rerun can therefore hide an order-sensitive +failure rather than prove a fix. For comparisons, clear only generated binary +test-result history (`build/test-results//binary` in each module) before +each run and record actual class-start order; XML file listing order is not +execution order. Keep worker heap and parallelism unchanged between samples. +`PersonPickerSessionTest` must also pass late in the full app JVM, not just alone +or promoted to the front by previous failures. + ## Saved-person launch and DNS Launch restores an unprotected saved Jellyfin login from local storage before From a0237fa975cb778d1c75abc38f1b40de60ffc035 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Sat, 7 Nov 2026 14:45:48 +0100 Subject: [PATCH 2/2] Preserve household TV data across app maintenance --- app/src/main/AndroidManifest.xml | 1 + docker/README.md | 30 ++++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aad5c5b5..20fc0df0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ ` to keep app data, then reinstall the same +package with the same signer. + +The manifest sets `android:hasFragileUserData="true"` so Android 10+ can offer +a **keep app data** choice during interactive uninstall. Choose it when +available; older Android versions ignore the attribute. This is a retention +prompt, not an automatic backup or a guarantee against data clearing. + +For an in-place update, compare `dumpsys package ` before and after: +`firstInstallTime` must remain unchanged. The guarded installer that checks +the signer and this timestamp lives in the operator's tooling, not this repo. ## Release credentials