Repository navigation
fix: 2.2.1, crashes on text selection and vault lock; publish to Google Play from CI - #74
Merged
Merged
Conversation
Selecting text (for example double-tapping a word) crashed the app on 2.2.0. The text toolbar of Compose 1.12 reads the system clipboard through Clipboard.nativeClipboardManager, which throws for any Clipboard that is not an AndroidClipboard, and SensitiveClipboard was a plain Clipboard. It now implements AndroidClipboard; copies are still marked sensitive and cleared after a minute.
The drawer counts and the Tasks list collected database flows with no error handling. When the vault locked, the session closed before the lock event cancelled them, Room re-queried, getDatabase threw "Database session expired" and the app crashed. Such a failure is now logged and the last values stay until the lock screen takes over.
…mapping A vX.Y.Z tag now builds, signs and uploads the play bundle to the production track at 100%, with mapping.txt and the store release notes. Google access uses Workload Identity Federation, so no Google key is stored in GitHub. The build job holds the signing key without an OIDC token; the upload job runs in the google-play environment with the OIDC token and only the signed bundle. PLAY_PUBLISH_ENABLED stays the kill switch, and the store test now checks the triggers, the guard and that no job holds both secrets.
Bumps the version to 2.2.1 (versionCode 20201), adds the 2.2.1 section to the changelog and the store release notes in all nine store languages.
pasichDev
marked this pull request as ready for review
October 18, 2026 21:00
Coverage
|
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
Hotfix 2.2.1 for the two crashes reported on 2.2.0, plus publishing to Google Play from CI.
SensitiveClipboardnow implementsAndroidClipboard. The Compose 1.12 text toolbar reads the system clipboard throughClipboard.nativeClipboardManager, and that call throws for any otherClipboard. Copies are still marked sensitive and still cleared after a minute.StatisticViewModel) and the Tasks list (TasksViewModel) collected database flows without error handling. Once the vault session closed, a re-query threwDatabase session expired. The failure is now logged and the last values stay on screen until the lock screen takes over.vX.Y.Ztag builds theplaybundle, signs it and publishes it to production at 100%. The upload includesmapping.txtand the store release notes.version.properties,CHANGELOG.mdand the release notes in all nine store languages.Why
On 2.2.0 every crash in Play Console comes from these two causes:
IllegalArgumentExceptioninAndroidClipboard_androidKt.getNativeClipboardManager, from the text toolbar.IllegalStateExceptioninSecureDatabaseManager.getDatabase, from the tags and tasks flows. Its 2.1.0 groups are the same two collectors.Releases reached Play by hand and without a mapping file, so 2.2.0 crash reports were obfuscated.
Behaviour changes
v*tag now publishes to Google Play production for 100% of users. There is no approval step.PLAY_PUBLISH_ENABLEDis the only switch.publish-play.ymlno longer takes areforstatusinput. To re-run it, start it by hand from the tag.Deploy
How CI talks to Google: no Google key is stored in GitHub.
uploadjob exchanges the run's OIDC token for a short-lived service-account token through Workload Identity Federation.google-playenvironment andrefs/tags/v*.buildjob holds the signing key and has no OIDC token. Theuploadjob has the OIDC token and only gets the signed bundle.Repository variables needed:
PLAY_WIF_PROVIDER,PLAY_SERVICE_ACCOUNT,PLAY_PUBLISH_ENABLED=true, plus the environmentgoogle-playwith a deployment rule forv*tags. The oldPLAY_SERVICE_ACCOUNT_JSONsecret is no longer used.Testing
SensitiveClipTest(the system clipboard is still reachable under the boundary).StatisticViewModelTestandTasksViewModelTest(a read failing after the vault closed).StoreMetadataTestnow checks:v*tags and manual only);id-token: write.testPlayDebugUnitTestandtestFdroidDebugUnitTest: 1704 tests each, 0 failures.lintPlayReleaseandlintFdroidReleasepass.bundlePlayReleasebuilds and writesmapping.txt.playReleasemapping.Not verified:
r0adkll/upload-google-playreads the credentials file throughGOOGLE_APPLICATION_CREDENTIALSwithgoogle-auth-library9, which supportsexternal_account, but only the first tag run proves it.