General: Add the Play Console declarations and their demo recorder - #38
Merged
Conversation
Play requires, per declared foreground service type, a functionality description, a statement of user impact when the task is deferred or interrupted, and a link to a video demonstrating the feature. None of that existed, and it gates review — including for closed testing. Adds fastlane/play-declarations/ as the copy-paste source for the specialUse foreground-service declaration, app access, and data safety, plus the tooling that regenerates the demo video: label-based UI driving over adb, screenrecord capture, and an ffmpeg pass for title card, timed captions and end card. The scripts are committed, the .mp4 is not. The recording demonstrates the unplug stop condition rather than the 100% one. That is the condition which cannot work without a running foreground service (Android does not deliver the disconnect to a dormant app), and it needs no simulated charge progression, so nothing on screen is faked beyond the disconnect. The recorder reads the underlying system setting before, during and after the take and fails the run unless it observed protected -> lifted -> protected, so a take that did not demonstrate the feature is never silently produced. It also clears the notification shade, mutes and disables Wi-Fi for the take, because the finished video goes to Google and would otherwise carry the user's notifications and network name. Store listing: drop the per-manufacturer support list. It goes stale with every OEM system update and cannot promise anything reliable; the app already determines support on the device at runtime. Privacy policy: cover the opt-in charging history, which was added after the policy was last written and was not described by it.
d4rken
marked this pull request as ready for review
July 28, 2026 19:13
record.sh started the screen capture and then launched Amply, so the first ~2.5s of every take showed whatever app was previously in the foreground during the launch animation. In the current take that was Octi, listing the owner's devices and sync server. Launch and settle before the capture starts instead. postprocess.sh gains TRIM_START (or a trim.txt) to salvage an existing take by dropping N seconds off the front, shifting caption timings to match; this take renders with 2.5s trimmed. The trim happens inside the filtergraph with an explicit timestamp reset — input seeking on screenrecord's variable-rate output made the fps filter pad the cut back out with ~60 duplicate frames, which silently lengthened the title card. The render now lands next to its DECLARATION.md and is git-ignored, so it can be kept on disk ready to upload without entering the repository.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
No user-facing behavior change in the app.
The store listing no longer lists supported manufacturers and ROM versions. That list goes stale with every OEM system update and can't promise anything reliable — Amply already determines support on the device at runtime, so the listing now says Pixels generally have good support, that everywhere else depends on the specific phone, and that installing and opening the app is how you find out.
The privacy policy now covers the opt-in charging history, which landed after the policy was last written and wasn't described by it.
Technical Context
Play requires, per declared foreground service type, a functionality description, a statement of user impact if the task is deferred or interrupted, and a link to a demo video. None of that existed and it gates review, including for closed testing.
fastlane/play-declarations/is the copy-paste source for the Console forms (specialUse FGS, app access, data safety) plus the tooling that regenerates the video — label-based UI driving over adb,screenrecordcapture, and an ffmpeg pass for title card, timed captions and end card. Butler'splay-declarations/layout, adapted. Scripts are committed; the.mp4is written to/tmpand is not.Review guidance:
charge_optimization_modego 1 → 0 → 1 across the take.PROPERTY_SPECIAL_USE_FGS_SUBTYPEdescribe the same four functions; they have to be changed together.Verified alongside this:
bundleGplayReleasebuilds under R8 and is signed with the Play upload key at the pathFastfileexpects (this was never exercised before — every artifact so far has been a FOSS APK).