Skip to content

Extract glue project#180

Merged
Goooler merged 1 commit intotrunkfrom
split-projects
May 3, 2026
Merged

Extract glue project#180
Goooler merged 1 commit intotrunkfrom
split-projects

Conversation

@Goooler
Copy link
Copy Markdown
Owner

@Goooler Goooler commented May 3, 2026

Refs #179.

@Goooler Goooler force-pushed the split-projects branch 2 times, most recently from a3831dc to 22c9f13 Compare May 3, 2026 03:22
@Goooler Goooler mentioned this pull request May 3, 2026
@Goooler Goooler changed the title Apply dependencies for Compose plugin Extract glue project May 3, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 :glue module 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.R and moved various utilities/viewmodels into :glue.
  • Centralized Compose opt-ins + Compose dependency wiring in the root build.gradle.kts, and updated :app to 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 as AppSettingsViewModel is referenced. Prefer a lazy lookup and handle ClassNotFoundException by 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)
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, will DI for these usages.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Goooler Goooler merged commit df8dbc0 into trunk May 3, 2026
7 checks passed
@Goooler Goooler deleted the split-projects branch May 3, 2026 03:52
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants