diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 99f4780bb5..8becd18d80 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -75,8 +75,8 @@ dependencies { implementation(projects.glue) implementation(projects.ui) implementation(projects.ui.crash) + implementation(projects.ui.home) implementation(projects.ui.log) - implementation(projects.ui.main) implementation(projects.ui.proxy) implementation(projects.ui.profile) implementation(projects.ui.settings) 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 42fc92f5d0..05279c8b24 100644 --- a/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt +++ b/app/src/main/kotlin/com/github/kr328/clash/MainActivity.kt @@ -38,10 +38,10 @@ 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.home.HomeRoute +import com.github.kr328.clash.home.homeEntries import com.github.kr328.clash.log.LogRoute import com.github.kr328.clash.log.logsEntries -import com.github.kr328.clash.main.MainRoute -import com.github.kr328.clash.main.mainEntries import com.github.kr328.clash.model.DarkMode import com.github.kr328.clash.profile.ProfilesRoute import com.github.kr328.clash.profile.profilesEntries @@ -88,17 +88,17 @@ class MainActivity : ComponentActivity() { backStack = backStack, entryProvider = entryProvider { - mainEntries( + homeEntries( onOpenProxy = { backStack.addIfNotLast(ProxyRoute.Proxy) }, onOpenProfiles = { backStack.addIfNotLast(ProfilesRoute.Profiles()) }, onOpenProviders = { backStack.addIfNotLast(ProfilesRoute.Providers) }, onOpenLogs = { backStack.addIfNotLast(LogRoute.Root) }, onOpenSettings = { backStack.addIfNotLast(SettingsRoute.Root) }, - onOpenHelp = { backStack.addIfNotLast(MainRoute.Help) }, + onOpenHelp = { backStack.addIfNotLast(HomeRoute.Help) }, ) proxyEntries { backStack.clear() - backStack.add(MainRoute.Main) + backStack.add(HomeRoute.Home) } profilesEntries() logsEntries() @@ -207,7 +207,7 @@ class MainActivity : ComponentActivity() { } private class ViewModel(application: Application) : AndroidViewModel(application) { - val backStack = mutableStateListOf(MainRoute.Main) + val backStack = mutableStateListOf(HomeRoute.Home) fun handleInstallConfigUri(uri: Uri) { val url = uri.getQueryParameter("url") ?: return diff --git a/settings.gradle.kts b/settings.gradle.kts index 7a5d426eb0..175297ef00 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,8 +51,8 @@ include( ":glue", ":ui", ":ui:crash", + ":ui:home", ":ui:log", - ":ui:main", ":ui:proxy", ":ui:profile", ":ui:settings", diff --git a/ui/main/build.gradle.kts b/ui/home/build.gradle.kts similarity index 100% rename from ui/main/build.gradle.kts rename to ui/home/build.gradle.kts diff --git a/ui/main/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt b/ui/home/src/main/kotlin/com/github/kr328/clash/home/HomeNav.kt similarity index 58% rename from ui/main/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt rename to ui/home/src/main/kotlin/com/github/kr328/clash/home/HomeNav.kt index 6230f0855e..92ba554e62 100644 --- a/ui/main/src/main/kotlin/com/github/kr328/clash/main/MainNav.kt +++ b/ui/home/src/main/kotlin/com/github/kr328/clash/home/HomeNav.kt @@ -1,18 +1,18 @@ -package com.github.kr328.clash.main +package com.github.kr328.clash.home import androidx.navigation3.runtime.EntryProviderScope import androidx.navigation3.runtime.NavKey -import com.github.kr328.clash.main.ui.HelpScreen -import com.github.kr328.clash.main.ui.MainScreen +import com.github.kr328.clash.home.ui.HelpScreen +import com.github.kr328.clash.home.ui.HomeScreen import kotlinx.serialization.Serializable -sealed interface MainRoute : NavKey { - @Serializable data object Main : MainRoute +sealed interface HomeRoute : NavKey { + @Serializable data object Home : HomeRoute - @Serializable data object Help : MainRoute + @Serializable data object Help : HomeRoute } -fun EntryProviderScope.mainEntries( +fun EntryProviderScope.homeEntries( onOpenProxy: () -> Unit, onOpenProfiles: () -> Unit, onOpenProviders: () -> Unit, @@ -20,8 +20,8 @@ fun EntryProviderScope.mainEntries( onOpenSettings: () -> Unit, onOpenHelp: () -> Unit, ) { - entry { - MainScreen( + entry { + HomeScreen( onOpenProxy = onOpenProxy, onOpenProfiles = onOpenProfiles, onOpenProviders = onOpenProviders, @@ -30,5 +30,5 @@ fun EntryProviderScope.mainEntries( onOpenHelp = onOpenHelp, ) } - entry { HelpScreen() } + entry { HelpScreen() } } diff --git a/ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt b/ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HelpScreen.kt similarity index 98% rename from ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt rename to ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HelpScreen.kt index 71b3e1f7b4..b8862f4bd8 100644 --- a/ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/HelpScreen.kt +++ b/ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HelpScreen.kt @@ -1,4 +1,4 @@ -package com.github.kr328.clash.main.ui +package com.github.kr328.clash.home.ui import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth diff --git a/ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt b/ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HomeScreen.kt similarity index 91% rename from ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt rename to ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HomeScreen.kt index 13a58ec21c..458f51e435 100644 --- a/ui/main/src/main/kotlin/com/github/kr328/clash/main/ui/MainScreen.kt +++ b/ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HomeScreen.kt @@ -1,4 +1,4 @@ -package com.github.kr328.clash.main.ui +package com.github.kr328.clash.home.ui import android.app.Activity import androidx.activity.compose.rememberLauncherForActivityResult @@ -46,7 +46,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.github.kr328.clash.glue.R -import com.github.kr328.clash.main.vm.MainViewModel +import com.github.kr328.clash.home.vm.HomeViewModel import com.github.kr328.clash.ui.component.MihomoScaffold import com.github.kr328.clash.ui.icon.BaselineApps import com.github.kr328.clash.ui.icon.BaselineAssignment @@ -67,9 +67,9 @@ import com.github.kr328.clash.ui.theme.PreviewMihomo import com.github.kr328.clash.ui.theme.mihomoDimens @Composable -internal fun MainScreen( +internal fun HomeScreen( modifier: Modifier = Modifier, - viewModel: MainViewModel = viewModel(), + viewModel: HomeViewModel = viewModel(), onOpenProxy: () -> Unit, onOpenProfiles: () -> Unit, onOpenProviders: () -> Unit, @@ -119,7 +119,7 @@ internal fun MainScreen( viewModel.consumeEvent() } - MainContent( + HomeContent( modifier = modifier, snackbarHostState = snackbarHostState, clashRunning = clashRunning, @@ -141,7 +141,7 @@ internal fun MainScreen( } @Composable -private fun MainContent( +private fun HomeContent( modifier: Modifier = Modifier, snackbarHostState: SnackbarHostState, clashRunning: Boolean, @@ -174,17 +174,17 @@ private fun MainContent( modifier = Modifier.fillMaxSize() .padding(innerPadding) - .padding(horizontal = dimens.mainPaddingHorizontal) + .padding(horizontal = dimens.homePaddingHorizontal) .verticalScroll(rememberScrollState()) ) { Row( - modifier = Modifier.fillMaxWidth().height(dimens.mainTopBannerHeight), + modifier = Modifier.fillMaxWidth().height(dimens.homeTopBannerHeight), verticalAlignment = Alignment.CenterVertically, ) { Image( imageVector = MihomoIcons.Clash, contentDescription = null, - modifier = Modifier.size(dimens.mainLogoSize), + modifier = Modifier.size(dimens.homeLogoSize), ) Spacer(modifier = Modifier.width(4.dp)) Text( @@ -193,8 +193,8 @@ private fun MainContent( ) } - MainActionCard( - modifier = Modifier.padding(vertical = dimens.mainCardMarginVertical), + HomeActionCard( + modifier = Modifier.padding(vertical = dimens.homeCardMarginVertical), icon = if (clashRunning) MihomoIcons.OutlineCheckCircle else MihomoIcons.OutlineNotInterested, text = stringResource(if (clashRunning) R.string.running else R.string.stopped), @@ -208,8 +208,8 @@ private fun MainContent( ) AnimatedVisibility(visible = clashRunning) { - MainActionCard( - modifier = Modifier.padding(vertical = dimens.mainCardMarginVertical), + HomeActionCard( + modifier = Modifier.padding(vertical = dimens.homeCardMarginVertical), icon = MihomoIcons.BaselineApps, text = stringResource(R.string.proxy), subtext = mode, @@ -219,8 +219,8 @@ private fun MainContent( ) } - MainActionCard( - modifier = Modifier.padding(vertical = dimens.mainCardMarginVertical), + HomeActionCard( + modifier = Modifier.padding(vertical = dimens.homeCardMarginVertical), icon = MihomoIcons.BaselineViewList, text = stringResource(R.string.profile), subtext = @@ -232,34 +232,34 @@ private fun MainContent( ) AnimatedVisibility(visible = clashRunning && hasProviders) { - MainActionLabel( - modifier = Modifier.padding(vertical = dimens.mainLabelMarginVertical), + HomeActionLabel( + modifier = Modifier.padding(vertical = dimens.homeLabelMarginVertical), icon = MihomoIcons.BaselineSwapVerticalCircle, text = stringResource(R.string.providers), onClick = onOpenProviders, ) } - MainActionLabel( - modifier = Modifier.padding(vertical = dimens.mainLabelMarginVertical), + HomeActionLabel( + modifier = Modifier.padding(vertical = dimens.homeLabelMarginVertical), icon = MihomoIcons.BaselineAssignment, text = stringResource(R.string.logs), onClick = onOpenLogs, ) - MainActionLabel( - modifier = Modifier.padding(vertical = dimens.mainLabelMarginVertical), + HomeActionLabel( + modifier = Modifier.padding(vertical = dimens.homeLabelMarginVertical), icon = MihomoIcons.BaselineSettings, text = stringResource(R.string.settings), onClick = onOpenSettings, ) - MainActionLabel( - modifier = Modifier.padding(vertical = dimens.mainLabelMarginVertical), + HomeActionLabel( + modifier = Modifier.padding(vertical = dimens.homeLabelMarginVertical), icon = MihomoIcons.BaselineHelpCenter, text = stringResource(R.string.help), onClick = onOpenHelp, ) - MainActionLabel( - modifier = Modifier.padding(vertical = dimens.mainLabelMarginVertical), + HomeActionLabel( + modifier = Modifier.padding(vertical = dimens.homeLabelMarginVertical), icon = MihomoIcons.BaselineInfo, text = stringResource(R.string.about), onClick = onOpenAbout, @@ -271,7 +271,7 @@ private fun MainContent( } @Composable -private fun MainActionCard( +private fun HomeActionCard( icon: ImageVector, text: String, subtext: String?, @@ -315,7 +315,7 @@ private fun MainActionCard( } @Composable -private fun MainActionLabel( +private fun HomeActionLabel( icon: ImageVector, text: String, onClick: () -> Unit, @@ -373,8 +373,8 @@ private fun AboutDialog(versionName: String, onDismiss: () -> Unit) { @PreviewWrapper(MihomoThemeWrapper::class) @PreviewMihomo @Composable -private fun MainContentRunningPreview() { - MainContent( +private fun HomeContentRunningPreview() { + HomeContent( snackbarHostState = SnackbarHostState(), clashRunning = true, forwarded = "1.23 GB", @@ -397,8 +397,8 @@ private fun MainContentRunningPreview() { @PreviewWrapper(MihomoThemeWrapper::class) @PreviewMihomo @Composable -private fun MainContentStoppedPreview() { - MainContent( +private fun HomeContentStoppedPreview() { + HomeContent( snackbarHostState = SnackbarHostState(), clashRunning = false, forwarded = null, diff --git a/ui/main/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt b/ui/home/src/main/kotlin/com/github/kr328/clash/home/vm/HomeViewModel.kt similarity index 98% rename from ui/main/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt rename to ui/home/src/main/kotlin/com/github/kr328/clash/home/vm/HomeViewModel.kt index 5fff8c49e5..27bc3d9ad8 100644 --- a/ui/main/src/main/kotlin/com/github/kr328/clash/main/vm/MainViewModel.kt +++ b/ui/home/src/main/kotlin/com/github/kr328/clash/home/vm/HomeViewModel.kt @@ -1,4 +1,4 @@ -package com.github.kr328.clash.main.vm +package com.github.kr328.clash.home.vm import android.app.Application import android.content.Intent @@ -27,7 +27,7 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -internal class MainViewModel(app: Application) : AndroidViewModel(app), DefaultLifecycleObserver { +internal class HomeViewModel(app: Application) : AndroidViewModel(app), DefaultLifecycleObserver { private var broadcastEventsJob: Job? = null private var trafficPollingJob: Job? = null private var fetchJob: Job? = null diff --git a/ui/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt b/ui/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt index 5e139d1020..2b9c56ff1c 100644 --- a/ui/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt +++ b/ui/src/main/kotlin/com/github/kr328/clash/ui/theme/Theme.kt @@ -107,11 +107,11 @@ data class MihomoDimens( val preferenceDialogButtonBarHorizontalPadding: Dp, val preferenceDialogButtonBarVerticalPadding: Dp, val preferenceFullscreenButtonPadding: Dp, - val mainCardMarginVertical: Dp, - val mainLabelMarginVertical: Dp, - val mainPaddingHorizontal: Dp, - val mainLogoSize: Dp, - val mainTopBannerHeight: Dp, + val homeCardMarginVertical: Dp, + val homeLabelMarginVertical: Dp, + val homePaddingHorizontal: Dp, + val homeLogoSize: Dp, + val homeTopBannerHeight: Dp, val proxyLayoutPadding: Dp, val proxyContentPadding: Dp, val proxyContentPaddingGrid3: Dp, @@ -168,11 +168,11 @@ private val DefaultMihomoDimens = preferenceDialogButtonBarHorizontalPadding = 16.dp, preferenceDialogButtonBarVerticalPadding = 8.dp, preferenceFullscreenButtonPadding = 20.dp, - mainCardMarginVertical = 5.dp, - mainLabelMarginVertical = 2.dp, - mainPaddingHorizontal = 30.dp, - mainLogoSize = 50.dp, - mainTopBannerHeight = 90.dp, + homeCardMarginVertical = 5.dp, + homeLabelMarginVertical = 2.dp, + homePaddingHorizontal = 30.dp, + homeLogoSize = 50.dp, + homeTopBannerHeight = 90.dp, proxyLayoutPadding = 3.dp, proxyContentPadding = 15.dp, proxyContentPaddingGrid3 = 12.dp,