From 47187f0c7dcca973a13c54e0e33db92e4384d889 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Fri, 18 Oct 2024 16:02:23 -0700 Subject: [PATCH] Move common part to commonMain --- .../util/ProfileVerifierLogger.kt | 1 - .../nowinandroid/MainActivityViewModel.kt | 0 .../samples/apps/nowinandroid/di/AppModule.kt | 2 +- .../nowinandroid/navigation/NiaNavHost.kt | 2 +- .../navigation/TopLevelDestination.kt | 0 .../samples/apps/nowinandroid/ui/NiaApp.kt | 5 +-- .../apps/nowinandroid/ui/NiaAppState.kt | 38 +++++++++---------- .../interests2pane/Interests2PaneViewModel.kt | 0 .../InterestsListDetailScreen.kt | 24 ++++++------ 9 files changed, 35 insertions(+), 37 deletions(-) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt (100%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt (97%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt (98%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt (100%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt (98%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt (90%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt (100%) rename app/src/{androidMain => commonMain}/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt (92%) diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt index b27948b55..6afb35a04 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt +++ b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt @@ -48,7 +48,6 @@ import org.koin.core.annotation.Single * * @see androidx.profileinstaller.ProfileVerifier.CompilationStatus.ResultCode */ -@Single class ProfileVerifierLogger( @ApplicationScope private val scope: CoroutineScope, ) { diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt similarity index 100% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt similarity index 97% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt index aaa968483..d551fd5b3 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt +++ b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/di/AppModule.kt @@ -58,5 +58,5 @@ val appModules = module { *networkModule().toTypedArray(), ) includes(featureModules) - includes(JankStatsModule().module, AppModule().module) + includes(AppModule().module) } diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt similarity index 98% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index f878c003b..035c19faf 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt similarity index 100% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt similarity index 98% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index da24fe015..8a81c51ea 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,7 +54,6 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavDestination @@ -180,7 +179,7 @@ internal fun NiaApp( ) { Scaffold( modifier = modifier.semantics { - testTagsAsResourceId = true +// testTagsAsResourceId = true }, containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onBackground, diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt similarity index 90% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 75a294c01..be612d531 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.navigation.NavController +import androidx.compose.ui.util.trace import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavGraph.Companion.findStartDestination @@ -28,11 +28,9 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions -import androidx.tracing.trace import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor -import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.navigateToBookmarks import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests @@ -57,7 +55,7 @@ fun rememberNiaAppState( coroutineScope: CoroutineScope = rememberCoroutineScope(), navController: NavHostController = rememberNavController(), ): NiaAppState { - NavigationTrackingSideEffect(navController) +// NavigationTrackingSideEffect(navController) return remember( navController, coroutineScope, @@ -145,7 +143,7 @@ class NiaAppState( // Pop up to the start destination of the graph to // avoid building up a large stack of destinations // on the back stack as users select items - popUpTo(navController.graph.findStartDestination().id) { + popUpTo(navController.graph.findStartDestination()) { saveState = true } // Avoid multiple copies of the same destination when @@ -169,17 +167,17 @@ class NiaAppState( /** * Stores information about navigation events to be used with JankStats */ -@Composable -private fun NavigationTrackingSideEffect(navController: NavHostController) { - TrackDisposableJank(navController) { metricsHolder -> - val listener = NavController.OnDestinationChangedListener { _, destination, _ -> - metricsHolder.state?.putState("Navigation", destination.route.toString()) - } - - navController.addOnDestinationChangedListener(listener) - - onDispose { - navController.removeOnDestinationChangedListener(listener) - } - } -} +//@Composable +//private fun NavigationTrackingSideEffect(navController: NavHostController) { +// TrackDisposableJank(navController) { metricsHolder -> +// val listener = NavController.OnDestinationChangedListener { _, destination, _ -> +// metricsHolder.state?.putState("Navigation", destination.route.toString()) +// } +// +// navController.addOnDestinationChangedListener(listener) +// +// onDispose { +// navController.removeOnDestinationChangedListener(listener) +// } +// } +//} diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt similarity index 100% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt similarity index 92% rename from app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt rename to app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt index 34fc642c9..02e51b6d2 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt +++ b/app/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt @@ -16,8 +16,6 @@ package com.google.samples.apps.nowinandroid.ui.interests2pane -import androidx.activity.compose.BackHandler -import androidx.annotation.Keep import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo @@ -50,12 +48,13 @@ import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToT import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen import kotlinx.serialization.Serializable import org.koin.compose.viewmodel.koinViewModel -import java.util.UUID +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid @Serializable internal object TopicPlaceholderRoute // TODO: Remove @Keep when https://issuetracker.google.com/353898971 is fixed -@Keep +//@Keep @Serializable internal object DetailPaneNavHostRoute fun NavGraphBuilder.interestsListDetailScreen() { @@ -77,7 +76,7 @@ internal fun InterestsListDetailScreen( ) } -@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@OptIn(ExperimentalMaterial3AdaptiveApi::class, ExperimentalUuidApi::class) @Composable internal fun InterestsListDetailScreen( selectedTopicId: String?, @@ -93,18 +92,21 @@ internal fun InterestsListDetailScreen( }, ), ) - BackHandler(listDetailNavigator.canNavigateBack()) { - listDetailNavigator.navigateBack() - } + // https://youtrack.jetbrains.com/issue/CMP-4419 + // Support `BackHandler`/`PredictiveBackHandler` + +// BackHandler(listDetailNavigator.canNavigateBack()) { +// listDetailNavigator.navigateBack() +// } var nestedNavHostStartRoute by remember { val route = selectedTopicId?.let { TopicRoute(id = it) } ?: TopicPlaceholderRoute mutableStateOf(route) } var nestedNavKey by rememberSaveable( - stateSaver = Saver({ it.toString() }, UUID::fromString), + stateSaver = Saver({ it.toByteArray() }, Uuid::fromByteArray), ) { - mutableStateOf(UUID.randomUUID()) + mutableStateOf(Uuid.random()) } val nestedNavController = key(nestedNavKey) { rememberNavController() @@ -121,7 +123,7 @@ internal fun InterestsListDetailScreen( } else { // Otherwise, recreate the NavHost entirely, and start at the new destination nestedNavHostStartRoute = TopicRoute(id = topicId) - nestedNavKey = UUID.randomUUID() + nestedNavKey = Uuid.random() } listDetailNavigator.navigateTo(ListDetailPaneScaffoldRole.Detail) }