Add the mock location permission keys, retire the cleanup error - #19
Merged
Conversation
android/#479 shipped seven mock_location_* strings straight into
res/values/strings.xml without adding them here. Those files are generated
from this store, and build.sh regenerates before every pipeline build, so the
release build drops all seven and the app stops compiling on nine
R.string.mock_location_* references. CI cannot catch it -- the android
workflow says as much at build-and-test.yml:31, since the generated files are
committed and it never runs the generator.
Adds, all android-only:
mock_location_status_stuck settings row status when the
simulated location is stuck on
mock_location_error_stuck_title recovery card title
mock_location_error_stuck_detail the recovery instructions, and the
only in-app guidance for restoring
the real GPS
mock_location_step_location_permission the optional approximate-location
step, phrased as optional because
the AOSP test providers need no
runtime grant -- only the Play
services mirror does
mock_location_grant_permission button on that step
mock_location_open_app_settings what that button becomes once
Android stops showing the dialog
mock_location_status_retrying settings row status while the
engine retries
Retires mock_location_error_cleanup_required: the ORPHANED copy moved to the
_stuck_ strings and android has no references left, so platforms is empty and
android is recorded in deprecated, like the other 21 retired keys.
Translations were produced per locale against the 19 mock_location_* keys
already in this store, so the feature reads consistently: "simulated
location", "developer options" and "provider" keep the wording each locale
already uses, and Developer options and approximate location follow the names
Android itself ships in that language rather than a literal translation -- a
user who cannot find the setting cannot unfreeze their GPS. Each locale was
then reviewed independently; 16 came back with corrections, the sharpest being
ar, where the draft used ثبّت for "locked". This store uses that verb nine
times to mean install, and once to mean pin, so the sentence read as "Android
installed the fake GPS" in the one string that explains the freeze.
node --test gen/*.test.mjs passes. npm run gen:android then leaves the android
tree building: 345 unit tests, 0 failures; all four flavor release variants
compile; assembleGithubDebug packages.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019VYp99vhW9soGoTmNGVYJk
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.
Why
urnetwork/android#479shipped sevenmock_location_*strings straight intores/values/strings.xmlwithout adding them here. Those files are generated from this store, andbuild.shregenerates before every pipeline build — so the release build drops all seven and the app fails to compile on nineR.string.mock_location_*references.Reproduced on
androidmainbefore these keys existed:CI never sees this. The android workflow runs gradle directly and never runs the generator —
build-and-test.yml:31already documents the gap: "it just will not catch key drift, which the release pipeline regenerates and would."What this adds
Seven android-only keys.
mock_location_step_location_permissionis deliberately phrased as optional: the AOSPLocationManagertest providers need no runtime grant, and only the Play services mirror does, so the copy says what granting buys rather than implying the feature is broken without it.mock_location_status_stuckmock_location_error_stuck_titlemock_location_error_stuck_detailmock_location_step_location_permissionmock_location_grant_permissionmock_location_open_app_settingsmock_location_status_retryingmock_location_error_cleanup_requiredis retired: the ORPHANED copy moved to the_stuck_strings and android has no references left.platformsis emptied andandroidrecorded indeprecated, matching the other 21 retired keys.Translations
Produced per locale against the 19
mock_location_*keys already here, so the feature reads consistently — "simulated location", "developer options" and "provider" keep the wording each locale already uses. "Developer options" and "approximate location" follow the names Android itself ships in that language rather than a literal translation, since a user who cannot find the setting cannot unfreeze their GPS.Each locale was then reviewed independently and 16 came back with corrections. The sharpest was
ar, where the draft usedثبّتfor "locked" — this store uses that verb nine times to mean install and once to mean pin, so the sentence read as "Android installed the fake GPS" in the one string that explains the freeze.Verification
node --test gen/*.test.mjs— 5 pass, 0 failnpm run gen:androidthen, in the android tree: 345 unit tests, 0 failures; all four flavor release variants compile;assembleGithubDebugpackagesMerge order
Merge this first. The android side is the regenerated output and is a separate PR.
🤖 Generated with Claude Code
https://claude.ai/code/session_019VYp99vhW9soGoTmNGVYJk