Repository navigation
feat: offer updates as a browser download instead of installing them inside the app - #312
Merged
Merged
Conversation
…inside the app The GitHub build keeps the update check (latest release, pre-release switch, Update available banner and sheet) but no longer installs anything itself. Download sends the browser to the release's APK (the release page when the release has no APK), a separate link opens the release page, and the sheet shows the file's SHA-256 when GitHub lists one. The browser is only sent to HTTPS links under this repository's GitHub releases. REQUEST_INSTALL_PACKAGES, the PackageInstaller session, the status receiver, the install-permission flow, the in-app APK download and their tests are removed, and the main manifest strips the permission from every flavor and library; a unit test fails if it comes back. Why: on 2026-11-13 Google Play Protect blocked every GitHub build that could install packages, and the CI build of this change (same version and key, no permission) was rated "This app seems safe" on the same phone, see ADR-0046 (Accepted). The store flavor behaves as before. README and website explain the Play Protect dialogs and how to verify a download; ADR-0008, ADR-0034 and ADR-0040 point to ADR-0046. Closes #306, closes #307 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
nofuturekid
force-pushed
the
feat/update-via-browser-download
branch
from
November 13, 2026 13:38
83fd363 to
be8efe0
Compare
nofuturekid
marked this pull request as ready for review
November 13, 2026 13:39
nofuturekid
temporarily deployed
to
github-pages
November 13, 2026 13:46 — with
GitHub Actions
Inactive
This was referenced Nov 13, 2026
Merged
This branch was previously deployed
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 and why
The GitHub (
direct) build no longer installs updates itself. It keeps the update check and the "Update available" sheet; Download now sends the browser to the release APK, and a separate Release page button opens the release page.REQUEST_INSTALL_PACKAGESand all installer code are gone, and the main manifest strips the permission from every flavor and library (tools:node="remove"), with a unit test that fails if it comes back.Why, with the evidence (2026-11-13, real Android 9 phone with Google Play Protect):
Decision: Accepted in ADR-0046 (2026-11-13), to go into the next beta.
Closes #306 (the permission round trip it describes no longer exists).
Closes #307 (the blocked-update message it improves is no longer shown, because the app no longer installs).
What changed
UpdateRepository: the browser is only sent to HTTPS links underhttps://github.com/hellwand/nova/releases/; another host, another repository or a non-https scheme returns an error (tests for each).REQUEST_INSTALL_PACKAGESandapp/src/direct/AndroidManifest.xml, thePackageInstallersession,InstallStatusReceiver,UpdateController,ApkInstaller,UpdateInstaller,UpdateModule,UpdateControllerTest.UpdateRepositoryTest(links, pre-release filter, drafts, checksum),NoInstallPermissionTest(permission absent, remove marker present).Cost
No one-tap update. Users of versions up to 0.1.46 still have the old updater and may see the Play Protect dialogs one last time when updating to the first release with this change.
Not in this pull request
Version bump and release (version stays 0.1.46 / 129),
.github/(a stale mention of the in-app updater inci.ymlandSECURITY.mdis tracked separately), thestoreflavor's behaviour, signing, andobjects.githubusercontent.cominnetwork_security_config.xml(harmless now that the app no longer reaches it; left alone).Checks
./scripts/local-ci.shon the rebased state:LOCAL CI PASSED in 138s; 255 unit tests, 0 failures, 0 skipped.aapt2 dump permissionson the built direct and store release APKs:INTERNET,ACCESS_NETWORK_STATEand the app-internalDYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION; no install-packages permission.🤖 Generated with Claude Code