diff --git a/app/src/main/kotlin/li/songe/gkd/MainActivity.kt b/app/src/main/kotlin/li/songe/gkd/MainActivity.kt index aa25413d..056fd807 100644 --- a/app/src/main/kotlin/li/songe/gkd/MainActivity.kt +++ b/app/src/main/kotlin/li/songe/gkd/MainActivity.kt @@ -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 { HomePage() } - entry { AuthA11yPage() } - entry { AboutPage() } - entry { BlockA11yAppListPage() } - entry { AdvancedPage() } - entry { PrivilegePage() } - entry { SnapshotPage() } - entry { AppOpsAllowPage() } - entry { A11yScopeAppListPage() } - entry { ActivityLogPage() } - entry { A11yEventLogPage() } - entry { EditBlockAppListPage() } - entry { SlowGroupPage() } - entry { SubsAppListPage(it) } - entry { WebViewPage(it) } - entry { SubsCategoryPage(it) } - entry { SubsGlobalGroupListPage(it) } - entry { SubsGlobalGroupExcludePage(it) } - entry { ActionLogPage(it) } - entry { ImagePreviewPage(it) } - entry { UpsertRuleGroupPage(it) } - entry { SubsAppGroupListPage(it) } - entry { AppConfigPage(it) } - entry { CrashReportPage() } - entry { 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 { diff --git a/app/src/main/kotlin/li/songe/gkd/MainNavigation.kt b/app/src/main/kotlin/li/songe/gkd/MainNavigation.kt new file mode 100644 index 00000000..b4b4e5bc --- /dev/null +++ b/app/src/main/kotlin/li/songe/gkd/MainNavigation.kt @@ -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 { HomePage() } + entry { AuthA11yPage() } + entry { AboutPage() } + entry { BlockA11yAppListPage() } + entry { AdvancedPage() } + entry { PrivilegePage() } + entry { SnapshotPage() } + entry { AppOpsAllowPage() } + entry { A11yScopeAppListPage() } + entry { ActivityLogPage() } + entry { A11yEventLogPage() } + entry { EditBlockAppListPage() } + entry { SlowGroupPage() } + entry { SubsAppListPage(it) } + entry { WebViewPage(it) } + entry { SubsCategoryPage(it) } + entry { SubsGlobalGroupListPage(it) } + entry { SubsGlobalGroupExcludePage(it) } + entry { ActionLogPage(it) } + entry { ImagePreviewPage(it) } + entry { UpsertRuleGroupPage(it) } + entry { SubsAppGroupListPage(it) } + entry { AppConfigPage(it) } + entry { CrashReportPage() } + entry { 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 }) + }, + ) +}