diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 3ede015126..98236e7f9a 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -73,38 +73,13 @@ androidComponents {
composeCompiler { stabilityConfigurationFiles.add(layout.projectDirectory.file("stability.conf")) }
-kotlin {
- compilerOptions.optIn.addAll(
- "androidx.compose.foundation.ExperimentalFoundationApi",
- "androidx.compose.material3.ExperimentalMaterial3Api",
- )
-}
-
dependencies {
- implementation(projects.core)
- implementation(projects.service)
- implementation(projects.common)
+ implementation(projects.glue)
implementation(libs.kotlin.coroutine)
- implementation(libs.bytesize)
implementation(libs.androidx.core)
implementation(libs.androidx.activity.compose)
- implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.compose.ui)
- implementation(libs.androidx.compose.ui.tooling.preview)
- implementation(libs.androidx.compose.ui.util)
- debugImplementation(libs.androidx.compose.ui.tooling)
- implementation(libs.androidx.compose.animation)
- implementation(libs.androidx.compose.material3)
- implementation(libs.androidx.lifecycle.viewmodel.compose)
- implementation(libs.androidx.lifecycle.viewmodel.navigation3)
- implementation(libs.androidx.navigation3.runtime)
- implementation(libs.androidx.navigation3.ui)
-
- implementation(libs.composePreference)
-
- implementation(libs.quickie.bundled)
}
val downloadGeoFiles by
diff --git a/app/src/main/kotlin/com/github/kr328/clash/DialerReceiver.kt b/app/src/main/kotlin/com/github/kr328/clash/DialerReceiver.kt
index fcabab91a4..1f28136004 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/DialerReceiver.kt
+++ b/app/src/main/kotlin/com/github/kr328/clash/DialerReceiver.kt
@@ -3,7 +3,7 @@ package com.github.kr328.clash
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import com.github.kr328.clash.MainActivity.Companion.intent as mainIntent
+import com.github.kr328.clash.util.mainIntent
class DialerReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
diff --git a/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt b/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt
index 08e4e2987f..132278b4b9 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt
+++ b/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt
@@ -34,6 +34,7 @@ import com.github.kr328.clash.common.util.unsafeLazy
import com.github.kr328.clash.common.util.uuid
import com.github.kr328.clash.crash.CrashRoute
import com.github.kr328.clash.crash.crashEntries
+import com.github.kr328.clash.glue.R as GlueR
import com.github.kr328.clash.log.LogRoute
import com.github.kr328.clash.log.logsEntries
import com.github.kr328.clash.main.MainRoute
@@ -147,12 +148,12 @@ class MainActivity : ComponentActivity() {
}
Intents.ACTION_START_CLASH -> {
if (!Remote.broadcasts.clashRunning) startClash()
- else toast(R.string.external_control_started)
+ else toast(GlueR.string.external_control_started)
true
}
Intents.ACTION_STOP_CLASH -> {
if (Remote.broadcasts.clashRunning) stopClash()
- else toast(R.string.external_control_stopped)
+ else toast(GlueR.string.external_control_stopped)
true
}
else -> false
@@ -162,15 +163,15 @@ class MainActivity : ComponentActivity() {
private fun startClash() {
val vpnRequest = startClashService()
if (vpnRequest != null) {
- toast(R.string.unable_to_start_vpn)
+ toast(GlueR.string.unable_to_start_vpn)
return
}
- toast(R.string.external_control_started)
+ toast(GlueR.string.external_control_started)
}
private fun stopClash() {
stopClashService()
- toast(R.string.external_control_stopped)
+ toast(GlueR.string.external_control_stopped)
}
private fun requestNotificationPermission() {
@@ -216,7 +217,8 @@ class MainActivity : ComponentActivity() {
"file" -> Profile.Type.File
else -> Profile.Type.Url
}
- val name = uri.getQueryParameter("name") ?: application.getString(R.string.new_profile)
+ val name =
+ uri.getQueryParameter("name") ?: application.getString(GlueR.string.new_profile)
create(type, name).also { patch(it, name, url, 0) }
}
backStack.addIfNotLast(ProfilesRoute.Profiles(openPropertyUuid = uuid))
@@ -229,9 +231,4 @@ class MainActivity : ComponentActivity() {
ViewModel(application = context.applicationContext as Application) as T
}
}
-
- companion object {
- fun intent(context: Context, action: String? = null) =
- Intent(context, MainActivity::class.java).setAction(action)
- }
}
diff --git a/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt b/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt
index 7d303f0fca..dcb99834df 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt
+++ b/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt
@@ -9,6 +9,7 @@ import androidx.core.graphics.drawable.IconCompat
import com.github.kr328.clash.common.Global
import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log
+import com.github.kr328.clash.glue.R as GlueR
import com.github.kr328.clash.remote.Remote
import com.github.kr328.clash.service.util.sendServiceRecreated
import com.github.kr328.clash.store.UiStore
@@ -55,8 +56,8 @@ class MainApplication : Application() {
val toggle =
ShortcutInfoCompat.Builder(this, "toggle_clash")
- .setShortLabel(getString(R.string.shortcut_toggle_short))
- .setLongLabel(getString(R.string.shortcut_toggle_long))
+ .setShortLabel(getString(GlueR.string.shortcut_toggle_short))
+ .setLongLabel(getString(GlueR.string.shortcut_toggle_long))
.setIcon(icon)
.setIntent(
Intent(Intents.ACTION_TOGGLE_CLASH)
@@ -68,8 +69,8 @@ class MainApplication : Application() {
val start =
ShortcutInfoCompat.Builder(this, "start_clash")
- .setShortLabel(getString(R.string.shortcut_start_short))
- .setLongLabel(getString(R.string.shortcut_start_long))
+ .setShortLabel(getString(GlueR.string.shortcut_start_short))
+ .setLongLabel(getString(GlueR.string.shortcut_start_long))
.setIcon(icon)
.setIntent(
Intent(Intents.ACTION_START_CLASH)
@@ -81,8 +82,8 @@ class MainApplication : Application() {
val stop =
ShortcutInfoCompat.Builder(this, "stop_clash")
- .setShortLabel(getString(R.string.shortcut_stop_short))
- .setLongLabel(getString(R.string.shortcut_stop_long))
+ .setShortLabel(getString(GlueR.string.shortcut_stop_short))
+ .setLongLabel(getString(GlueR.string.shortcut_stop_long))
.setIcon(icon)
.setIntent(
Intent(Intents.ACTION_STOP_CLASH)
diff --git a/app/src/main/kotlin/com/github/kr328/clash/TileService.kt b/app/src/main/kotlin/com/github/kr328/clash/TileService.kt
index a45f9f83b9..8fcba854e2 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/TileService.kt
+++ b/app/src/main/kotlin/com/github/kr328/clash/TileService.kt
@@ -10,6 +10,7 @@ import android.service.quicksettings.TileService
import com.github.kr328.clash.common.compat.registerReceiverCompat
import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.constants.Permissions
+import com.github.kr328.clash.glue.R as GlueR
import com.github.kr328.clash.remote.StatusClient
import com.github.kr328.clash.util.startClashService
import com.github.kr328.clash.util.stopClashService
@@ -65,7 +66,7 @@ class TileService : TileService() {
tile.state = if (clashRunning) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
- tile.label = currentProfile.ifEmpty { getText(R.string.launch_name_meta) }
+ tile.label = currentProfile.ifEmpty { getText(GlueR.string.launch_name_meta) }
tile.icon =
Icon.createWithResource(this, com.github.kr328.clash.service.R.drawable.ic_logo_service)
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 65f0c80152..cf22cdab7b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,14 +1,5 @@
- #1e4376
- #1976d2
- #50000000
- #FFFAFAFA
- #FF121212
- #FF202020
- #FF808080
- #FFD3D3D3
- #FF808080
- #FFB00020
- #FFFFFF
+ #FFFFFF
+ #FFFFFF
diff --git a/app/src/main/res/values/ic_banner_background.xml b/app/src/main/res/values/ic_banner_background.xml
deleted file mode 100644
index 15db34b811..0000000000
--- a/app/src/main/res/values/ic_banner_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #FFFFFF
-
\ No newline at end of file
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index c5d5899fdf..0000000000
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #FFFFFF
-
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 637e7d88b7..3556b78967 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -3,6 +3,7 @@ import com.android.build.gradle.api.AndroidBasePlugin
import com.diffplug.gradle.spotless.SpotlessExtension
import kotlin.collections.addAll
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
@@ -58,4 +59,26 @@ allprojects {
}
kotlinGradle { ktfmt(libs.ktfmt.get().version).googleStyle() }
}
+
+ plugins.withId(rootProject.libs.plugins.kotlin.compose.get().pluginId) {
+ extensions.configure {
+ compilerOptions.optIn.addAll(
+ "androidx.compose.foundation.ExperimentalFoundationApi",
+ "androidx.compose.material3.ExperimentalMaterial3Api",
+ )
+ }
+ dependencies {
+ "implementation"(platform(libs.androidx.compose.bom))
+ "implementation"(libs.androidx.compose.ui)
+ "implementation"(libs.androidx.compose.ui.tooling.preview)
+ "implementation"(libs.androidx.compose.ui.util)
+ "debugImplementation"(libs.androidx.compose.ui.tooling)
+ "implementation"(libs.androidx.compose.animation)
+ "implementation"(libs.androidx.compose.material3)
+ "implementation"(libs.androidx.lifecycle.viewmodel.compose)
+ "implementation"(libs.androidx.lifecycle.viewmodel.navigation3)
+ "implementation"(libs.androidx.navigation3.runtime)
+ "implementation"(libs.androidx.navigation3.ui)
+ }
+ }
}
diff --git a/common/src/main/kotlin/com/github/kr328/clash/common/util/Components.kt b/common/src/main/kotlin/com/github/kr328/clash/common/util/Components.kt
index 29557312b9..6a4826fd91 100644
--- a/common/src/main/kotlin/com/github/kr328/clash/common/util/Components.kt
+++ b/common/src/main/kotlin/com/github/kr328/clash/common/util/Components.kt
@@ -5,6 +5,9 @@ import android.content.Intent
import com.github.kr328.clash.common.Global
import kotlin.reflect.KClass
+val Class<*>.componentName: ComponentName
+ get() = ComponentName(Global.application.packageName, name)
+
val KClass<*>.componentName: ComponentName
get() = ComponentName(Global.application.packageName, this.java.name)
diff --git a/glue/build.gradle.kts b/glue/build.gradle.kts
new file mode 100644
index 0000000000..20d25df6e2
--- /dev/null
+++ b/glue/build.gradle.kts
@@ -0,0 +1,16 @@
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.compose)
+ alias(libs.plugins.kotlin.serialization)
+}
+
+dependencies {
+ api(projects.core)
+ api(projects.service)
+ api(projects.common)
+
+ implementation(libs.composePreference)
+
+ implementation(libs.quickie.bundled)
+ implementation(libs.bytesize)
+}
diff --git a/app/src/main/kotlin/com/github/kr328/clash/crash/CrashNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/crash/CrashNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/crash/CrashNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/crash/CrashNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt
index 840dec1ce8..07ac0c392c 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/crash/ui/ApkBrokenScreen.kt
@@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.main.ui.CMFA_GITHUB
import com.github.kr328.clash.main.ui.openLink
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt
index 9f509ec075..fe779477c9 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt
@@ -15,8 +15,8 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.crash.vm.AppCrashedViewModel
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.theme.MihomoThemeWrapper
import com.github.kr328.clash.ui.theme.PreviewMihomo
diff --git a/app/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/LogNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/LogNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/LogNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/LogNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt
index 0341b32c71..03b52ccfd8 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/log/LogcatService.kt
@@ -11,8 +11,6 @@ import android.os.IInterface
import androidx.core.app.NotificationChannelCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
-import com.github.kr328.clash.MainActivity.Companion.intent as mainIntent
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.compat.getColorCompat
import com.github.kr328.clash.common.compat.pendingIntentFlags
import com.github.kr328.clash.common.compat.startForegroundCompat
@@ -20,6 +18,7 @@ import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.common.util.intent
import com.github.kr328.clash.core.model.LogMessage
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.log.util.LogcatCache
import com.github.kr328.clash.log.util.LogcatWriter
import com.github.kr328.clash.service.RemoteService
@@ -27,6 +26,7 @@ import com.github.kr328.clash.service.remote.ILogObserver
import com.github.kr328.clash.service.remote.IRemoteService
import com.github.kr328.clash.service.remote.unwrap
import com.github.kr328.clash.util.logsDir
+import com.github.kr328.clash.util.mainIntent
import java.io.IOException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt
index 5b533646be..f36337aa31 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt
@@ -37,8 +37,8 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.core.model.LogMessage
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.log.vm.LogcatViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.component.ModelProgressBarDialog
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt
index 92028ddbe1..57cb8b11f0 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt
@@ -33,7 +33,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.log.vm.LogsViewModel
import com.github.kr328.clash.model.LogFile
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatCache.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatCache.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatCache.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatCache.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatFilter.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatFilter.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatFilter.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatFilter.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatReader.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatReader.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatReader.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatReader.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatWriter.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatWriter.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/util/LogcatWriter.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/util/LogcatWriter.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt
index feb554accc..9e07e6245f 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt
@@ -11,10 +11,10 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.common.util.intent
import com.github.kr328.clash.core.model.LogMessage
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.log.LogcatService
import com.github.kr328.clash.log.util.LogcatFilter
import com.github.kr328.clash.log.util.LogcatReader
diff --git a/app/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt
index ccd7872011..ae87ec9398 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt
@@ -14,7 +14,7 @@ import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.fromHtml
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.core.net.toUri
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.theme.MihomoThemeWrapper
import com.github.kr328.clash.ui.theme.PreviewMihomo
diff --git a/app/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt
index 6edf3d3781..000aa59573 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt
@@ -45,7 +45,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.main.vm.MainViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.icon.BaselineApps
diff --git a/app/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt
index 717f2b8fe1..d428615e06 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt
@@ -7,10 +7,10 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.core.bridge.Bridge
import com.github.kr328.clash.core.util.trafficTotal
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.remote.Remote
import com.github.kr328.clash.util.startClashService
import com.github.kr328.clash.util.stopClashService
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/AppInfo.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/AppInfo.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/model/AppInfo.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/AppInfo.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/AppInfoSort.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/AppInfoSort.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/model/AppInfoSort.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/AppInfoSort.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/DarkMode.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/DarkMode.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/model/DarkMode.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/DarkMode.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/File.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/File.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/model/File.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/File.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/LogFile.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/LogFile.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/model/LogFile.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/LogFile.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt b/glue/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt
similarity index 97%
rename from app/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt
index e0a6debcbb..0633c8bc4d 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/model/ProfileProvider.kt
@@ -3,7 +3,7 @@ package com.github.kr328.clash.model
import android.content.Context
import android.content.Intent
import androidx.compose.ui.graphics.vector.ImageVector
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.icon.BaselineAttachFile
import com.github.kr328.clash.ui.icon.BaselineCloudDownload
import com.github.kr328.clash.ui.icon.BaselineQrCodeScanner
diff --git a/app/src/main/kotlin/com/github/kr328/clash/nav/MihomoNavDisplay.kt b/glue/src/main/kotlin/com/github/kr328/clash/nav/MihomoNavDisplay.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/nav/MihomoNavDisplay.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/nav/MihomoNavDisplay.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ProfilesNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ProfilesNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ProfilesNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ProfilesNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt
index 2ab1aff5cc..f0bbf31c67 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt
@@ -46,8 +46,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.util.grantPermissions
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.model.File
import com.github.kr328.clash.profile.vm.FilesViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt
index 9a13b58bea..da5d9d39fc 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt
@@ -38,8 +38,8 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.core.graphics.drawable.toBitmap
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.constants.Intents
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.model.ProfileProvider
import com.github.kr328.clash.profile.vm.NewProfileViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt
index a8430416f0..929e437970 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt
@@ -49,7 +49,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.profile.vm.ProfilesViewModel
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt
index f89c4cb42c..b8793dc62d 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt
@@ -31,7 +31,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.profile.vm.PropertiesViewModel
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt
index e0126107f5..fe35e66a64 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt
@@ -34,8 +34,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.core.model.Provider
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.profile.vm.ProvidersViewModel
import com.github.kr328.clash.profile.vm.ProvidersViewModel.UiState.ProviderItemState
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt
index 46b2e7f389..f56154b5b2 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt
@@ -7,9 +7,9 @@ import android.net.Uri
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.model.ProfileProvider
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.util.withProfile
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt
index 0bfff36368..db33399af5 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt
@@ -6,7 +6,7 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.remote.Remote
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.util.withProfile
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt
index ccb7a1ba97..02842fd00c 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt
@@ -6,10 +6,10 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.Global
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.core.model.FetchStatus
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.service.model.Profile
import com.github.kr328.clash.util.withProfile
import kotlin.uuid.Uuid
diff --git a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt
index 8616041291..de87e225d2 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt
@@ -6,9 +6,9 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.application
import androidx.lifecycle.viewModelScope
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.core.model.Provider
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.remote.Remote
import com.github.kr328.clash.util.withClash
import kotlin.time.Duration.Companion.minutes
diff --git a/app/src/main/kotlin/com/github/kr328/clash/proxy/ProxyNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/proxy/ProxyNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/proxy/ProxyNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/proxy/ProxyNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt
index dff8d86ccb..cb1990f281 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt
@@ -57,10 +57,10 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
import com.github.kr328.clash.core.model.Proxy
import com.github.kr328.clash.core.model.ProxySort
import com.github.kr328.clash.core.model.TunnelState
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.proxy.vm.ProxyViewModel
import com.github.kr328.clash.proxy.vm.ProxyViewModel.SelectedProxy
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/proxy/vm/ProxyViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/proxy/vm/ProxyViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/proxy/vm/ProxyViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/proxy/vm/ProxyViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/Broadcasts.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/Broadcasts.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/Broadcasts.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/Broadcasts.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/FilesClient.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/FilesClient.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/FilesClient.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/FilesClient.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt
similarity index 96%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt
index 359cd83208..6faa6725ca 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/remote/Remote.kt
@@ -2,13 +2,13 @@ package com.github.kr328.clash.remote
import android.content.Context
import android.content.Intent
-import com.github.kr328.clash.MainActivity.Companion.intent as mainIntent
import com.github.kr328.clash.common.Global
import com.github.kr328.clash.common.Global.application
import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.store.AppStore
import com.github.kr328.clash.util.ApplicationObserver
+import com.github.kr328.clash.util.mainIntent
import com.github.kr328.clash.util.verifyApk
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/Resource.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/Resource.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/Resource.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/Resource.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/Service.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/Service.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/Service.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/Service.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/remote/StatusClient.kt b/glue/src/main/kotlin/com/github/kr328/clash/remote/StatusClient.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/remote/StatusClient.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/remote/StatusClient.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/SettingsNav.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/SettingsNav.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/SettingsNav.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/SettingsNav.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt
index 4d5849dd36..e567ab6409 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt
@@ -52,7 +52,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.graphics.drawable.toDrawable
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.model.AppInfo
import com.github.kr328.clash.model.AppInfoSort
import com.github.kr328.clash.settings.vm.AccessControlViewModel
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt
index 7ff7e5fc63..40022e51bc 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt
@@ -12,7 +12,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.model.DarkMode
import com.github.kr328.clash.settings.vm.AppSettingsViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt
index f2603ceca1..249746dcff 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextListScreen.kt
@@ -32,7 +32,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavKey
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.icon.BaselineAdd
import com.github.kr328.clash.ui.icon.MihomoIcons
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt
index 650523c72c..e370a783be 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/EditableTextMapScreen.kt
@@ -34,7 +34,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.compose.ui.unit.dp
import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavKey
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.icon.BaselineAdd
import com.github.kr328.clash.ui.icon.MihomoIcons
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt
index 179f63bc15..38315db09c 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt
@@ -30,8 +30,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.entryProvider
-import com.github.kr328.clash.R
import com.github.kr328.clash.core.model.ConfigurationOverride
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.nav.MihomoNavDisplay
import com.github.kr328.clash.nav.addIfNotLast
import com.github.kr328.clash.nav.rememberNavBackStackBuilder
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt
index 64e8df6e05..8c8a5c2174 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt
@@ -17,7 +17,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.service.model.AccessControlMode
import com.github.kr328.clash.settings.vm.NetworkSettingsViewModel
import com.github.kr328.clash.ui.component.MihomoScaffold
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt
index a8ef1a2973..67789bde14 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt
@@ -36,10 +36,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.entryProvider
-import com.github.kr328.clash.R
import com.github.kr328.clash.core.model.ConfigurationOverride
import com.github.kr328.clash.core.model.LogMessage
import com.github.kr328.clash.core.model.TunnelState
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.nav.MihomoNavDisplay
import com.github.kr328.clash.nav.addIfNotLast
import com.github.kr328.clash.nav.rememberNavBackStackBuilder
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/PreferenceExtensions.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/PreferenceExtensions.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/PreferenceExtensions.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/PreferenceExtensions.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt
similarity index 96%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt
index b3c47b8582..302d64211f 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsPreference.kt
@@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
@Composable
fun EmptyEditorContent(modifier: Modifier = Modifier) {
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt
similarity index 99%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt
index e6eb225cbb..f6dda4339e 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/ui/SettingsScreen.kt
@@ -22,7 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewWrapper
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.component.MihomoScaffold
import com.github.kr328.clash.ui.icon.BaselineDns
import com.github.kr328.clash.ui.icon.BaselineExtension
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt
similarity index 95%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt
index 7eb8502870..64c99e45b6 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt
@@ -5,7 +5,6 @@ import android.content.pm.PackageManager
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.application
-import com.github.kr328.clash.RestartReceiver
import com.github.kr328.clash.common.util.componentName
import com.github.kr328.clash.model.DarkMode
import com.github.kr328.clash.remote.Remote
@@ -65,7 +64,7 @@ class AppSettingsViewModel(app: Application) : AndroidViewModel(app) {
private var autoRestartValue: Boolean
get() {
- val status = pm.getComponentEnabledSetting(RestartReceiver::class.componentName)
+ val status = pm.getComponentEnabledSetting(RestartReceiverClass.componentName)
return status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
}
set(value) {
@@ -74,7 +73,7 @@ class AppSettingsViewModel(app: Application) : AndroidViewModel(app) {
else PackageManager.COMPONENT_ENABLED_STATE_DISABLED
pm.setComponentEnabledSetting(
- RestartReceiver::class.componentName,
+ RestartReceiverClass.componentName,
status,
PackageManager.DONT_KILL_APP,
)
@@ -106,3 +105,5 @@ class AppSettingsViewModel(app: Application) : AndroidViewModel(app) {
val dynamicNotification: Boolean,
)
}
+
+private val RestartReceiverClass = Class.forName("com.github.kr328.clash.RestartReceiver")
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt b/glue/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/store/AppStore.kt b/glue/src/main/kotlin/com/github/kr328/clash/store/AppStore.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/store/AppStore.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/store/AppStore.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/store/UiStore.kt b/glue/src/main/kotlin/com/github/kr328/clash/store/UiStore.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/store/UiStore.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/store/UiStore.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/DayNight.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/DayNight.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/DayNight.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/DayNight.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt
index 113a34a5ff..6763aaac45 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/ui/component/MihomoScaffold.kt
@@ -16,7 +16,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.ui.icon.BaselineArrowBack
import com.github.kr328.clash.ui.icon.MihomoIcons
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/component/ModelProgressBarDialog.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelProgressBarDialog.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/component/ModelProgressBarDialog.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelProgressBarDialog.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt
similarity index 98%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt
index a142162d3c..50b8f51ce2 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/ui/component/ModelTextInputDialog.kt
@@ -18,7 +18,7 @@ import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.util.Validator
@Composable
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdb.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdb.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdb.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdb.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdd.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdd.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdd.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAdd.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineApps.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineApps.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineApps.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineApps.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineArrowBack.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineArrowBack.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineArrowBack.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineArrowBack.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAssignment.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAssignment.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAssignment.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAssignment.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAttachFile.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAttachFile.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAttachFile.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineAttachFile.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineBrightness4.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineBrightness4.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineBrightness4.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineBrightness4.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineClearAll.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineClearAll.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineClearAll.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineClearAll.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineCloudDownload.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineCloudDownload.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineCloudDownload.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineCloudDownload.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineContentCopy.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineContentCopy.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineContentCopy.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineContentCopy.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDelete.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDelete.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDelete.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDelete.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDns.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDns.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDns.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDns.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDomain.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDomain.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDomain.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineDomain.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineEdit.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineEdit.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineEdit.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineEdit.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineExtension.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineExtension.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineExtension.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineExtension.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineFlashOn.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineFlashOn.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineFlashOn.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineFlashOn.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineGetApp.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineGetApp.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineGetApp.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineGetApp.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHelpCenter.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHelpCenter.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHelpCenter.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHelpCenter.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHide.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHide.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHide.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineHide.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineInfo.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineInfo.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineInfo.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineInfo.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMeta.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMeta.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMeta.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMeta.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMoreVert.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMoreVert.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMoreVert.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineMoreVert.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselinePublish.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselinePublish.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselinePublish.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselinePublish.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineQrCodeScanner.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineQrCodeScanner.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineQrCodeScanner.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineQrCodeScanner.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineReplay.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineReplay.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineReplay.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineReplay.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineRestore.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineRestore.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineRestore.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineRestore.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSave.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSave.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSave.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSave.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSearch.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSearch.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSearch.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSearch.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSettings.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSettings.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSettings.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSettings.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStack.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStack.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStack.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStack.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStop.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStop.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStop.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineStop.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVert.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVert.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVert.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVert.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVerticalCircle.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVerticalCircle.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVerticalCircle.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSwapVerticalCircle.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSync.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSync.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSync.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineSync.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineUpdate.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineUpdate.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineUpdate.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineUpdate.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineViewList.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineViewList.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineViewList.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineViewList.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineVpnLock.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineVpnLock.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineVpnLock.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/BaselineVpnLock.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/Clash.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/Clash.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/Clash.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/Clash.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/MihomoIcons.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/MihomoIcons.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/MihomoIcons.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/MihomoIcons.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineArticle.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineArticle.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineArticle.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineArticle.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineCheckCircle.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineCheckCircle.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineCheckCircle.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineCheckCircle.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineDelete.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineDelete.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineDelete.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineDelete.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineFolder.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineFolder.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineFolder.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineFolder.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInbox.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInbox.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInbox.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInbox.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInfo.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInfo.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInfo.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineInfo.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineLabel.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineLabel.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineLabel.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineLabel.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineNotInterested.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineNotInterested.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineNotInterested.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineNotInterested.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineUpdate.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineUpdate.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineUpdate.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/icon/OutlineUpdate.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/theme/Color.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Color.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/theme/Color.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Color.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/ui/theme/Type.kt b/glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Type.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/ui/theme/Type.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/ui/theme/Type.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/App.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/App.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/App.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/App.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Application.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Application.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Application.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Application.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Clash.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Clash.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Clash.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Clash.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Content.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Content.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Content.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Content.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Context.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Context.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Context.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Context.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/I18n.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/I18n.kt
similarity index 97%
rename from app/src/main/kotlin/com/github/kr328/clash/util/I18n.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/I18n.kt
index 11e7570e3e..5114a5163b 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/util/I18n.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/util/I18n.kt
@@ -1,9 +1,9 @@
package com.github.kr328.clash.util
import android.content.Context
-import com.github.kr328.clash.R
import com.github.kr328.clash.common.compat.preferredLocale
import com.github.kr328.clash.core.model.Provider
+import com.github.kr328.clash.glue.R
import com.github.kr328.clash.service.model.Profile
import java.text.SimpleDateFormat
import java.util.Date
diff --git a/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt
new file mode 100644
index 0000000000..e1e722c1f3
--- /dev/null
+++ b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt
@@ -0,0 +1,7 @@
+package com.github.kr328.clash.util
+
+import android.content.Context
+import android.content.Intent
+
+fun mainIntent(context: Context, action: String? = null) =
+ Intent(context, Class.forName("com.github.kr328.clash.MainActivity")).setAction(action)
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Interval.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Interval.kt
similarity index 94%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Interval.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Interval.kt
index 92e864842c..cac21765e9 100644
--- a/app/src/main/kotlin/com/github/kr328/clash/util/Interval.kt
+++ b/glue/src/main/kotlin/com/github/kr328/clash/util/Interval.kt
@@ -1,7 +1,7 @@
package com.github.kr328.clash.util
import android.content.Context
-import com.github.kr328.clash.R
+import com.github.kr328.clash.glue.R
import kotlin.time.Duration.Companion.milliseconds
fun Long.elapsedIntervalString(context: Context): String {
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Remote.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Remote.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Remote.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Remote.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Service.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Service.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Service.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Service.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Toast.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Toast.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Toast.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Toast.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Uri.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Uri.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Uri.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Uri.kt
diff --git a/app/src/main/kotlin/com/github/kr328/clash/util/Validator.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Validator.kt
similarity index 100%
rename from app/src/main/kotlin/com/github/kr328/clash/util/Validator.kt
rename to glue/src/main/kotlin/com/github/kr328/clash/util/Validator.kt
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/glue/src/main/res/values-ja-rJP/strings.xml
similarity index 100%
rename from app/src/main/res/values-ja-rJP/strings.xml
rename to glue/src/main/res/values-ja-rJP/strings.xml
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/glue/src/main/res/values-ko-rKR/strings.xml
similarity index 100%
rename from app/src/main/res/values-ko-rKR/strings.xml
rename to glue/src/main/res/values-ko-rKR/strings.xml
diff --git a/app/src/main/res/values-ru/strings.xml b/glue/src/main/res/values-ru/strings.xml
similarity index 100%
rename from app/src/main/res/values-ru/strings.xml
rename to glue/src/main/res/values-ru/strings.xml
diff --git a/app/src/main/res/values-vi/strings.xml b/glue/src/main/res/values-vi/strings.xml
similarity index 100%
rename from app/src/main/res/values-vi/strings.xml
rename to glue/src/main/res/values-vi/strings.xml
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/glue/src/main/res/values-zh-rHK/strings.xml
similarity index 100%
rename from app/src/main/res/values-zh-rHK/strings.xml
rename to glue/src/main/res/values-zh-rHK/strings.xml
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/glue/src/main/res/values-zh-rTW/strings.xml
similarity index 100%
rename from app/src/main/res/values-zh-rTW/strings.xml
rename to glue/src/main/res/values-zh-rTW/strings.xml
diff --git a/app/src/main/res/values-zh/strings.xml b/glue/src/main/res/values-zh/strings.xml
similarity index 100%
rename from app/src/main/res/values-zh/strings.xml
rename to glue/src/main/res/values-zh/strings.xml
diff --git a/glue/src/main/res/values/colors.xml b/glue/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..fab8cdc538
--- /dev/null
+++ b/glue/src/main/res/values/colors.xml
@@ -0,0 +1,17 @@
+
+
+ #1e4376
+ #1976d2
+ #50000000
+ #FFFAFAFA
+ #FF121212
+ #FF202020
+ #FF808080
+ #FFD3D3D3
+ #FF808080
+ #FFB00020
+ #FFFFFF
+
+ #FFFFFF
+ #FFFFFF
+
diff --git a/app/src/main/res/values/ids.xml b/glue/src/main/res/values/ids.xml
similarity index 100%
rename from app/src/main/res/values/ids.xml
rename to glue/src/main/res/values/ids.xml
diff --git a/app/src/main/res/values/strings.xml b/glue/src/main/res/values/strings.xml
similarity index 100%
rename from app/src/main/res/values/strings.xml
rename to glue/src/main/res/values/strings.xml
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 53d0885596..4f9d43d532 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -43,4 +43,4 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
-include(":app", ":core", ":service", ":common")
+include(":app", ":core", ":service", ":common", ":glue")