From bd0183da796f44de9dc072c2a694f2d79beeee29 Mon Sep 17 00:00:00 2001 From: Roman Pytkov Date: Sat, 23 Nov 2024 10:56:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallenc/presentation/WallencUi.kt | 93 ++++++++------ .../{NavBarItem.kt => NavBarItemData.kt} | 2 +- .../presentation/screens/main/MainRoute.kt | 2 +- .../presentation/screens/main/MainScreen.kt | 119 ++++++++++++++---- .../screens/main/MainViewModel.kt | 9 +- .../screens/local/vault/LocalVaultRoute.kt | 9 ++ .../screens/local/vault/LocalVaultScreen.kt | 15 +++ .../local/vault/LocalVaultScreenState.kt | 3 + .../local/vault/LocalVaultViewModel.kt | 10 ++ .../main/screens/remotes/RemoteVaultsRoute.kt | 9 ++ .../screens/remotes/RemoteVaultsScreen.kt | 15 +++ .../remotes/RemoteVaultsScreenState.kt | 3 + .../screens/remotes/RemoteVaultsViewModel.kt | 10 ++ presentation/src/main/res/values/strings.xml | 5 + 14 files changed, 234 insertions(+), 70 deletions(-) rename presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/{NavBarItem.kt => NavBarItemData.kt} (51%) create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultRoute.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreenState.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultViewModel.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsRoute.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreen.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreenState.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsViewModel.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 78d874e..0605d3a 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 @@ -3,6 +3,7 @@ package com.github.nullptroma.wallenc.presentation import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Menu @@ -19,14 +20,18 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp 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.NavBarItem +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 import com.github.nullptroma.wallenc.presentation.screens.main.MainScreen +import com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault.LocalVaultRoute +import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsRoute import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsRoute import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsScreen import com.github.nullptroma.wallenc.presentation.theme.WallencTheme @@ -46,59 +51,75 @@ fun WallencUi() { fun WallencNavRoot() { val navState = rememberNavigationState() - val topLevelScreenRoutes = rememberSaveable { + val mainNavState = rememberNavigationState() + val mainScreenRoutes = rememberSaveable { + mutableMapOf( + LocalVaultRoute::class.qualifiedName!! to LocalVaultRoute(), + RemoteVaultsRoute::class.qualifiedName!! to RemoteVaultsRoute() + ) + } + + val topLevelRoutes = rememberSaveable { mutableMapOf( MainRoute::class.qualifiedName!! to MainRoute(), SettingsRoute::class.qualifiedName!! to SettingsRoute("Base settings") ) } - // Все пункты меню верхнего уровня val topLevelNavBarItems = remember { - listOf( - NavBarItem("Main", MainRoute::class.qualifiedName!!, Icons.Rounded.Menu), - NavBarItem("Settings", SettingsRoute::class.qualifiedName!!, Icons.Rounded.Settings) + mapOf( + MainRoute::class.qualifiedName!! to NavBarItemData( + R.string.nav_label_main, MainRoute::class.qualifiedName!!, Icons.Rounded.Menu + ), + SettingsRoute::class.qualifiedName!! to NavBarItemData( + R.string.nav_label_settings, + SettingsRoute::class.qualifiedName!!, + Icons.Rounded.Settings + ) ) } - Scaffold( - bottomBar = { - NavigationBar { - val navBackStackEntry by navState.navHostController.currentBackStackEntryAsState() - val currentRoute = navBackStackEntry?.destination?.route - topLevelNavBarItems.forEach { - val routeClassName = it.screenRouteClass - NavigationBarItem( - icon = { - Icon( - it.icon, - contentDescription = it.name - ) - }, - label = { Text(it.name) }, - selected = currentRoute?.startsWith(routeClassName) == true, - onClick = { - var route = topLevelScreenRoutes[it.screenRouteClass] - if(route == null) - throw NoSuchElementException("Screen route of type ${it.screenRouteClass} no found") - if(currentRoute?.startsWith(routeClassName) != true) - navState.navigationTo(route) - } + Scaffold(bottomBar = { + NavigationBar(modifier = Modifier.height(64.dp)) { + val navBackStackEntry by navState.navHostController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route + topLevelNavBarItems.forEach { + val routeClassName = it.key + val navBarItemData = it.value + NavigationBarItem(icon = { + if (navBarItemData.icon != null) Icon( + navBarItemData.icon, + contentDescription = stringResource(navBarItemData.nameStringResourceId) ) - } + }, + label = { Text(stringResource(navBarItemData.nameStringResourceId)) }, + selected = currentRoute?.startsWith(routeClassName) == true, + onClick = { + var route = topLevelRoutes[navBarItemData.screenRouteClass] + if (route == null) + throw NullPointerException("Route $route not found") + if (currentRoute?.startsWith(routeClassName) != true) navState.navigationTo( + route + ) + }) } - }) { innerPaddings -> - NavHost(navState.navHostController, startDestination = topLevelScreenRoutes[MainRoute::class.qualifiedName]!!) { + } + }) { innerPaddings -> + NavHost( + navState.navHostController, + startDestination = topLevelRoutes[MainRoute::class.qualifiedName]!! + ) { composable(enterTransition = { fadeIn(tween(200)) }, exitTransition = { fadeOut(tween(200)) }) { - MainScreen(Modifier.padding(innerPaddings), onSettingsRoute = { settingsRoute -> - topLevelScreenRoutes[settingsRoute::class.qualifiedName!!] = settingsRoute - navState.navigationTo(settingsRoute) - }) + MainScreen( + modifier = Modifier.padding(innerPaddings), + navState = mainNavState, + routes = mainScreenRoutes + ) } composable(enterTransition = { fadeIn(tween(200)) diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItem.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItemData.kt similarity index 51% rename from presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItem.kt rename to presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItemData.kt index 10592e0..ce6c631 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItem.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/navigation/NavBarItemData.kt @@ -2,4 +2,4 @@ package com.github.nullptroma.wallenc.presentation.navigation import androidx.compose.ui.graphics.vector.ImageVector -data class NavBarItem(val name: String, val screenRouteClass: String, val icon: ImageVector) +data class NavBarItemData(val nameStringResourceId: Int, val screenRouteClass: String, val icon: ImageVector?) diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainRoute.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainRoute.kt index 994d79d..5d7bfd1 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainRoute.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainRoute.kt @@ -6,4 +6,4 @@ import kotlinx.serialization.Serializable @Serializable @Parcelize -class MainRoute: ScreenRoute() \ No newline at end of file +open class MainRoute: ScreenRoute() \ No newline at end of file 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 91fb003..df17ec2 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 @@ -1,39 +1,108 @@ package com.github.nullptroma.wallenc.presentation.screens.main -import androidx.compose.foundation.layout.Arrangement +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.imePadding -import androidx.compose.material3.Button +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.TextField import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsRoute +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import com.github.nullptroma.wallenc.presentation.R +import com.github.nullptroma.wallenc.presentation.navigation.NavBarItemData +import com.github.nullptroma.wallenc.presentation.navigation.NavigationState +import com.github.nullptroma.wallenc.presentation.navigation.rememberNavigationState +import com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault.LocalVaultRoute +import com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault.LocalVaultScreen +import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsRoute +import com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes.RemoteVaultsScreen +@OptIn(ExperimentalMaterial3Api::class) @androidx.compose.runtime.Composable -fun MainScreen(modifier: Modifier = Modifier, - viewModel: MainViewModel = hiltViewModel(), - onSettingsRoute: (SettingsRoute) -> Unit) { - val state = viewModel.stateFlow - var text by rememberSaveable { mutableStateOf("") } - val focusManager = LocalFocusManager.current - Column(modifier = modifier.imePadding().fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) { - TextField(text, onValueChange = { s -> - text = s - }) - Button( onClick = { - focusManager.clearFocus() - onSettingsRoute(SettingsRoute(text)) - }) { - Text("Press Me!") +fun MainScreen( + modifier: Modifier = Modifier, + viewModel: MainViewModel = hiltViewModel(), + navState: NavigationState = rememberNavigationState(), + routes: MutableMap = rememberSaveable { + mutableMapOf( + LocalVaultRoute::class.qualifiedName!! to LocalVaultRoute(), + RemoteVaultsRoute::class.qualifiedName!! to RemoteVaultsRoute() + ) + } +) { + val topLevelNavBarItems = remember { + mapOf( + LocalVaultRoute::class.qualifiedName!! to NavBarItemData( + R.string.nav_label_local_vault, LocalVaultRoute::class.qualifiedName!!, null + ), + RemoteVaultsRoute::class.qualifiedName!! to NavBarItemData( + R.string.nav_label_remote_vaults, RemoteVaultsRoute::class.qualifiedName!!, null + ) + ) + } + + Scaffold(modifier = modifier, contentWindowInsets = WindowInsets(0.dp), bottomBar = { + Column { + NavigationBar(modifier = Modifier.height(48.dp)) { + val navBackStackEntry by navState.navHostController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route + topLevelNavBarItems.forEach { + val routeClassName = it.key + val navBarItemData = it.value + NavigationBarItem(modifier = Modifier + .weight(1f) + .fillMaxHeight(), + 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 + ) + }) + } + } + HorizontalDivider() + } + }) { innerPaddings -> + + NavHost( + navState.navHostController, + startDestination = routes[LocalVaultRoute::class.qualifiedName]!! + ) { + composable(enterTransition = { + fadeIn(tween(200)) + }, exitTransition = { + fadeOut(tween(200)) + }) { + LocalVaultScreen(modifier = Modifier.padding(innerPaddings)) + } + composable(enterTransition = { + fadeIn(tween(200)) + }, exitTransition = { + fadeOut(tween(200)) + }) { + RemoteVaultsScreen(modifier = Modifier.padding(innerPaddings)) + } } } } \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt index 8e7286c..2c859e5 100644 --- a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt @@ -1,14 +1,9 @@ package com.github.nullptroma.wallenc.presentation.screens.main import androidx.lifecycle.ViewModel -import com.github.nullptroma.wallenc.domain.usecases.TestUseCase import dagger.hilt.android.lifecycle.HiltViewModel @HiltViewModel -class MainViewModel @javax.inject.Inject constructor( - testUseCase: TestUseCase, - testUseCase2: TestUseCase, - testUseCase3: TestUseCase, -): ViewModel() { - val stateFlow = MainScreenState("${testUseCase3.meta.name}, number ${testUseCase3.id}") +class MainViewModel @javax.inject.Inject constructor(): ViewModel() { + } \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultRoute.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultRoute.kt new file mode 100644 index 0000000..6f29dab --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultRoute.kt @@ -0,0 +1,9 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault + +import com.github.nullptroma.wallenc.presentation.screens.main.MainRoute +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable + +@Serializable +@Parcelize +class LocalVaultRoute: MainRoute() \ 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 new file mode 100644 index 0000000..314c719 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreen.kt @@ -0,0 +1,15 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault + +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel + + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LocalVaultScreen(modifier: Modifier = Modifier, + viewModel: LocalVaultViewModel = hiltViewModel()) { + Text("Local vault screen") +} \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreenState.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreenState.kt new file mode 100644 index 0000000..6bd8433 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultScreenState.kt @@ -0,0 +1,3 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault + +data class LocalVaultScreenState(val value: String) \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultViewModel.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultViewModel.kt new file mode 100644 index 0000000..f2922c7 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/local/vault/LocalVaultViewModel.kt @@ -0,0 +1,10 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.local.vault + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class LocalVaultViewModel @Inject constructor(): ViewModel() { + +} \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsRoute.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsRoute.kt new file mode 100644 index 0000000..db679a4 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsRoute.kt @@ -0,0 +1,9 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes + +import com.github.nullptroma.wallenc.presentation.screens.main.MainRoute +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable + +@Serializable +@Parcelize +class RemoteVaultsRoute: MainRoute() \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreen.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreen.kt new file mode 100644 index 0000000..09f7729 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreen.kt @@ -0,0 +1,15 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes + +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel + + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun RemoteVaultsScreen(modifier: Modifier = Modifier, + viewModel: RemoteVaultsViewModel = hiltViewModel()) { + Text("Remote vault screen") +} \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreenState.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreenState.kt new file mode 100644 index 0000000..77ca567 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsScreenState.kt @@ -0,0 +1,3 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes + +data class RemoteVaultsScreenState(val value: String) \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsViewModel.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsViewModel.kt new file mode 100644 index 0000000..7700370 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/screens/remotes/RemoteVaultsViewModel.kt @@ -0,0 +1,10 @@ +package com.github.nullptroma.wallenc.presentation.screens.main.screens.remotes + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class RemoteVaultsViewModel @Inject constructor(): ViewModel() { + +} \ No newline at end of file diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index c0e963e..72c42a2 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -1,4 +1,9 @@ + Local + Remotes + Main + Settings + Settings Screen Title! \ No newline at end of file