mirror of
https://github.com/gkd-kit/gkd.git
synced 2026-09-03 07:19:59 +08:00
refactor: extract main navigation
This commit is contained in:
@@ -8,9 +8,6 @@ import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.viewModels
|
||||
import androidx.compose.animation.slideInHorizontally
|
||||
import androidx.compose.animation.slideOutHorizontally
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Text
|
||||
@@ -29,10 +26,6 @@ import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsAnimationCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
|
||||
import androidx.navigation3.runtime.entryProvider
|
||||
import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
|
||||
import androidx.navigation3.ui.NavDisplay
|
||||
import com.dylanc.activityresult.launcher.PickContentLauncher
|
||||
import com.dylanc.activityresult.launcher.StartActivityLauncher
|
||||
import com.dylanc.activityresult.launcher.launchForResult
|
||||
@@ -57,61 +50,12 @@ import li.songe.gkd.service.StatusService
|
||||
import li.songe.gkd.service.fixRestartAutomatorService
|
||||
import li.songe.gkd.service.updateTopTaskAppId
|
||||
import li.songe.gkd.store.storeFlow
|
||||
import li.songe.gkd.ui.A11YScopeAppListRoute
|
||||
import li.songe.gkd.ui.A11yEventLogPage
|
||||
import li.songe.gkd.ui.A11yEventLogRoute
|
||||
import li.songe.gkd.ui.A11yScopeAppListPage
|
||||
import li.songe.gkd.ui.AboutPage
|
||||
import li.songe.gkd.ui.AboutRoute
|
||||
import li.songe.gkd.ui.ActionLogPage
|
||||
import li.songe.gkd.ui.ActionLogRoute
|
||||
import li.songe.gkd.ui.ActivityLogPage
|
||||
import li.songe.gkd.ui.ActivityLogRoute
|
||||
import li.songe.gkd.ui.AdvancedPage
|
||||
import li.songe.gkd.ui.AdvancedPageRoute
|
||||
import li.songe.gkd.ui.AppConfigPage
|
||||
import li.songe.gkd.ui.AppConfigRoute
|
||||
import li.songe.gkd.ui.AppOpsAllowPage
|
||||
import li.songe.gkd.ui.AppOpsAllowRoute
|
||||
import li.songe.gkd.ui.AuthA11yPage
|
||||
import li.songe.gkd.ui.AuthA11yRoute
|
||||
import li.songe.gkd.ui.BlockA11yAppListPage
|
||||
import li.songe.gkd.ui.BlockA11yAppListRoute
|
||||
import li.songe.gkd.ui.CrashReportPage
|
||||
import li.songe.gkd.ui.CrashReportRoute
|
||||
import li.songe.gkd.ui.EditBlockAppListPage
|
||||
import li.songe.gkd.ui.EditBlockAppListRoute
|
||||
import li.songe.gkd.ui.ImagePreviewPage
|
||||
import li.songe.gkd.ui.ImagePreviewRoute
|
||||
import li.songe.gkd.ui.PrivilegePage
|
||||
import li.songe.gkd.ui.PrivilegePageRoute
|
||||
import li.songe.gkd.ui.SlowGroupPage
|
||||
import li.songe.gkd.ui.SlowGroupRoute
|
||||
import li.songe.gkd.ui.SnapshotPage
|
||||
import li.songe.gkd.ui.SnapshotPageRoute
|
||||
import li.songe.gkd.ui.SubsAppGroupListPage
|
||||
import li.songe.gkd.ui.SubsAppGroupListRoute
|
||||
import li.songe.gkd.ui.SubsAppListPage
|
||||
import li.songe.gkd.ui.SubsAppListRoute
|
||||
import li.songe.gkd.ui.SubsCategoryGroupPage
|
||||
import li.songe.gkd.ui.SubsCategoryGroupRoute
|
||||
import li.songe.gkd.ui.SubsCategoryPage
|
||||
import li.songe.gkd.ui.SubsCategoryRoute
|
||||
import li.songe.gkd.ui.SubsGlobalGroupExcludePage
|
||||
import li.songe.gkd.ui.SubsGlobalGroupExcludeRoute
|
||||
import li.songe.gkd.ui.SubsGlobalGroupListPage
|
||||
import li.songe.gkd.ui.SubsGlobalGroupListRoute
|
||||
import li.songe.gkd.ui.UpsertRuleGroupPage
|
||||
import li.songe.gkd.ui.UpsertRuleGroupRoute
|
||||
import li.songe.gkd.ui.WebViewPage
|
||||
import li.songe.gkd.ui.WebViewRoute
|
||||
import li.songe.gkd.ui.component.BuildDialog
|
||||
import li.songe.gkd.ui.component.ShareLogDlg
|
||||
import li.songe.gkd.ui.component.SubsSheet
|
||||
import li.songe.gkd.ui.component.TermsAcceptDialog
|
||||
import li.songe.gkd.ui.component.TextDialog
|
||||
import li.songe.gkd.ui.home.HomePage
|
||||
import li.songe.gkd.ui.home.HomeRoute
|
||||
import li.songe.gkd.ui.share.FixedWindowInsets
|
||||
import li.songe.gkd.ui.share.LocalMainViewModel
|
||||
import li.songe.gkd.ui.style.AppTheme
|
||||
@@ -241,53 +185,7 @@ class MainActivity : ComponentActivity() {
|
||||
LocalMainViewModel provides mainVm
|
||||
) {
|
||||
AppTheme {
|
||||
NavDisplay(
|
||||
entryDecorators = listOf(
|
||||
rememberSaveableStateHolderNavEntryDecorator(),
|
||||
rememberViewModelStoreNavEntryDecorator(),
|
||||
),
|
||||
backStack = mainVm.backStack,
|
||||
onBack = mainVm::popPage,
|
||||
entryProvider = entryProvider {
|
||||
entry<HomeRoute> { HomePage() }
|
||||
entry<AuthA11yRoute> { AuthA11yPage() }
|
||||
entry<AboutRoute> { AboutPage() }
|
||||
entry<BlockA11yAppListRoute> { BlockA11yAppListPage() }
|
||||
entry<AdvancedPageRoute> { AdvancedPage() }
|
||||
entry<PrivilegePageRoute> { PrivilegePage() }
|
||||
entry<SnapshotPageRoute> { SnapshotPage() }
|
||||
entry<AppOpsAllowRoute> { AppOpsAllowPage() }
|
||||
entry<A11YScopeAppListRoute> { A11yScopeAppListPage() }
|
||||
entry<ActivityLogRoute> { ActivityLogPage() }
|
||||
entry<A11yEventLogRoute> { A11yEventLogPage() }
|
||||
entry<EditBlockAppListRoute> { EditBlockAppListPage() }
|
||||
entry<SlowGroupRoute> { SlowGroupPage() }
|
||||
entry<SubsAppListRoute> { SubsAppListPage(it) }
|
||||
entry<WebViewRoute> { WebViewPage(it) }
|
||||
entry<SubsCategoryRoute> { SubsCategoryPage(it) }
|
||||
entry<SubsGlobalGroupListRoute> { SubsGlobalGroupListPage(it) }
|
||||
entry<SubsGlobalGroupExcludeRoute> { SubsGlobalGroupExcludePage(it) }
|
||||
entry<ActionLogRoute> { ActionLogPage(it) }
|
||||
entry<ImagePreviewRoute> { ImagePreviewPage(it) }
|
||||
entry<UpsertRuleGroupRoute> { UpsertRuleGroupPage(it) }
|
||||
entry<SubsAppGroupListRoute> { SubsAppGroupListPage(it) }
|
||||
entry<AppConfigRoute> { AppConfigPage(it) }
|
||||
entry<CrashReportRoute> { CrashReportPage() }
|
||||
entry<SubsCategoryGroupRoute> { SubsCategoryGroupPage(it) }
|
||||
},
|
||||
transitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { -it })
|
||||
},
|
||||
popTransitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { -it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { it })
|
||||
},
|
||||
predictivePopTransitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { -it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { it })
|
||||
},
|
||||
)
|
||||
MainNavigation(mainVm)
|
||||
if (!mainVm.termsAcceptedFlow.collectAsState().value) {
|
||||
TermsAcceptDialog()
|
||||
} else {
|
||||
|
||||
113
app/src/main/kotlin/li/songe/gkd/MainNavigation.kt
Normal file
113
app/src/main/kotlin/li/songe/gkd/MainNavigation.kt
Normal file
@@ -0,0 +1,113 @@
|
||||
package li.songe.gkd
|
||||
|
||||
import androidx.compose.animation.slideInHorizontally
|
||||
import androidx.compose.animation.slideOutHorizontally
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
|
||||
import androidx.navigation3.runtime.entryProvider
|
||||
import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
|
||||
import androidx.navigation3.ui.NavDisplay
|
||||
import li.songe.gkd.ui.A11YScopeAppListRoute
|
||||
import li.songe.gkd.ui.A11yEventLogPage
|
||||
import li.songe.gkd.ui.A11yEventLogRoute
|
||||
import li.songe.gkd.ui.A11yScopeAppListPage
|
||||
import li.songe.gkd.ui.AboutPage
|
||||
import li.songe.gkd.ui.AboutRoute
|
||||
import li.songe.gkd.ui.ActionLogPage
|
||||
import li.songe.gkd.ui.ActionLogRoute
|
||||
import li.songe.gkd.ui.ActivityLogPage
|
||||
import li.songe.gkd.ui.ActivityLogRoute
|
||||
import li.songe.gkd.ui.AdvancedPage
|
||||
import li.songe.gkd.ui.AdvancedPageRoute
|
||||
import li.songe.gkd.ui.AppConfigPage
|
||||
import li.songe.gkd.ui.AppConfigRoute
|
||||
import li.songe.gkd.ui.AppOpsAllowPage
|
||||
import li.songe.gkd.ui.AppOpsAllowRoute
|
||||
import li.songe.gkd.ui.AuthA11yPage
|
||||
import li.songe.gkd.ui.AuthA11yRoute
|
||||
import li.songe.gkd.ui.BlockA11yAppListPage
|
||||
import li.songe.gkd.ui.BlockA11yAppListRoute
|
||||
import li.songe.gkd.ui.CrashReportPage
|
||||
import li.songe.gkd.ui.CrashReportRoute
|
||||
import li.songe.gkd.ui.EditBlockAppListPage
|
||||
import li.songe.gkd.ui.EditBlockAppListRoute
|
||||
import li.songe.gkd.ui.ImagePreviewPage
|
||||
import li.songe.gkd.ui.ImagePreviewRoute
|
||||
import li.songe.gkd.ui.PrivilegePage
|
||||
import li.songe.gkd.ui.PrivilegePageRoute
|
||||
import li.songe.gkd.ui.SlowGroupPage
|
||||
import li.songe.gkd.ui.SlowGroupRoute
|
||||
import li.songe.gkd.ui.SnapshotPage
|
||||
import li.songe.gkd.ui.SnapshotPageRoute
|
||||
import li.songe.gkd.ui.SubsAppGroupListPage
|
||||
import li.songe.gkd.ui.SubsAppGroupListRoute
|
||||
import li.songe.gkd.ui.SubsAppListPage
|
||||
import li.songe.gkd.ui.SubsAppListRoute
|
||||
import li.songe.gkd.ui.SubsCategoryGroupPage
|
||||
import li.songe.gkd.ui.SubsCategoryGroupRoute
|
||||
import li.songe.gkd.ui.SubsCategoryPage
|
||||
import li.songe.gkd.ui.SubsCategoryRoute
|
||||
import li.songe.gkd.ui.SubsGlobalGroupExcludePage
|
||||
import li.songe.gkd.ui.SubsGlobalGroupExcludeRoute
|
||||
import li.songe.gkd.ui.SubsGlobalGroupListPage
|
||||
import li.songe.gkd.ui.SubsGlobalGroupListRoute
|
||||
import li.songe.gkd.ui.UpsertRuleGroupPage
|
||||
import li.songe.gkd.ui.UpsertRuleGroupRoute
|
||||
import li.songe.gkd.ui.WebViewPage
|
||||
import li.songe.gkd.ui.WebViewRoute
|
||||
import li.songe.gkd.ui.home.HomePage
|
||||
import li.songe.gkd.ui.home.HomeRoute
|
||||
|
||||
private val mainRouteEntryProvider = entryProvider {
|
||||
entry<HomeRoute> { HomePage() }
|
||||
entry<AuthA11yRoute> { AuthA11yPage() }
|
||||
entry<AboutRoute> { AboutPage() }
|
||||
entry<BlockA11yAppListRoute> { BlockA11yAppListPage() }
|
||||
entry<AdvancedPageRoute> { AdvancedPage() }
|
||||
entry<PrivilegePageRoute> { PrivilegePage() }
|
||||
entry<SnapshotPageRoute> { SnapshotPage() }
|
||||
entry<AppOpsAllowRoute> { AppOpsAllowPage() }
|
||||
entry<A11YScopeAppListRoute> { A11yScopeAppListPage() }
|
||||
entry<ActivityLogRoute> { ActivityLogPage() }
|
||||
entry<A11yEventLogRoute> { A11yEventLogPage() }
|
||||
entry<EditBlockAppListRoute> { EditBlockAppListPage() }
|
||||
entry<SlowGroupRoute> { SlowGroupPage() }
|
||||
entry<SubsAppListRoute> { SubsAppListPage(it) }
|
||||
entry<WebViewRoute> { WebViewPage(it) }
|
||||
entry<SubsCategoryRoute> { SubsCategoryPage(it) }
|
||||
entry<SubsGlobalGroupListRoute> { SubsGlobalGroupListPage(it) }
|
||||
entry<SubsGlobalGroupExcludeRoute> { SubsGlobalGroupExcludePage(it) }
|
||||
entry<ActionLogRoute> { ActionLogPage(it) }
|
||||
entry<ImagePreviewRoute> { ImagePreviewPage(it) }
|
||||
entry<UpsertRuleGroupRoute> { UpsertRuleGroupPage(it) }
|
||||
entry<SubsAppGroupListRoute> { SubsAppGroupListPage(it) }
|
||||
entry<AppConfigRoute> { AppConfigPage(it) }
|
||||
entry<CrashReportRoute> { CrashReportPage() }
|
||||
entry<SubsCategoryGroupRoute> { SubsCategoryGroupPage(it) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MainNavigation(mainVm: MainViewModel) {
|
||||
NavDisplay(
|
||||
entryDecorators = listOf(
|
||||
rememberSaveableStateHolderNavEntryDecorator(),
|
||||
rememberViewModelStoreNavEntryDecorator(),
|
||||
),
|
||||
backStack = mainVm.backStack,
|
||||
onBack = mainVm::popPage,
|
||||
entryProvider = mainRouteEntryProvider,
|
||||
transitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { -it })
|
||||
},
|
||||
popTransitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { -it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { it })
|
||||
},
|
||||
predictivePopTransitionSpec = {
|
||||
slideInHorizontally(initialOffsetX = { -it }) togetherWith
|
||||
slideOutHorizontally(targetOffsetX = { it })
|
||||
},
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user