Commit Graph

4029 Commits

Author SHA1 Message Date
Rahul Patel
a68d1b276d Add optional app lock behind biometric or device credential
Implements a full app lock (issue #1313) gating Aurora Store behind the
device biometric or, where unavailable, the screen-lock credential
(PIN/pattern/password) so it also works on TVs and older phones.

- AppLockManager: process-scoped, in-memory lock state so a cold start is
  always locked, with a short background grace timeout to avoid
  re-prompting during the install dialog or the biometric sheet itself.
- AppLockAuthenticator: BiometricPrompt wrapper using
  BIOMETRIC_STRONG | DEVICE_CREDENTIAL on API 30+ and
  setDeviceCredentialAllowed on older releases, plus an enrollment check.
- ComposeActivity (now a FragmentActivity) gates content via a three-state
  machine (AUTHENTICATING/LOCKED/UNLOCKED); the authenticating state shows
  a blank surface behind the prompt so dismissing it never flashes the
  lock card. Re-locks on return past the timeout and sets FLAG_SECURE
  while locked.
- Toggle lives on a dedicated Security preference screen, reached from
  Settings like the other preference entries.
2026-05-30 15:25:27 +05:30
Rahul Patel
db9a7723a8 Fall back to session installer when chosen installer is unavailable
Address #1386

The Shizuku branch of getPreferredInstaller() already fell back to the
session installer, but the guard hasShizukuPerm() called
Shizuku.checkSelfPermission(), which throws when the binder is not alive
(Shizuku disabled). The exception escaped before the fallback could run,
so installs failed instead of falling back.

- Guard hasShizukuPerm() on Shizuku.pingBinder() and swallow failures so
  it returns false (instead of throwing) when Shizuku is unavailable,
  letting the existing fallback run. This also fixes canInstallSilently().
- Detect when any chosen installer resolves to the default and optionally
  inform the user via a toast, gated by notifyOnFallback so cancel/remove
  callers stay silent while real install paths surface it.
2026-05-30 05:58:53 +05:30
Rahul Patel
7d87a14c89 Harden download routine: storage checks, single verification, URL expiry
- Check free space before downloading (only the not-yet-fetched bytes) and, on
  Android O+, use StorageManager.getAllocatableBytes/allocateBytes so the system
  can evict its cache; fail fast with a clear message instead of dying mid-write.
  SessionInstaller sets a SessionParams size hint so staging can reserve space
  too.
- Verify each APK at most once: files already verified during the download pass
  are skipped in the final verification gate. Prefer SHA-256 and log SHA-1
  fallback.
- An expired download URL (403/410) now clears the stored file lists and retries,
  re-purchasing fresh URLs instead of repeatedly failing on the dead one.
- Cancel promptly mid-file rather than only between files, and cancel copyTo's
  progress timer in a finally to avoid leaking the timer thread.
- Download.canInstall now requires a real .apk on disk; DownloadStatus
  finished/running are Sets.
2026-05-30 00:49:04 +05:30
Rahul Patel
03638ca84c Track the install phase with INSTALLING/INSTALLED download states
A download row previously stopped at COMPLETED and never reflected whether the
app actually installed. Add INSTALLING/INSTALLED states driven by a central
installer-event observer in DownloadHelper:
- COMPLETED -> INSTALLING on the installer's first progress event
- -> INSTALLED on success (row kept so the APK can still be exported)
- a failed install reverts INSTALLING -> COMPLETED so it can be re-installed
  without re-downloading

Consumers that branched on COMPLETED are updated (App Details state, MicroG
status mapping, Downloads list icon). downloadStatus is stored as TEXT so no
schema migration is needed.
2026-05-30 00:37:05 +05:30
Rahul Patel
d13d50e442 Surface self-updates through the regular updates list
Fold Aurora Store's self-update back into the existing update pipeline
instead of a dedicated sheet/viewmodel/helper. The feed entry is mapped
to a regular App and added to the update list, reusing the standard
download + install path; it is never auto-installed silently.

- Add a dedicated "Self-update" section in the Updates tab with the
  app-details navigation disabled (it's served from the Aurora OSS feed).
- Gate eligibility via PackageUtil.isSelfUpdateSupported(): vanilla/preload
  flavors, not debug, not F-Droid (huawei excluded by flavor).
- Add a build-aware Settings toggle as the opt-out, removing the row
  immediately when disabled.
- Exempt nightly self-updates from deleteInvalidUpdates (static version
  code) and drop any stale self-update row when none is offered, so a
  phantom update doesn't linger after a self-install.
2026-05-29 23:28:09 +05:30
Rahul Patel
eada663bfb compose: use ic_refresh icon on retryable error placeholders 2026-05-29 01:31:48 +05:30
Guzleon
a3c31780c3 Translated using Weblate (Spanish)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/es/
2026-05-27 16:11:41 +02:00
cyberboh
bc5c694844 Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/id/
2026-05-27 16:11:38 +02:00
Priit Jõerüüt
4354be5559 Translated using Weblate (Estonian)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/et/
2026-05-27 16:11:36 +02:00
jonnysemon
9efdc5ffb6 Translated using Weblate (Arabic)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ar/
2026-05-25 20:11:40 +00:00
Mirosław Żylewicz
e3d1f50de6 Translated using Weblate (Polish)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pl/
2026-05-25 20:11:39 +00:00
Edgars Andersons
9bb7e46a96 Translated using Weblate (Latvian)
Currently translated at 90.6% (483 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/lv/
2026-05-25 20:11:38 +00:00
AO yahoe.001
2e60707820 Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-05-24 20:11:39 +02:00
ssantos
c2aa6444e7 Translated using Weblate (Portuguese)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pt/
2026-05-24 20:11:37 +02:00
jonnysemon
097dd47437 Translated using Weblate (Arabic)
Currently translated at 94.3% (503 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ar/
2026-05-24 20:11:35 +02:00
Mirosław Żylewicz
57fa52893e Translated using Weblate (Polish)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pl/
2026-05-24 20:11:33 +02:00
Mirosław Żylewicz
57a7c964df Translated using Weblate (Polish)
Currently translated at 99.2% (529 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pl/
2026-05-23 17:12:26 +02:00
AO yahoe.001
7d2650e844 Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-05-23 17:12:23 +02:00
Mickaël Binos
67688775a7 Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-05-23 17:12:22 +02:00
Sylvain Pichon
c7b552924c Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-05-23 17:12:20 +02:00
Besnik Bleta
c8bf4c168b Translated using Weblate (Albanian)
Currently translated at 99.2% (529 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/sq/
2026-05-23 17:12:18 +02:00
大王叫我来巡山
c5d2c57577 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/zh_Hans/
2026-05-23 17:12:14 +02:00
VfBFan
23fc54db30 Translated using Weblate (German)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/de/
2026-05-23 17:12:10 +02:00
Arif Budiman
532602a465 Translated using Weblate (Indonesian)
Currently translated at 99.6% (531 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/id/
2026-05-23 17:12:04 +02:00
Ghost of Sparta
df552982cc Translated using Weblate (Hungarian)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/hu/
2026-05-23 17:11:55 +02:00
Dan
77c15431cf Translated using Weblate (Ukrainian)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/uk/
2026-05-23 17:11:46 +02:00
Fjuro
9b7a47b62c Translated using Weblate (Czech)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/cs/
2026-05-23 17:11:44 +02:00
LucasMZ
491e8812b5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pt_BR/
2026-05-23 17:11:38 +02:00
ojppe
74699ec0e7 Translated using Weblate (Dutch)
Currently translated at 100.0% (533 of 533 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/nl/
2026-05-23 17:11:34 +02:00
Rahul Patel
d5bc58c98b Merge branch 'patch-1' into 'master'
Edited the about section with the account requirement.

See merge request AuroraOSS/AuroraStore!512
2026-05-20 15:05:03 +05:30
vdbhb59
a17fb8c82f Edited the about section with the account requirement. 2026-05-20 15:05:02 +05:30
Rahul Patel
fa5bec4e60 Merge branch 'dev' into 'master'
dev

See merge request AuroraOSS/AuroraStore!568
2026-05-20 12:29:46 +05:30
Rahul Patel
0493075783 installed/blacklist: add sort & filter sheet + dedicated list item [1/2]
Share a sort/filter sheet between InstalledScreen and BlacklistScreen via
new commons module (SortFilterState + SortFilterSheet + applyFilter/applySort
on InstalledAppMeta), persisted per-screen. InstalledScreen renders a new
InstalledAppListItem that surfaces size, last-update, and installer instead
of Play-listing extras. Blacklisted rows now desaturate their icons.
2026-05-20 03:43:36 +05:30
vcodesai
77124254e3 Translated using Weblate (Greek)
Currently translated at 99.5% (484 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/el/
2026-05-19 20:14:31 +00:00
Rahul Patel
5c6bcd6361 compose: housekeeping 2026-05-19 16:40:37 +05:30
Rahul Patel
8f0bf55714 updates: granular installer filters + advanced-section move
- New SourceFiltersScreen with All toggle + add/remove of specific
  installer package names. Backed by PREFERENCE_FILTER_INSTALLERS
  (Set<String>); PREFERENCE_FILTER_AURORA_ONLY preserved as the All
  switch for backward compat.
- UpdateWorker reads installer via getInstallSourceInfo (R+) / falls
  back to deprecated getInstallerPackageName below.
- UpdatesPreferenceScreen: "Filter F-Droid apps" moved to Advanced;
  "Filter apps from other sources" becomes a navigation row to the
  new sub-screen with a state summary.
2026-05-19 12:14:59 +05:30
Rahul Patel
106779737c updates: switch frequency slider to discrete preset chooser
Replace the 1-24h slider with a SingleChoiceDialog listing 7 presets
(3h, 6h, 12h, 24h, 3d, 7d, 15d). Storage stays as an Int hour count
under the same preference key, so old values keep working; off-preset
values display as the nearest preset but are only overwritten when the
user picks something new.
2026-05-19 12:14:59 +05:30
Rahul Patel
1e191e13c8 updates: revamp updates UX
- Group updates into main / approval-required / incompatible / ignored
- New ignored_update table (v8) with per-version skip support
- isIncompatible flag on pristine system apps for HyperOS / GrapheneOS (v7)
- requiresOwnershipTransfer() runtime check on Android 14+
- Rename AppMenuSheet -> AppUpdateSheet; drop MinimalApp, nav carries Update
- Trim AppUpdateItem (no changelog dropdown / long-click)
- Fix DownloadHelper.downloadsList recomposition flicker (stable StateFlow)
- ExportWorker is now download-only
2026-05-19 12:14:59 +05:30
Rahul Patel
59d297386c compose: trim themes, attrs and gradle deps for compose-only UI
Drops the legacy AuroraTheme styles, custom attrs and now-unused
styles_widget/styles_text overlays. Updates the dark/light themes,
strings, arrays, dimens and colors to match what the Compose screens
consume. Adds ic_logo_alt and tweaks the launcher/logo drawables.
Trims gradle dependencies tied to the removed Fragment/Epoxy stack.
2026-05-19 12:14:44 +05:30
Rahul Patel
ac9eb055e4 legacy: remove XML layouts, menus and preference graphs
Deletes res/layout/*, res/menu/*, the mobile_navigation graph,
preference_*.xml screens, and the fade in/out anims plus the
material-switch color selector. The Compose screens own all of
this rendering now.
2026-05-19 12:14:28 +05:30
jonnysemon
6c9f80ad7d Translated using Weblate (Arabic)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ar/
2026-05-18 07:11:37 +02:00
Mirosław Żylewicz
7a0d2afea7 Translated using Weblate (Polish)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pl/
2026-05-18 07:11:36 +02:00
Andrey
72b6ae18b4 Translated using Weblate (Russian)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ru/
2026-05-18 07:11:35 +02:00
cyberboh
435ba7400c Translated using Weblate (Indonesian)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/id/
2026-05-18 07:11:34 +02:00
Priit Jõerüüt
1e76c24fd5 Translated using Weblate (Estonian)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/et/
2026-05-18 07:11:32 +02:00
439JBYL80IGQTF25UXNR0X1BG
63a1581ff3 Translated using Weblate (Russian)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ru/
2026-05-17 00:12:21 +02:00
Mato
1905f5db8b Translated using Weblate (Slovak)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/sk/
2026-05-17 00:12:21 +02:00
Ghost of Sparta
a724937170 Translated using Weblate (Hungarian)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/hu/
2026-05-15 15:11:41 +02:00
LucasMZ
f8cb9d7271 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pt_BR/
2026-05-15 15:11:40 +02:00
AO yahoe.001
63aa3a2b5b Translated using Weblate (French)
Currently translated at 100.0% (486 of 486 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-05-15 15:11:39 +02:00