Commit Graph

5143 Commits

Author SHA1 Message Date
VfBFan
5150369815 Translated using Weblate (German)
Currently translated at 100.0% (582 of 582 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/de/
2026-06-04 12:02:03 +02:00
alon3141592653589793
66992e05e6 Translated using Weblate (Hebrew)
Currently translated at 86.0% (482 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/he/
2026-06-03 09:04:36 +00:00
Edgars Andersons
28a8cd4faa Translated using Weblate (Latvian)
Currently translated at 87.5% (490 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/lv/
2026-06-03 09:04:35 +00:00
Yago Raña Gayoso
55b723e0b9 Translated using Weblate (Galician)
Currently translated at 79.8% (447 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/gl/
2026-06-03 09:04:34 +00:00
Andrey
14dde879d4 Translated using Weblate (Russian)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ru/
2026-06-03 09:04:33 +00:00
Igor Sorocean
eadaf7b7d1 Translated using Weblate (Romanian)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ro/
2026-06-03 09:04:33 +00:00
Rahul Patel
192eec4173 Merge branch 'weblate-aurora-store-aurorastore-translations' into 'master'
Translations update from Hosted Weblate

See merge request AuroraOSS/AuroraStore!580
2026-06-03 01:00:38 +05:30
Rahul Patel
2503a01182 Improve theme uniformity across OEM devices
- Make semantic colors and the page indicator theme-aware so they keep
  adequate contrast in dark mode instead of using fixed values.
- Seed a full brand color scheme (#6C63FF) for devices without dynamic
  color (Android 11 and below) instead of falling back to Material's
  purple baseline; align the XML AppTheme accent accordingly.
- Stop manually forcing transparent system bar colors in the Compose
  theme; those setters are no-ops on Android 15+ and stripped the system
  contrast scrim, causing the half-gray navigation bar on One UI. Keep
  syncing the bar icon appearance with the active theme.
- Add a dynamic-color opt-out toggle (Android 12+), defaulting off on
  One UI where Samsung's palette extraction tends to look off.
2026-06-03 00:38:58 +05:30
Rahul Patel
98093c8f13 Fix deep link gate being skipped when Aurora is already running
DeepLinkConfirmActivity shared the default task affinity with the main
Aurora task, so when the app was already running the system brought the
existing task to the foreground instead of launching the gate. Giving
the trampoline an empty task affinity decouples it from the main task,
so the confirmation sheet and target listing load every time.
2026-06-03 00:38:58 +05:30
Rahul Patel
753c7fa06a Add user reviews to AppDetailsScreen
Resolves #1494

Allow signed-in users to rate, review, edit, and delete an installed app's
review directly from its details screen. The form is hidden from anonymous
accounts and only shown for installed apps.

Submitted reviews are cached locally in a new Room "review" table (db v9) so
they appear immediately while Google publishes them, and are reconciled with
the Play API: edits made on the Play Store are mirrored, and a review deleted
there (or via the new delete action) is removed locally. Deletion relies on
gplayapi 3.6.3.
2026-06-03 00:38:58 +05:30
Rahul Patel
4a0c1101f4 Clean up stale self-update state on launch
The install event isn't delivered when the app replaces its own APK, so a
self-update could linger in the Updates list as "installing forever" after the
update completed and the app restarted.

- UpdateHelper: clear a stale self-update row on launch, flavor-aware — nightly
  by its commit-tagged version name (the version code is static), release/preload
  by the version code.
- DownloadHelper: finalize a self-update download stuck in INSTALLING (the commit
  killed the process before it could advance) to INSTALLED on launch.
2026-06-03 00:38:58 +05:30
Rahul Patel
ce04b859fd Distinguish developer and publisher deep links
The deep-link router matched "/apps/dev" as a substring, so publisher
links (/store/apps/developer?id=<name>) were treated as developer-stream
links and failed to resolve. Match the exact action keyword (last path
segment, or host for market:// links) instead, and add a
Screen.PublisherProfile that renders the publisher-search overload of
DevProfileScreen.

Both /dev and /developer links may carry either a numeric developer id
(curated developer stream) or a developer name (publisher search), so
the id is parsed to long to decide which screen to open.

Also drop the now-dead ACTION_VIEW branch from ComposeActivity, since
DeepLinkConfirmActivity owns all external VIEW deep links.
2026-06-03 00:37:23 +05:30
Rahul Patel
e1b8b5ae95 Implement Compose dev profile screen
The DevProfileScreen(developerId) overload was an empty stub, so
play.google.com/store/apps/dev?id= deep links rendered a black screen.
Render the developer's stream bundle via the existing StreamCarousel,
observing DevProfileViewModel for loading, error/retry and per-cluster
pagination.
2026-06-03 00:37:23 +05:30
Rahul Patel
f1064ceab9 Add confirmation gate for external app-listing deep links
Ad networks can exploit Aurora's market:// and play.google.com VIEW
intent-filters to launch the app straight into a listing without user
intent (issue #1450). Route these external deep links through a new
translucent DeepLinkConfirmActivity that shows a Play Store-style
bottom sheet over the launching app; the listing only opens after an
explicit tap, defeating auto-launch regardless of referrer.

- DeepLinkConfirmActivity: resolves the listing, shows the sheet, then
  forwards to ComposeActivity via the Screen parcel (Open) or finishes
  (Cancel). Forwards directly when the user opts out.
- DeepLinkConfirmSheet: bottom sheet matching the existing sheets/
  convention; shows the target id and the launching app when known.
- Move the VIEW intent-filters off ComposeActivity onto the new
  activity, using a transparent edge-to-edge translucent theme.
- Add a "Confirm external links" toggle in Security (default on).
2026-06-03 00:37:22 +05:30
Rahul Patel
cb682f1f0b Add one-click install for favourite apps
Addresses #1508

Add an 'Install all' action to the Favourites screen that bulk-fetches
details and enqueues every installable favourite (skipping already
installed apps and paid apps anonymous accounts can't acquire), gated
behind a confirmation dialog that warns about per-app install prompts.

Show live state on each favourite row: an installed tick that updates
on install/uninstall events, and download/install progress mirroring the
Updates screen. Hide 'Install all' once every favourite is installed.

Treat only non-finished download statuses as in progress on both the
Favourites and Updates rows so a dismissed system install prompt no
longer leaves a row stuck showing 'Installing'.
2026-06-03 00:37:22 +05:30
Rahul Patel
2115ed8479 Add buy flow for paid apps in app details
Resolves #1499

Surface a 'Buy @ price' action on the install error sheet for paid apps
on signed-in accounts, opening the Play Store listing to purchase. For
anonymous accounts, show the price on a disabled install button and
disable manual downloads since paid apps can't be acquired.
2026-06-03 00:37:22 +05:30
VfBFan
72a67e54ff Translated using Weblate (German)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/de/
2026-06-02 10:01:39 +02:00
Besnik Bleta
4828f880af Translated using Weblate (Albanian)
Currently translated at 99.1% (555 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/sq/
2026-06-02 10:01:34 +02:00
Igor Sorocean
ba72e7b274 Translated using Weblate (Romanian)
Currently translated at 93.0% (521 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ro/
2026-06-02 10:01:31 +02:00
LucasMZ
3fcbf3ae69 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pt_BR/
2026-06-02 10:01:28 +02:00
joaooliva
9d5f1e910a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pt_BR/
2026-06-02 10:01:24 +02:00
Guzleon
3224e0f5c3 Translated using Weblate (Spanish)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/es/
2026-06-02 10:01:20 +02:00
Fjuro
2135ecfed0 Translated using Weblate (Czech)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/cs/
2026-06-02 10:01:15 +02:00
439JBYL80IGQTF25UXNR0X1BG
710091e8c9 Translated using Weblate (Russian)
Currently translated at 92.8% (520 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ru/
2026-06-02 10:01:05 +02:00
Mato
1fa3d7bac7 Translated using Weblate (Slovak)
Currently translated at 98.9% (554 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/sk/
2026-06-01 04:01:58 +00:00
AO yahoe.001
44251ab0cb Translated using Weblate (French)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-06-01 04:01:57 +00:00
Sylvain Pichon
e9b10e6f99 Translated using Weblate (French)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/fr/
2026-06-01 04:01:57 +00:00
jonnysemon
4b01bdbf2b Translated using Weblate (Arabic)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ar/
2026-06-01 04:01:56 +00:00
Mirosław Żylewicz
d3273f6f83 Translated using Weblate (Polish)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/pl/
2026-06-01 04:01:56 +00:00
Hakim
8986d22dd8 Translated using Weblate (Malay)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/ms/
2026-06-01 04:01:55 +00:00
Priit Jõerüüt
5a100b755c Translated using Weblate (Estonian)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/et/
2026-06-01 04:01:54 +00:00
Emin Tufan Çetin
b631f5a7ed Translated using Weblate (Turkish)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/tr/
2026-06-01 04:01:54 +00:00
Dan
b6ffdaa578 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/uk/
2026-06-01 04:01:53 +00:00
大王叫我来巡山
d5ffb1f2d5 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/zh_Hans/
2026-06-01 04:01:53 +00:00
Ghost of Sparta
8647b4bbf6 Translated using Weblate (Hungarian)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/hu/
2026-06-01 04:01:52 +00:00
ojppe
79a441be41 Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/nl/
2026-06-01 04:01:52 +00:00
Eder Etxebarria Rojo
29bfd17d79 Translated using Weblate (Basque)
Currently translated at 100.0% (560 of 560 strings)

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/eu/
2026-06-01 04:01:51 +00:00
Hosted Weblate
2e0be54847 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Aurora Store/Android
Translate-URL: https://hosted.weblate.org/projects/aurora-store/aurorastore-translations/
2026-05-31 03:29:29 +00:00
Satoru Gojo
fb8473a402 Added translation using Weblate (Malay) 2026-05-31 03:29:19 +00:00
Mickaël Binos
a3e37f4fcc 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-31 03:29:18 +00:00
AO yahoe.001
71663369e3 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-31 03:29:16 +00:00
Mickaël Binos
58f147fc88 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-31 03:29:15 +00:00
jonnysemon
2632a8321e 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-31 03:29:14 +00:00
Rahul Patel
9f813d965b fix linting issue & add new icon 2026-05-30 18:41:31 +05:30
Rahul Patel
60a6df58c5 Organise notification channels into system-settings groups
Group the five channels under two headings in the system notification
settings so they're easier to navigate: "Downloads & updates" (progress,
installed, updates, export) and "Alerts" (errors and action-required).

Purely organisational; channel importances and behaviour are unchanged.
2026-05-30 18:27:25 +05:30
Rahul Patel
a660983438 Add a Notifications settings screen with a progress toggle
There was no in-app control over notifications. Add a Notifications
preference screen under Settings offering:

- "Show download progress": when off, downloads/updates no longer post
  per-tick progress; a single quiet foreground notification keeps the
  work running in the background (honouring the mandatory FGS rule).
- Deep links into each notification category's system settings (O+) so
  users can tune sound and importance per channel.
- A shortcut to enable notifications when they're turned off at the
  system level, so the screen degrades gracefully.

The download worker reads the progress preference live, keeping its
foreground notification minimal and skipping progress refreshes when
the user has opted out. POST_NOTIFICATIONS is already handled by the
onboarding permission flow, so no duplicate prompt is added here.
2026-05-30 18:17:52 +05:30
Rahul Patel
aa5d3fcc4b Group install and failure notifications under summaries
A bulk update produced one standalone notification per app for both
successes and failures, flooding the shade. Bundle these terminal
notifications into two groups, each with a collapsible summary that
lists the apps via InboxStyle:

- "N apps installed" on the (LOW, silent) installed channel, expiring
  on its own since it's informational.
- "N apps failed" on the (HIGH) alerts channel, persisting until
  handled and carrying a Retry action per app.

Summaries are rebuilt from the live posted notifications rather than
tracked state, so they stay correct across retries, dismissals and
process restarts, and are only posted on Android N+ where the system
actually renders groups.

Retry re-queues the download via a new DownloadRetryReceiver; the
worker resumes from verified files on disk, so retrying an install
failure re-installs without re-downloading.
2026-05-30 18:07:28 +05:30
Rahul Patel
9bd5e3f8e7 Stop per-app download notification chatter during installs
The download worker posted a separate per-app notification for every
internal phase transition, keyed by package hash and distinct from the
ongoing foreground progress notification. In practice this meant:

- a blank, non-dismissable notification while "purchasing" (no branch
  rendered it), and
- a transient "download complete" notice for every app that was then
  immediately replaced by the install-success notification.

During a bulk update this produced a burst of redundant notifications.

Suppress the purchasing/verifying phases (the ongoing progress
notification already conveys activity) and only surface completion when
the user must act on it (apps that can't be installed silently get a
tap-to-install notice). Silently-installable apps now go straight to a
single "installed" notification.

Also clear any stale per-app notification on these phases and on
cancellation, fixing a leak where a cancelled download left its last
notification behind, and refresh the foreground notification to an
"Installing" state so the user sees a clean downloading -> installing
progression instead of a download bar stuck at 100%.
2026-05-30 17:57:50 +05:30
Rahul Patel
012f4dcc26 Restructure notification channels by intent and importance
Notifications were too intrusive: install-success and export sat on
IMPORTANT_HIGH channels and produced heads-up alerts for every app,
while genuine download failures were buried in the IMPORTANCE_MIN
downloads channel where they were easily missed.

Restructure the channels around user intent:

- Download progress -> MIN, silent, no badge
- Installed apps    -> LOW, silent (was HIGH)
- Updates available -> DEFAULT, silent
- App export        -> LOW, silent (was HIGH)
- Errors & alerts   -> HIGH (new, the only heads-up channel)

Failed downloads, installer-status errors and the unarchive auth prompt
now route to the high-importance alerts channel so they aren't lost,
while successful installs/exports stay quiet.

Android ignores importance edits on an already-created channel, so the
install/export channels get new IDs and the retired IDs (including the
folded-in account channel) are deleted on next launch.
2026-05-30 17:54:59 +05:30
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