From 33da1563ee7f6801daf2f62616986c775fca136a Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 12 Oct 2026 22:39:51 +0200 Subject: [PATCH] docs(android): stop describing Picture-in-Picture, and say what PLAN.md has not done Picture-in-Picture was removed from the Android client, but B40 still read as a live fix, B42 stayed open on a `pending` PiP case that no longer exists, and two code comments still named it. PLAN.md marked every recommendation done; its status now lists the ones a source review found short. --- PLAN.md | 17 +++++++++++++++ android/app/src/main/cpp/pstr_mpv.cpp | 2 +- .../protonstream/playback/NativeMpvHost.kt | 2 +- docs/BUGS.md | 21 +++++++++++-------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/PLAN.md b/PLAN.md index 420f79c..4ce7714 100644 --- a/PLAN.md +++ b/PLAN.md @@ -26,6 +26,23 @@ indicator while a crawl runs, but not the crawl's progress. Not yet verified on a device; the host gate (ktlint, unit and screenshot tests) passes, and Android lint runs in CI. +A source review on 2026-10-12 found these still short of the text below: + +- **Title page.** The backdrop scrolls away with the back button instead of + collapsing to a pinned bar, and the icon row has no mark-watched action. +- **Episode rows** show the file size where runtime was asked for. +- **Player episode list** is a bottom sheet in landscape too, not a side + panel. +- **Storage** has a usage bar for the streaming cache only; offline episodes + have none. +- **Metadata language** is still a free-text field. +- **Touch targets.** The player's icons are 40 dp, under the 48 dp floor. +- **Screenshots** do not cover the player, and only the library is taken at + font scale 1.5. + +Share rows now say how many files the last crawl found, when it ran and why it +failed (section 2, Shares), as of the catalog's `share_crawls` table. + ## 0. CI (done) Every `Android` workflow run since August failed in `:app:buildRustHost`: diff --git a/android/app/src/main/cpp/pstr_mpv.cpp b/android/app/src/main/cpp/pstr_mpv.cpp index aaf279e..be1f555 100644 --- a/android/app/src/main/cpp/pstr_mpv.cpp +++ b/android/app/src/main/cpp/pstr_mpv.cpp @@ -202,7 +202,7 @@ struct PlaybackState { /// and must not be attributed to the file being loaded. bool loading = false; /// The picture's display size, once mpv has decoded enough to know it. - /// Zero until then, and the aspect Picture-in-Picture is given. + /// Zero until then. double video_width = 0.0; double video_height = 0.0; /// Which loaded file this state describes. Bumped by every load, so a diff --git a/android/app/src/main/java/io/narl/protonstream/playback/NativeMpvHost.kt b/android/app/src/main/java/io/narl/protonstream/playback/NativeMpvHost.kt index a558117..36c4358 100644 --- a/android/app/src/main/java/io/narl/protonstream/playback/NativeMpvHost.kt +++ b/android/app/src/main/java/io/narl/protonstream/playback/NativeMpvHost.kt @@ -245,7 +245,7 @@ class NativeMpvHost private constructor(private val nativeHandle: Long) : Libmpv */ fun beginTransition() { mutableAdvancing.value = true } - /** Names the open episode for the media session, its notification and PiP. */ + /** Names the open episode for the media session and its notification. */ fun publish(playing: NowPlaying?) { mutableNowPlaying.value = playing } fun setPaused(paused: Boolean) { diff --git a/docs/BUGS.md b/docs/BUGS.md index 41ab520..7692e21 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -117,15 +117,13 @@ position advances, which can only happen if real decrypted bytes reached the decoder. One live run serves all five cases, because each re-crawl of a real share costs about six minutes and the crawl is not what any of them tests. -**Still open, and the reason this entry stays open.** `picture-in-picture` is -`pending`. It is no longer blocked on the app — -[B40](#b40--picture-in-picture-was-entered-but-never-adapted-to) landed, so -there is correct behaviour to assert — but the live suite drives the engine and -libmpv directly, and PiP is a property of the window, so the case needs an -activity-level driver that does not exist yet. Every run still prints that the -matrix is incomplete. `process-recreation` has been promoted off its `xfail` -now that [B35](#b35--navigation-and-player-state-did-not-survive-process-recreation) -has landed, and has not been re-run on hardware since. +**Still open, and the reason this entry stays open.** The matrix has not been +run on hardware since the 2026-10 redesign of every screen, and +`process-recreation` has not been re-run since +[B35](#b35--navigation-and-player-state-did-not-survive-process-recreation) +landed. The `picture-in-picture` case that was `pending` below went with +Picture-in-Picture itself, which was later removed (`docs/ANDROID.md`), so +nothing is `pending` any more. **Verified on hardware**, 2026-08-08, Pixel 6 (`arm64-v8a`, API 37) against the signed minified release APK: @@ -1289,6 +1287,11 @@ out rather than leaving them mid-timeout. suppressed. The `picture-in-picture` acceptance case is now implementable — it was `pending` precisely because the assertion would have had to assert this bug. +**Since removed.** Picture-in-Picture itself was taken out later: a PiP window +that never sized its video right proved less use than background audio and the +lock-screen transport (`docs/ANDROID.md`). This entry records a fix to code +that no longer exists. + ### B45 — the play/pause button did nothing, everywhere **Symptom.** Once an episode was open, every transport that can pause it was