Write the release notes, the permission answers, and the video
verify / gate (push) Has been cancelled
verify / release (push) Has been cancelled

Play asks three separate things before a file manager may keep All files
access: the What's new copy, a justification for why SAF and MediaStore cannot
carry it, and a short video of the permission in use. Writing them exposed two
stale claims and one privacy problem, so those are fixed here rather than
repeated.

- docs/RELEASE_NOTES.md holds the Console field at 450/500 characters, measured,
  and the longer announcement. The first release's copy leads with the claim no
  competitor makes (no ads, no INTERNET permission) and then proves the app is
  still a file manager.

- docs/PLAY_RELEASE_CHECKLIST.md section 5 holds the declaration answer at
  490/500 characters. It argues from what the Storage Access Framework and
  MediaStore cannot do - one picked tree, no volume enumeration or whole-device
  hierarchy, no arbitrary non-media files - and never from performance, which
  Google's wording rejects. Both APIs are named as already used where they can
  be, so the argument is not that they are useless.

- docs/PERMISSION_VIDEO.md and store-assets/video hold a 19.7 s captioned video
  recorded on the release build. The home-screen segment is cut because its
  library counts are the owner's real totals; the published copy resumes on the
  internal-storage listing. Also recorded: the emulator captures one frame in
  three seconds, and only appops set --uid ... deny brings the prompt back after
  Settings has granted the app-op.

- README and ROADMAP caught up with the build: the status stopped at M15, and
  the trash limitation still said there was no Empty trash and that expiry
  waited for the next delete, both changed in M19.

Verified: ./tools/verify.sh green, the code map current, the Play field measured
at 450 characters and the form answer at 490, and the video decoded as H.264
1080x2400, 19.666 s, no audio, with frames checked at the cut and the end state.
This commit is contained in:
2026-10-18 13:59:50 +02:00
parent f4ca5f22ae
commit 9b8a32fbd6
10 changed files with 400 additions and 26 deletions
+26
View File
@@ -152,6 +152,28 @@ This is the step that can block a file manager, and the one to get right.
- [ ] Keep the permission set honest: declaring a permission the app does not use is itself
a policy violation.
**The declaration answer (490 / 500 characters, measured):**
```
Plain Files' core purpose is browsing and managing every file and folder on internal storage, SD cards and USB drives: documents, archives, APKs, hidden files and folders created by other apps. The Storage Access Framework grants one user-picked tree at a time and cannot enumerate volumes or present a whole-device hierarchy. MediaStore exposes indexed media collections, not arbitrary files or folder trees. SAF remains a fallback for a chosen folder, but cannot deliver the core purpose.
```
This is a **functional** argument, which is the only kind the form accepts — Google's own wording
says improving performance is not an acceptable reason, so speed is not mentioned. Each claim is true
of this build: `data/SafSource` already provides the folder-tree fallback, and the app's only
`MediaStore` use is the best-effort delete request (section 5's permission audit), so neither API is
being dismissed as unnecessary. What they cannot do is *enumerate every volume*, *present one
hierarchy spanning internal storage and removable media*, or *manage arbitrary non-media files and
folders* — which is what "file manager" means, and why the listing copy leads with it.
If a future form allows fewer characters, cut the last sentence first: the fallback is a point of
honesty, not the justification.
- [ ] Upload `store-assets/video/permission-use.mp4` (**19.7 s**, captions burned in) to YouTube
**Unlisted** or Drive shared with anyone who has the link, then paste that URL into the form's
video field. The repository file is not a link, and a private video cannot be reviewed. What it
shows, why the system UI is German, and how to re-shoot it: [PERMISSION_VIDEO](PERMISSION_VIDEO.md).
**Verify the shipped permission set** after every release build:
```bash
@@ -197,6 +219,10 @@ Full copy and the generated graphics land in **M10** (`docs/STORE_LISTING.md`).
fields needed: app name, short description, full description, app icon 512×512, feature
graphic 1024×500, and the screenshots.
The per-release **What's new** field is separate from the listing and is capped at **500 characters**:
its copy, measured, is in [RELEASE_NOTES](RELEASE_NOTES.md), together with the longer announcement
for a website or GitHub release.
- [ ] Upload the screenshots from `store-assets/screenshots/`: **phone** 1080×2160 (8),
**7-inch tablet** 1200×1920 (4), **10-inch tablet** 2560×1600 (4). Play wants 4+ per
large-screen form factor. All three sets clear its rules — 24-bit PNG with no alpha,