Conversation
a3831dc to
22c9f13
Compare
Merged
There was a problem hiding this comment.
Pull request overview
Extracts a new :glue Android library module to host shared UI “glue” code (Compose UI, navigation, icons, resources, viewmodels, and utility helpers) as part of the ongoing UI project split (refs #179 / PR #179).
Changes:
- Added
:gluemodule and moved/added shared UI resources (colors/ids) and Compose UI infrastructure (theme, icons, scaffold, navigation). - Migrated many UI classes to reference
com.github.kr328.clash.glue.Rand moved various utilities/viewmodels into:glue. - Centralized Compose opt-ins + Compose dependency wiring in the root
build.gradle.kts, and updated:appto depend on:glue.
Reviewed changes
Copilot reviewed 48 out of 153 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| settings.gradle.kts | Includes the new :glue module in the Gradle build. |
| glue/build.gradle.kts | Declares :glue as an Android library with Compose + serialization and shared dependencies. |
| glue/src/main/res/values/ids.xml | Adds shared view IDs used by glue UI. |
| glue/src/main/res/values/colors.xml | Moves shared color resources (and launcher/banner backgrounds) into glue. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Validator.kt | Adds shared validators for settings/editor inputs. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Uri.kt | Adds a small Uri.fileName helper. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Toast.kt | Adds an Activity.toast(@StringRes) helper. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Service.kt | Adds Context.unbindServiceSilent() helper. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Remote.kt | Adds withClash / withProfile remote-service wrappers with DeadObject retry. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Interval.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt | Adds mainIntent() helper using reflection. |
| glue/src/main/kotlin/com/github/kr328/clash/util/I18n.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Context.kt | Adds Context.logsDir / Context.clashDir paths. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Content.kt | Adds ContentResolver.copyContentTo() helper. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Clash.kt | Adds startClashService() / stopClashService() helpers. |
| glue/src/main/kotlin/com/github/kr328/clash/util/Application.kt | Adds ApplicationObserver + verifyApk() helper. |
| glue/src/main/kotlin/com/github/kr328/clash/util/App.kt | Adds PackageInfo.toAppInfo() mapper. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Color.kt | Adds Compose color tokens for Mihomo theme. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Type.kt | Adds Compose typography/text style definitions. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt | Adds Mihomo Compose theme + preview wrappers. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/MihomoIcons.kt | Introduces MihomoIcons icon namespace. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdb.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdd.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineApps.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineArrowBack.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAssignment.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAttachFile.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineBrightness4.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineClearAll.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineCloudDownload.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineContentCopy.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDelete.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDns.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDomain.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineEdit.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineExtension.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineFlashOn.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineGetApp.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHelpCenter.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHide.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineInfo.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMoreVert.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselinePublish.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineQrCodeScanner.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineReplay.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineRestore.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSave.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSearch.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSettings.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStack.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStop.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVert.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVerticalCircle.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSync.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineUpdate.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineViewList.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineVpnLock.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineDelete.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineFolder.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInbox.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInfo.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineLabel.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineNotInterested.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineUpdate.kt | Adds Compose vector icon. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelProgressBarDialog.kt | Adds a new progress dialog component/state. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/ui/DayNight.kt | Adds a day/night enum (glue UI usage). |
| glue/src/main/kotlin/com/github/kr328/clash/store/UiStore.kt | Adds UI preference storage into glue. |
| glue/src/main/kotlin/com/github/kr328/clash/store/AppStore.kt | Adds simple app store state (updatedAt). |
| glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt | Updates receiver handling via reflection; continues settings state management. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt | Adds network settings viewmodel in glue. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt | Adds override settings viewmodel in glue. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt | Adds meta-feature settings + geo DB import handling. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt | Adds access control (app allowlist/blocklist) viewmodel in glue. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/PreferenceExtensions.kt | Adds LazyListScope preference helpers (ComposePreference workaround). |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/settings/SettingsNav.kt | Adds navigation entries for settings screens. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/Resource.kt | Adds a suspendable resource container for remote service binding. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/Service.kt | Adds remote service binder wrapper and crash detection. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/StatusClient.kt | Adds StatusProvider client for current profile. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/FilesClient.kt | Adds file/document provider client for profiles. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/Broadcasts.kt | Adds broadcast flows for clash events and running state. |
| glue/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt | Updates main intent wiring to new helper and glue stores. |
| glue/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt | Adds nav entries for main screens. |
| glue/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/proxy/ProxyNav.kt | Adds proxy navigation entry. |
| glue/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ProfilesNav.kt | Adds profiles navigation entries. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt | Adds profile file browsing/import/export viewmodel. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/model/AppInfo.kt | Adds shared app info model. |
| glue/src/main/kotlin/com/github/kr328/clash/model/AppInfoSort.kt | Adds app sorting enum/comparator. |
| glue/src/main/kotlin/com/github/kr328/clash/model/DarkMode.kt | Adds dark mode enum in glue model. |
| glue/src/main/kotlin/com/github/kr328/clash/model/File.kt | Adds file model used by FilesClient/UI. |
| glue/src/main/kotlin/com/github/kr328/clash/model/LogFile.kt | Adds log file naming/parsing model. |
| glue/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/nav/MihomoNavDisplay.kt | Adds a Navigation3 wrapper with transitions and decorators. |
| glue/src/main/kotlin/com/github/kr328/clash/log/LogNav.kt | Adds log navigation entries. |
| glue/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt | Updates main intent + resource import to glue; ensures logsDir exists. |
| glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt | Adds logs list/delete logic in glue. |
| glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatCache.kt | Adds in-memory log cache with snapshot tracking. |
| glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatFilter.kt | Adds export formatting helper. |
| glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatReader.kt | Adds log file reader/parser. |
| glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatWriter.kt | Adds log file writer. |
| glue/src/main/kotlin/com/github/kr328/clash/crash/CrashNav.kt | Adds crash navigation entries. |
| glue/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt | Adds crash log dumping viewmodel. |
| glue/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| glue/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt | Updates resource import to com.github.kr328.clash.glue.R. |
| common/src/main/kotlin/com/github/kr328/clash/common/util/Components.kt | Adds Class<*>.componentName extension for reflection-based component control. |
| build.gradle.kts | Centralizes Compose opt-ins and Compose dependencies for compose-enabled modules. |
| app/build.gradle.kts | Replaces direct core/service/common + compose libs deps with a single implementation(projects.glue). |
| app/src/main/res/values/colors.xml | Removes shared UI colors from app resources (now in glue). |
| app/src/main/res/values/ic_launcher_background.xml | Removes launcher background color resource file (now in glue). |
| app/src/main/res/values/ic_banner_background.xml | Removes banner background color resource file (now in glue). |
| app/src/main/kotlin/com/github/kr328/clash/TileService.kt | Switches some strings to glue.R via alias import. |
| app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt | Switches shortcut strings to glue.R via alias import. |
| app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt | Switches UI strings to glue.R; removes MainActivity.Companion.intent. |
| app/src/main/kotlin/com/github/kr328/clash/DialerReceiver.kt | Switches to glue’s mainIntent() helper. |
Comments suppressed due to low confidence (1)
glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt:110
private val RestartReceiverClass = Class.forName(...)is evaluated at class-load time for this file; if the receiver class is absent/renamed (e.g., build variants, shrinker rules), this will crash the app as soon asAppSettingsViewModelis referenced. Prefer alazylookup and handleClassNotFoundExceptionby disabling/hiding the auto-restart toggle (or falling back to a no-op).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+6
to
+7
| fun mainIntent(context: Context, action: String? = null) = | ||
| Intent(context, Class.forName("com.github.kr328.clash.MainActivity")).setAction(action) |
Owner
Author
There was a problem hiding this comment.
Yeah, will DI for these usages.
Goooler
added a commit
that referenced
this pull request
May 6, 2026
This PR introduces Koin-based wiring so the `glue` module can obtain the app’s `MainActivity` class without using reflection (`Class.forName(...)`), aligning with the ongoing module separation work (refs PR #180). **Changes:** - Add Koin dependencies (BOM + core/android) and apply a Koin compiler Gradle plugin in the app module. - Start Koin in `MainApplication` and register an `appModule` that provides `MainActivityClassProvider`. - Update `glue`’s `mainIntent()` helper to resolve the target activity class via Koin instead of reflection. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #179.