1519 Commits

Author SHA1 Message Date
Imran Remtulla
78be901e92 Set parallel downloads default to true; hide action banner when fewer than 2 pending updates/installs 2026-07-20 01:13:05 +01:00
Imran Remtulla
e68087b558 Reduce padding/spacing for ToggleTile and GeneratedForm in modal dialogs
- Add optional  parameter to ToggleTile (default false)
- Add optional  parameter to GeneratedForm (default false)
- GeneratedFormModal now passes  to its inner GeneratedForm
- Set  on direct AlertDialog + GeneratedForm in import_export.dart
- Reduce non-tile mode row spacing from 24 to 8
2026-07-19 23:26:01 +01:00
Imran Remtulla
dbf9a1047c Tweak category component 2026-07-19 17:58:15 +01:00
Imran Remtulla
e8bc3fbee9 Resolve real download URL via assetUrlPrefetchModifier before probing download size, fixing wrong sizes for sources like Uptodown (#3104) 2026-07-19 17:41:03 +01:00
Imran Remtulla
444312af78 Revert GeneratedFormModal tileMode default to false, fixing changelog dialog regression (#2039) 2026-07-19 17:30:01 +01:00
Imran Remtulla
9be6ba932e Slightly increase version/changelog area text size (#2039) 2026-07-19 17:25:15 +01:00
Imran Remtulla
9e2719a8c0 Restrict highlight setting to version/changelog label only; use custom _VersionLabel widget instead of HighlightableButton; revert HighlightableButton to original behaviour; fix 'Download release assets' button with plain TextButton (#2039) 2026-07-19 17:23:06 +01:00
Imran Remtulla
cbfab164e4 Revert skip-confirmation-dialog for update-only banner clicks; always show per-app checkbox dialog (#3107) 2026-07-19 16:26:22 +01:00
Imran Remtulla
e4fca8b762 Merge remote-tracking branch 'origin/main' into dev 2026-07-19 16:18:26 +01:00
Imran Remtulla
0ede820cdf Move download size into update/install button label, only probe size when action is available, standardize ConnectedCard content padding (#3107) 2026-07-19 16:08:24 +01:00
Imran Remtulla
9cc782f459 Sub-form entries as individual connected cards with positional radii, inline add/remove buttons (#3107) 2026-07-19 15:36:36 +01:00
Imran Remtulla
89e2fc247f Add trailingKey support to GeneratedFormTextField, fix add/search button state with Row layout, include _urlValid in trailingKey hash (#3107) 2026-07-19 15:23:51 +01:00
Imran Remtulla
b74e1bf966 Unify ToggleTile: strip inner CardTile, replace _FormSwitchRow, zero tileMode padding, simplify _fieldTile to ConnectedCard (#3107) 2026-07-17 21:43:53 +01:00
Imran Remtulla
05dd135665 Unify form input styling: global borderless filled theme, rename Settings* components to generic names, merge settings_widgets.dart into ui_widgets.dart, convert SegmentedButtons to DropdownMenus, add per-app checkbox bulk update dialog, compact SliverAppBars, inline trailing icon buttons, newline-terminated error messages for breathing room, ConnectedCard defaults to zero padding (#3107, #3100) 2026-07-17 21:33:26 +01:00
Imran Remtulla
78cc9042be Replace bulky SliverAppBar.large headers with compact SliverAppBar; add 3-way action banner setting (All/Updates/None); skip confirmation dialog for update-only banner clicks; replace all-or-nothing obtain dialog toggles with per-app checkbox list (#3107, #3100) 2026-07-17 12:16:02 +01:00
Ilya Nikitenkov
10bc1dc52e fix: resolve 400 error for RuStore downloads
Add required 'ruStoreVerCode' header to API requests and update
the request handling logic to comply with RuStore API changes.
2026-07-16 01:56:40 +03:00
Imran Remtulla
001b41683d Fix spacing, source names, and redundant button
- Remove double top padding on add-app and import-from-URL-list pages:
  content area no longer adds MediaQuery.padding.top since the
  AppBar/SliverAppBar already accounts for system bar insets.

- Fix source names showing raw translation keys in group headers and
  filter dropdown. Eight sources used name = tr(key) in their
  constructor, which resolved before translations loaded at startup.
  Changed to @override String get name => tr(key) so resolution is
  always lazy. Store sourceIdentifier (stable) instead of name in
  AppInMemory.sourceType; resolve to display name at presentation
  time via a lookup map built from SourceProvider.sources.

- Remove redundant crowdsourced-app-configs button from the settings
  page app bar (an ActionChip on the add-app page already provides
  the same link).
2026-07-15 20:53:16 +01:00
Imran Remtulla
3228a2a42c Fix keyboard closing on add-app additional settings fields
_generateFormState._computeItemsHash included item.value for
switches and dropdowns (only text fields were excluded). On the
add-app page, _buildSourceSpecificForm mutates item.value from
additionalSettings on every rebuild, so any value change via a
related onValueChanges callback would alter the hash, trigger
_initFormData, dispose all TextEditingControllers, and kill the
keyboard.

Hash now uses only key + runtime type for all item kinds -- form
re-initialization is driven by widget key changes (source
switch), not value fluctuations.
2026-07-15 18:25:16 +01:00
Imran Remtulla
8cbbb522b9 Tweaks
- Add install/update selected apps button to multi-select actions menu that reuses existing obtain dialog logic.
- Remove back buttons from additional options, import URL list, and
  app logs pages. Keep close button in two-pane layout only.
- Reduce top padding on app detail page
- Update screenshots
2026-07-15 17:56:35 +01:00
Imran Remtulla
7ab50177f7 Fix UI unresponsiveness during update checks (#3043)
- Memoize findStandardFormatsForVersion with bounded 4096-entry cache,
  and deduplicate the 436 generated version regex patterns. This
  collapses the per-GitHub-app sort from ~500K regex evaluations to
  ~100, and caches results across all version reconciliation calls.

- Optimize GitHub _sortGitHubReleases: date sort (the default) now
  skips regex computation entirely; smartname sorts precompute formats
  once per release instead of re-evaluating per sort-comparison pair.

- Inline app list computation into AppsPage.build() instead of using
  a three-layer caching system (context.select, pipelineSignature,
  _computeListData). With memoization making rebuilds ~2ms, the
  complexity of signature hashing and cache field management is
  unnecessary.

- Cache getAppsDir() to avoid redundant platform-channel calls per
  app during saveApps batches.
2026-07-15 17:04:37 +01:00
Imran Remtulla
6a68966718 Try fixing refresh performance (3043) + UI fixes 2026-07-15 11:22:06 +01:00
Imran Remtulla
e223028237 Fix UI unresponsiveness during update checks with time-based save throttling instead of count-based batching (#3043) 2026-07-15 10:28:59 +01:00
Imran Remtulla
5dfbf10499 Make padding/spacing more consistent 2026-07-15 10:02:12 +01:00
Imran Remtulla
dfdc72a999 Remove unnecessary padding on the bottom of the add page 2026-07-15 09:52:44 +01:00
Imran Remtulla
a082e8e545 Fix settings page overlapping system navigation bar 2026-07-15 09:51:24 +01:00
Imran Remtulla
41b6413b31 Fix FAB overlapping last app entry with dynamic bottom spacer (#3086) 2026-07-15 09:46:56 +01:00
Imran Remtulla
a74bf9a145 Fix multiple tags gradient rendering where rightmost tag color incorrectly stretched across entire bubble (#3086) 2026-07-15 09:23:24 +01:00
Imran Remtulla
4de395454f - Removed tabbed UI (#3059, #3069)
- Improved update check UI performance (#3043)
- Improved app list loading UI (#2666)
- Other minor UI tweaks
- Improve install result detection for external installers in foreground
2026-07-15 00:10:39 +01:00
Imran Remtulla
fc3f6dc937 Return all install-capable activities per app for external installer selection and show grouped expandable picker with deduplication, consistent single/multi-intent visuals, and activity name shown in subtitle only when multiple intents exist (#3067) 2026-07-14 20:46:58 +01:00
Imran Remtulla
b396db35fc Prevent background retry tasks from spawning duplicate install tasks; only the initial check runs the install phase 2026-07-14 15:07:00 +01:00
Imran Remtulla
4442bb478f Make showActionBannerForUpdateOnly true by default 2026-07-14 13:16:18 +01:00
Imran Remtulla
dafecfe66e Fix download progress not updating on app list tiles because tileChild was computed outside ValueListenableBuilder 2026-07-14 09:37:10 +01:00
Imran Remtulla
bf67115464 Add notification permission request on first non-TV launch and declare POST_NOTIFICATIONS in manifest (#3070) 2026-07-14 09:37:03 +01:00
Imran Remtulla
6320ab94c1 Add HandshakeException retry with staggered random delays for concurrent TLS failures during batch update checks (#3008) 2026-07-14 09:36:55 +01:00
Imran Remtulla
148ce48b0b Fix blank search query being blocked on add-app page, restoring ability to list all apps in F-Droid third-party repos (from #3000) 2026-07-14 08:51:54 +01:00
Imran Remtulla
09563157f4 Place TW zh above zh locale 2026-07-13 01:29:10 +01:00
Imran Remtulla
65b16c5b7b Fix pt-BR locale auto-detecting as pt-PT and reverting to pt-PT after app restart due to easy_loalization linear matching preferring the first language-only match over the country-specific entry. Reorder supportedLocales so pt_BR comes before pt, and explicitly setLocale when forcedLocale is configured to override any internal misresolution (#3052) 2026-07-12 21:34:31 +01:00
Imran Remtulla
9db6e52b20 Fix force-all update checks ignoring only-check-installed-or-track-only-apps setting (#3063) 2026-07-12 20:47:42 +01:00
aloires
f959c4aa20 fix(search): use sourceIdentifier instead of name for overrideSource after search
When selecting a result from the search dialog, runSearch() passed the
source's translated display name as overrideSource, but getSource()
matches against sourceIdentifier (the Dart class name). Since many
sources now use tr() for their name, these values don't match (e.g.
"F-Droid" vs "FDroid", "Forgejo (Codeberg)" vs "Codeberg"), causing
getSource() to throw UnsupportedURLError silently, which set pickedSource
to null and disabled the Add button with no error feedback.

This is the same kind of fix as a5aa5212 which addressed the override
dropdown.
2026-07-13 01:20:52 +08:00
Imran Remtulla
6ae36c41ff Add disable-swipe setting and always-use-phone-layout option (#3039)(#3045). Pin app-detail actions bar to bottom of scroll (#3044). Fix settings scroll on wide/trackpad devices (#3046). Fix TV navigation regressions across all dialogs, text fields, search bar, radio picker, and app list checkboxes (#3053). Deduplicate TV text-field focus pattern into public TvTextFieldFocus widget. 2026-07-12 04:21:36 +01:00
Imran Remtulla
68a7a21746 Add disable-swipe setting and always-use-phone-layout option (#3039)(#3045). Pin app-detail actions bar to bottom (#3044). Fix settings scroll on wide/trackpad devices (#3046). 2026-07-11 19:02:53 +01:00
Imran
7f9a000989 Merge pull request #3033 from Jursin/main
i18n: localize app source names, supplement Chinese translations
2026-07-09 20:43:07 +01:00
Imran Remtulla
4fd0efc5e6 Restore determinate progress bar during app list refresh (#3029) 2026-07-09 20:37:19 +01:00
Imran Remtulla
579e77233d Apply German translations from issue, add lowerCaseUnlessLang helper (#3030) 2026-07-09 19:37:43 +01:00
Imran Remtulla
dd2c9bb149 Fix external cache directory and app_data directory crashes on custom ROMs by falling back to internal storage (#3020) 2026-07-09 17:15:39 +01:00
Jursin
63948ddf11 i18n: localize app source names, supplement Chinese translations
- Replace hardcoded English source names with tr() in 8 app_sources
- Add huaweiAppGallery & telegramApp keys across all locale files
- Translate the English placeholder text into Chinese in zh.json
- Optimize Chinese punctuation and typography in zh.json
- Add Dhizuku to Shizuku-related strings in zh.json
2026-07-09 15:20:16 +08:00
Imran Remtulla
e43455173a feat: tablet UI improvements (#1466)
- Lower two-pane layout threshold from 900dp to 600dp so portrait
  tablets also get the side-by-side apps + detail layout
- Move Add FAB from rail leading (top) to trailing (bottom) with a
  stable spacer when hidden so center-aligned destinations don't jump
- Replace Add FAB with Actions FAB in same position during selection
  mode, mirroring the mobile FAB-swap behavior
- Suppress AppsPage's own Actions FAB in two-pane mode so it doesn't
  duplicate the rail's FAB
- Clear selection state when switching away from the apps page so the
  Add FAB reappears and the Actions FAB goes away on return
- Center-align rail destinations on tablets per M3 Expressive guidelines
2026-07-08 20:21:45 +01:00
Imran Remtulla
b485ad59ab perf: memoize app list pipeline, preload icons, fix form validation
- apps.dart: cache filtered/sorted/grouped app list results keyed by
  pipeline signature, avoiding O(n) recomputation on every rebuild
  when only progress ticks or selection changes fire

- add_app.dart: skip parent rebuild when URL text changes without
  switching the detected source; track _urlValid separately so the
  Add button correctly enables/disables; _prevValid prevents early
  return from skipping setState when validity flips

- generated_form_renderer.dart: replace broken validateTextField
  which couldn't find TextFormField inside TypeAheadField wrappers
  with a _fieldKeys list for direct FormFieldState.isValid checks

- apps_provider_lifecycle.dart: preload app icons from disk cache
  after initial loadApps() so scrolling never triggers disk I/O
2026-07-08 19:57:39 +01:00
Imran Remtulla
a5aa5212c1 Fix source override dropdown sending wrong identifier to getSource 2026-07-08 16:30:22 +01:00
Imran Remtulla
ee30e860bd Fix external storage crash on custom ROMs by falling back to internal storage [3003, 3020] 2026-07-08 16:00:08 +01:00