Load asset metadata on Dispatchers.IO and publish the asset list and file details as one lifecycle-aware UI state.
Remove refresh-key workarounds, await reloads before downloads, and keep the content composable stateless.
Clear visible delays immediately, but move the per-profile MMKV reset to the existing I/O coroutine. Finish the reset before starting the test service so newly reported results cannot be erased.
* fix: extend bottom bar background and content to screen edge for edge-to-edge
* Extract NavigationBarsSpacer and navigationBarsBottomPadding to reduce duplicate code
* Rename navigationBarsBottomPadding to NavigationBarsBottomPadding for naming consistency
* Localize runtime-generated UI text
Keep connection-test and status data locale-neutral until the UI formats it, and localize delay units at their Compose presentation boundary.\n\nShow stable localized failures while retaining diagnostic exceptions in Logcat. Clarify routing rule matching and subscription entry/exit proxy behavior at the relevant UI call sites, and remove the now-unused core error resources.
* Fix Compose resource lookup in routing editor
* Adjust string
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
* Refine existing locale translations
Carry over the standalone wording and translation corrections from the combined localization audit across all nine maintained catalogs.
Keep identifiers, order, placeholders, and metadata unchanged. Exclude resource additions, removals, and wording that depends on locale API, connection-result, routing layout, subscription proxy, delay-unit, or core code changes.
* Clarify profile export actions
Distinguish copying a profile share link from copying the fully generated configuration in every maintained locale.
Use AndroidX and framework per-app locale APIs, migrate the existing language preference, and expose the generated locale config to Android 13+ settings.
Resolve resources through the selected app locale in application, ViewModel, tile, and service contexts. Replace the framework OK and Cancel labels directly implicated in the wrong-language report, and refresh retained localized UI state after locale changes.
* fix: localize UI and accessibility text
* fix: translate BQI core errors
* fix: correct Bakhtiari orthography and wording
Replace the remaining Persian confirmation fallbacks, correct stale or mismatched UI meanings, and normalize established Bakhtiari terms without translating xray-core identifiers.
Primary source: Erik Anonby and Ashraf Asadi, Bakhtiari Studies II: Orthography (2018), sections 6.1.1, 6.8.1, 6.8.2, 6.8.7, and 6.8.9. https://www.diva-portal.org/smash/get/diva2%3A1231755/FULLTEXT02.pdf
The standard recommends that "Arabic letters be retained for Bakhtiari words borrowed from Persian" and reports that speakers view soft d as "a defining feature of how the language is pronounced."
Lexicon and phonology source: Erik Anonby and Ashraf Asadi, Bakhtiari Studies: Phonology, Text, Lexicon (2014). https://uu.diva-portal.org/smash/record.jsf?pid=diva2%3A758171
Historical corroboration: D. L. R. Lorimer, The Phonology of the Bakhtiari, Badakhshani, and Madaglashti Dialects of Modern Persian (1922). https://archive.org/details/phonologyofbakht06loriuoft
* fix: keep protocol description technical
* fix: keep Logcat diagnostics unlocalized
* getRemoteIPInfo
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
* Optimize app picker filtering and selection
Avoid per-query string copies and repeated state persistence or service restart requests during bulk selection. Preserve the active filter while apps load, calculate automatic and imported selections away from the main thread, and keep upstream's asynchronous Coil icon pipeline unchanged.
* Remove enabled: Boolean = true
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
* Use typed actions for application menus
* Use Material 3 navigation drawer components
Replace the custom drawer rows with NavigationDrawerItem and route system Back through Compose so an open drawer closes before the task is backgrounded.
* Polish typed menus and drawer integration
- Remove `appIcon: Drawable` from `AppInfo` to significantly reduce memory footprint and prevent OOM.
- Replace synchronous icon loading in `AppManagerUtil` with on-demand asynchronous loading.
- Implement custom `AppIconFetcher` using `appicon:` URI scheme for system icon retrieval.
- Use localized `fetcherFactory` in `AppListItem` to keep loading logic isolated and minimize global side effects.
- Improve app list scanning speed by skipping icon extraction during initial load.
* fix(speed): fix speed counters showing 0 for custom subscription profiles
Fix an issue where proxy speed counters in the notification widget remain at 0 B/s for custom subscription profiles.
1. NotificationManager: Accumulate traffic stats for all non-direct and non-blocked outbound tags (stat.tag != TAG_BLOCKED) into proxy stats. Custom outbound tags in subscription JSONs (e.g., 'node-1', 'vless-hk', 'auto') are now correctly accounted for instead of being ignored.
2. CoreConfigManager: Ensure stats and policy (statsOutboundUplink / statsOutboundDownlink) sections are injected into custom JSON configurations when PREF_SPEED_ENABLED is enabled, and stripped when disabled.
* Comments added