* Fix snackbar positioned low when virtual navigation
* Fix checkupdate page not display updating information
* Fix first snackbar short in consecutive message
* fix snackbar the RESUMED show timing
Refactored MainActivity and its Compose UI components to use a single
onAction: (MainAction) -> Unit callback. This significantly simplifies
component signatures and centralizes interaction logic.
- Updated MainContract.kt to include all UI-triggered actions.
- Modified MainScreen and sub-components (TopBar, BottomBar, Drawer, etc.)
to use the unified onAction dispatcher.
- Implemented a centralized action handler in MainActivity to dispatch
between ViewModel and Activity-specific tasks.
- Removed redundant ImportConfigViaSub action.
- Moved QR code generation state into MainUiState for MVI consistency.
This change reduces parameter drilling and improves maintainability of
the main interface.
Improve settings UX consistency across Compose screens: disabled setting text now uses proper muted alpha for title/description, domain strategy and geo source pickers now use shared `SettingsListItem` instead of custom click/dialog state, routing rule row UI was extracted into a reusable composable, and several settings toggles were un-gated so they can be changed outside VPN-only conditions.
Move manual subscription updates to WorkManager-based background jobs and simplify scheduler logic by handling auto-update checks in `scheduleOne`. Add post-update server testing support with optional invalid-node cleanup and sorting, plus MMKV/AngConfig helpers to remove multiple servers and reorder subscription servers by test delay. Update the subscriptions UI flow and zh-TW strings to reflect background execution and new auto-test options.
- Implement BaseViewModel to centralize loading state and UI event handling.
- Migrate all ViewModels (Main, Backup, Logcat, etc.) to inherit from BaseViewModel.
- Convert MainViewModel from AndroidViewModel to standard ViewModel using global app context.
- Standardize UI events using ViewModelEvent/BaseViewModelEvent sealed interfaces.
- Simplify loading logic with launchLoading helper and direct toast notifications.
- Cleanup redundant loading/toast boilerplate code across the application.
- Update LogcatActivity to observe the unified isLoading state.
- Create BaseViewModel to encapsulate common UI state (isLoading) and logic (toasts, finishing activity).
- Implement ViewModelEvent and BaseViewModelEvent for standardized UI communication via SideEffects.
- Move core business logic (I/O, Zip, WebDAV) from BackupActivity to BackupViewModel.
- Standardize code naming conventions and update documentation to English.
- Improve Activity purity by delegating state management and background tasks to the ViewModel.
* add composeui dependencies and component
* remove multidex
* BaseComponentActivity and HelperBaseComponentActivity
* migrate AppPicker/PerAppProxy Activity and use Snackbar
* migrate AboutActivity to composeui
* migrate BackupActivity to composeui
* migrate CheckUpdateActivity to composeui
* migrate Logcat to composeui
* migrate Scanner to composeui and camerax
* migrate sc start/stop/switch to compose
* migrate TaskerActivity to composeui
* migrate UrlSchemeActivity to composeui
* migrate UserAsset to composeui
* migrate ServerActivity to composeui
* migrate ServerCustomConfigActivity to composeui
* migrate ServerGroupActivity to composeui
* migrate ServerProxyChainActivity to composeui
* migrate SettingsActivity to composeui
* migrate SubEdit/SubSetting Activity to composeui
* migrate routingEdit/routingSetting Activity to composeui
* migrate MainActivity to composeui
* clode clean and chore change
* Fix
* add scrollbar
* fix imePadding
* fix FormDropdownField scrollbar and ime conflict
* update servercostomconfigactivity with linenum and scrollbar
* fix AppPickerActivity filter wrong toogle
* fix App theme xml
* fix scrollbar not work in SettingsActivity
* final inset
* fix servercustomconfigactivity when open not begin line
* try optimize mainactivity performance
* use launch intent and fix not refresh when second edit use equals
* fix a ghost error
* update string
* update miss string
* optimize mainactivity and mainviewmodel
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
- Fixed completely inaccurate and literal translations
- Added missing string translations for newer features
- Improved technical terminology to accurately reflect standard VPN and networking concepts in Persian
- Rewrote the overall text for better readability and a more natural user experience.