M7: on-device validation - fix usage-screen latency and first-run copy

This commit is contained in:
2026-10-14 17:05:03 +02:00
parent e2cfb5d9ca
commit a79b7eb58e
8 changed files with 158 additions and 27 deletions
+24
View File
@@ -10,8 +10,32 @@ upload needs a **higher `versionCode`** than every previous upload.
## [Unreleased]
### Fixed
- **The storage-usage screen stayed blank for ~45–60 s** on a real 55 GB volume, which
reads as a hang even though the work was off the main thread. `UsageAnalysis` now passes
the `FileEntry` down the recursion instead of re-`stat`ing every node — the parent's
listing already says whether each child is a folder — so the walk costs one listing per
directory. It also reports each child through an `onProgress` callback, and the ViewModel
appends and re-sorts as they arrive, so the largest folders appear while the rest of the
tree is still being measured. Found by running the app on a real phone.
- **Misleading first-run copy.** The permission prompt said "Full access was declined" on a
device where the user had never declined anything. Reworded so it is true whether access
was declined or simply never granted.
### Added
- **M7 — on-device validation.** The app was run on a real Xiaomi M2101K7AG (Android 12,
MIUI V140) rather than only emulator images. Verified on hardware: the first-run
permission prompt, "All files access" granted while the app is alive (picked up on
resume), browsing real storage, the text editor's read *and* write path (the write
checked independently with `adb shell cat`), the storage-usage screen, landscape layout,
and **graceful degradation when access is revoked mid-use**. The findings live in
[docs/EDGE_CASE_TESTING.md](docs/EDGE_CASE_TESTING.md), including what could *not* be
driven from the host — long-press multi-select is delivered as a plain tap by this MIUI
build, so the compress/extract buttons still want a manual pass.
- **M6 — release config and Play readiness.** An upload keystore (4096-bit RSA,
`CN=Hadrian Burkhardt, L=Potsdam, C=DE`) is generated and wired through the git-ignored
`keystore.properties`, so `bundleRelease` produces a signed, R8-minified, resource-shrunk