From e1e7b48989a8df04d3c63e392e5e55688c4ca7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=8B=D1=82=D0=BA=D0=BE=D0=B2=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Tue, 28 Jan 2025 17:23:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D1=84?= =?UTF-8?q?=D1=80=D0=B0=D0=B3=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallenc/presentation/WallencUi.kt | 3 +-- .../navigation/NavigationState.kt | 8 ++++++- .../presentation/screens/main/MainScreen.kt | 23 ++++++++++++------- .../screens/local/vault/LocalVaultScreen.kt | 12 ++++++---- .../screens/shared/TextEditRoute.kt | 9 ++++++++ .../screens/shared/TextEditScreen.kt | 9 ++++++++ 6 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditRoute.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditScreen.kt diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/WallencUi.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/WallencUi.kt index fe9f386..1b27907 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/WallencUi.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/WallencUi.kt @@ -25,7 +25,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.toRoute import com.github.nullptroma.wallenc.presentation.navigation.NavBarItemData import com.github.nullptroma.wallenc.presentation.navigation.rememberNavigationState import com.github.nullptroma.wallenc.presentation.screens.main.MainRoute @@ -90,7 +89,7 @@ fun WallencNavRoot(viewModel: WallencViewModel = hiltViewModel()) { var route = topLevelRoutes[navBarItemData.screenRouteClass] if (route == null) throw NullPointerException("Route $route not found") - if (currentRoute?.startsWith(routeClassName) != true) navState.navigationTo( + if (currentRoute?.startsWith(routeClassName) != true) navState.changeTop( route ) }) diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavigationState.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavigationState.kt index 4df0c42..43585c2 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavigationState.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavigationState.kt @@ -11,13 +11,19 @@ import com.github.nullptroma.wallenc.presentation.screens.ScreenRoute class NavigationState( val navHostController: NavHostController ) { - fun navigationTo(route: ScreenRoute) { + fun changeTop(route: ScreenRoute) { navHostController.navigate(route) { popUpTo(navHostController.graph.findStartDestination().id) launchSingleTop = true restoreState = true } } + + fun push(route: ScreenRoute) { + navHostController.navigate(route) { + restoreState = true + } + } } @Composable diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt index e91a1e6..3f5a110 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt @@ -34,6 +34,8 @@ import com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vau import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsRoute import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsScreen import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsViewModel +import com.github.nullptroma.wallenc.presentation.screens.shared.TextEditRoute +import com.github.nullptroma.wallenc.presentation.screens.shared.TextEditScreen @OptIn(ExperimentalMaterial3Api::class) @@ -72,19 +74,18 @@ fun MainScreen( icon = { Text(stringResource(navBarItemData.nameStringResourceId)) }, selected = currentRoute?.startsWith(routeClassName) == true, onClick = { - var route = routes[navBarItemData.screenRouteClass] - if (route == null) - throw NullPointerException("Route $route not found") - if (currentRoute?.startsWith(routeClassName) != true) navState.navigationTo( - route - ) + val route = routes[navBarItemData.screenRouteClass] + ?: throw NullPointerException("Route ${navBarItemData.screenRouteClass} not found") + if (currentRoute?.startsWith(routeClassName) != true) + navState.changeTop( + route + ) }) } } HorizontalDivider() } }) { innerPaddings -> - NavHost( navState.navHostController, startDestination = routes[LocalVaultRoute::class.qualifiedName]!! @@ -98,7 +99,9 @@ fun MainScreen( LocalVaultScreen( modifier = Modifier.padding(innerPaddings), viewModel = localVaultViewModel - ) + ) { text -> + navState.push(TextEditRoute(text)) + } } composable(enterTransition = { fadeIn(tween(200)) @@ -110,6 +113,10 @@ fun MainScreen( viewModel = remoteVaultsViewModel ) } + composable { + val route: TextEditRoute = it.toRoute() + TextEditScreen(route.text) + } } } } \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt index a050644..368e5e3 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt @@ -53,7 +53,8 @@ import kotlin.random.Random @Composable fun LocalVaultScreen( modifier: Modifier = Modifier, - viewModel: LocalVaultViewModel = hiltViewModel() + viewModel: LocalVaultViewModel = hiltViewModel(), + openTextEdit: (String)->Unit ) { val uiState by viewModel.state.collectAsStateWithLifecycle() @@ -68,14 +69,16 @@ fun LocalVaultScreen( }) { innerPadding -> LazyColumn(modifier = Modifier.padding(innerPadding)) { items(uiState.storagesList) { tree -> - Storage(Modifier.padding(8.dp), tree) + Storage(Modifier.padding(8.dp), tree) { + openTextEdit(it.value.uuid.toString()) + } } } } } @Composable -fun Storage(modifier: Modifier, tree: Tree) { +fun Storage(modifier: Modifier, tree: Tree, onClick: (Tree) -> Unit) { val cur = tree.value val cardShape = RoundedCornerShape(30.dp) Column(modifier) { @@ -84,6 +87,7 @@ fun Storage(modifier: Modifier, tree: Tree) { .fillMaxWidth() .clip(cardShape) .clickable { + onClick(tree) //viewModel.printStorageInfoToLog(cur) }, shape = cardShape, @@ -123,7 +127,7 @@ fun Storage(modifier: Modifier, tree: Tree) { } } for(i in tree.children ?: listOf()) { - Storage(Modifier.padding(16.dp,0.dp,0.dp,0.dp), i) + Storage(Modifier.padding(16.dp,0.dp,0.dp,0.dp), i, onClick) } } } diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditRoute.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditRoute.kt new file mode 100644 index 0000000..d3d2d46 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditRoute.kt @@ -0,0 +1,9 @@ +package com.github.nullptroma.wallenc.presentation.screens.shared + +import com.github.nullptroma.wallenc.presentation.screens.ScreenRoute +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable + +@Serializable +@Parcelize +data class TextEditRoute(val text: String): ScreenRoute() diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditScreen.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditScreen.kt new file mode 100644 index 0000000..aa290eb --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/shared/TextEditScreen.kt @@ -0,0 +1,9 @@ +package com.github.nullptroma.wallenc.presentation.screens.shared + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable + +@Composable +fun TextEditScreen(text: String) { + Text("Hello from TextEdit with text $text") +} \ No newline at end of file