From 827a42bf49b8fec66cbcd0201fe079c125a2ed12 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sat, 25 Feb 2023 00:25:27 +0400 Subject: [PATCH] Navigation drawer instead of tools screen --- app/build.gradle.kts | 3 +- .../java/com/sadellie/unitto/UnittoApp.kt | 66 +++++++-- .../com/sadellie/unitto/UnittoNavigation.kt | 26 +--- .../unitto/core/base/TopLevelDestinations.kt | 34 +++-- .../unitto/core/ui/common/UnittoDrawerItem.kt | 45 +++++++ .../core/ui/common/UnittoDrawerSheet.kt | 57 ++++++++ .../unitto/data/userprefs/UserPreferences.kt | 4 +- .../navigation/CalculatorNavigation.kt | 8 +- .../navigation/ConverterNavigation.kt | 8 +- .../epoch/navigation/EpochNavigation.kt | 8 +- .../unitto/feature/settings/SettingsScreen.kt | 2 +- feature/tools/.gitignore | 1 - feature/tools/build.gradle.kts | 28 ---- feature/tools/consumer-rules.pro | 0 feature/tools/src/main/AndroidManifest.xml | 4 - .../unitto/feature/tools/ToolsScreen.kt | 126 ------------------ .../tools/navigation/ToolsNavigation.kt | 46 ------- settings.gradle.kts | 1 - 18 files changed, 198 insertions(+), 269 deletions(-) create mode 100644 core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerItem.kt create mode 100644 core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerSheet.kt delete mode 100644 feature/tools/.gitignore delete mode 100644 feature/tools/build.gradle.kts delete mode 100644 feature/tools/consumer-rules.pro delete mode 100644 feature/tools/src/main/AndroidManifest.xml delete mode 100644 feature/tools/src/main/java/com/sadellie/unitto/feature/tools/ToolsScreen.kt delete mode 100644 feature/tools/src/main/java/com/sadellie/unitto/feature/tools/navigation/ToolsNavigation.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c1115a32..3e09dc71 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -105,6 +105,7 @@ dependencies { coreLibraryDesugaring(libs.android.desugarJdkLibs) implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.material.icons.extended) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.com.github.sadellie.themmo) implementation(libs.com.google.accompanist.systemuicontroller) @@ -113,10 +114,10 @@ dependencies { implementation(project(mapOf("path" to ":feature:calculator"))) implementation(project(mapOf("path" to ":feature:settings"))) implementation(project(mapOf("path" to ":feature:unitslist"))) - implementation(project(mapOf("path" to ":feature:tools"))) implementation(project(mapOf("path" to ":feature:epoch"))) implementation(project(mapOf("path" to ":data:units"))) implementation(project(mapOf("path" to ":data:model"))) implementation(project(mapOf("path" to ":data:userprefs"))) implementation(project(mapOf("path" to ":core:ui"))) + implementation(project(mapOf("path" to ":core:base"))) } diff --git a/app/src/main/java/com/sadellie/unitto/UnittoApp.kt b/app/src/main/java/com/sadellie/unitto/UnittoApp.kt index de59e0b5..5e3f0f6f 100644 --- a/app/src/main/java/com/sadellie/unitto/UnittoApp.kt +++ b/app/src/main/java/com/sadellie/unitto/UnittoApp.kt @@ -19,13 +19,28 @@ package com.sadellie.unitto import androidx.compose.animation.core.tween +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Calculate +import androidx.compose.material.icons.filled.SwapHoriz +import androidx.compose.material3.DrawerValue import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalNavigationDrawer +import androidx.compose.material3.rememberDrawerState import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraph.Companion.findStartDestination +import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.google.accompanist.systemuicontroller.rememberSystemUiController +import com.sadellie.unitto.core.base.TopLevelDestinations +import com.sadellie.unitto.core.ui.common.UnittoDrawerSheet import com.sadellie.unitto.feature.converter.ConverterViewModel import com.sadellie.unitto.feature.unitslist.SecondViewModel import com.sadellie.unitto.core.ui.theme.AppTypography @@ -34,6 +49,7 @@ import com.sadellie.unitto.core.ui.theme.LightThemeColors import com.sadellie.unitto.feature.settings.SettingsViewModel import io.github.sadellie.themmo.Themmo import io.github.sadellie.themmo.rememberThemmoController +import kotlinx.coroutines.launch @Composable internal fun UnittoApp() { @@ -53,6 +69,18 @@ internal fun UnittoApp() { val navController = rememberNavController() val sysUiController = rememberSystemUiController() + // Navigation drawer stuff + val drawerState = rememberDrawerState(DrawerValue.Closed) + val drawerScope = rememberCoroutineScope() + val mainTabs = listOf( + TopLevelDestinations.Calculator to Icons.Default.Calculate, + TopLevelDestinations.Converter to Icons.Default.SwapHoriz + ) + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute by remember(navBackStackEntry?.destination) { + derivedStateOf { navBackStackEntry?.destination?.route } + } + Themmo( themmoController = themmoController, typography = AppTypography, @@ -60,14 +88,36 @@ internal fun UnittoApp() { ) { val backgroundColor = MaterialTheme.colorScheme.background - UnittoNavigation( - navController = navController, - converterViewModel = converterViewModel, - secondViewModel = secondViewModel, - settingsViewModel = settingsViewModel, - themmoController = it, - startDestination = userPrefs.value.startingScreen - ) + ModalNavigationDrawer( + drawerState = drawerState, + gesturesEnabled = true, + drawerContent = { + UnittoDrawerSheet( + modifier = Modifier, + mainTabs = mainTabs, + currentDestination = currentRoute + ) { + drawerScope.launch { drawerState.close() } + navController.navigate(it) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + } + ) { + UnittoNavigation( + navController = navController, + converterViewModel = converterViewModel, + secondViewModel = secondViewModel, + settingsViewModel = settingsViewModel, + themmoController = it, + startDestination = userPrefs.value.startingScreen, + openDrawer = { drawerScope.launch { drawerState.open() } } + ) + } SideEffect { sysUiController.setSystemBarsColor(backgroundColor) } } diff --git a/app/src/main/java/com/sadellie/unitto/UnittoNavigation.kt b/app/src/main/java/com/sadellie/unitto/UnittoNavigation.kt index 04e4ca0d..d0b7fa32 100644 --- a/app/src/main/java/com/sadellie/unitto/UnittoNavigation.kt +++ b/app/src/main/java/com/sadellie/unitto/UnittoNavigation.kt @@ -19,23 +19,16 @@ package com.sadellie.unitto import androidx.compose.runtime.Composable -import androidx.navigation.NavController import androidx.navigation.NavHostController -import androidx.navigation.NavOptions import androidx.navigation.compose.NavHost import com.sadellie.unitto.feature.calculator.navigation.calculatorScreen -import com.sadellie.unitto.feature.calculator.navigation.navigateToCalculator import com.sadellie.unitto.feature.converter.ConverterViewModel import com.sadellie.unitto.feature.converter.navigation.converterScreen -import com.sadellie.unitto.feature.converter.navigation.navigateToConverter import com.sadellie.unitto.feature.epoch.navigation.epochScreen -import com.sadellie.unitto.feature.epoch.navigation.navigateToEpoch import com.sadellie.unitto.feature.settings.SettingsViewModel import com.sadellie.unitto.feature.settings.navigation.navigateToSettings import com.sadellie.unitto.feature.settings.navigation.navigateToUnitGroups import com.sadellie.unitto.feature.settings.navigation.settingGraph -import com.sadellie.unitto.feature.tools.navigation.navigateToTools -import com.sadellie.unitto.feature.tools.navigation.toolsScreen import com.sadellie.unitto.feature.unitslist.SecondViewModel import com.sadellie.unitto.feature.unitslist.navigation.leftScreen import com.sadellie.unitto.feature.unitslist.navigation.navigateToLeftSide @@ -50,7 +43,8 @@ internal fun UnittoNavigation( secondViewModel: SecondViewModel, settingsViewModel: SettingsViewModel, themmoController: ThemmoController, - startDestination: String + startDestination: String, + openDrawer: () -> Unit ) { NavHost( navController = navController, @@ -60,7 +54,7 @@ internal fun UnittoNavigation( navigateToLeftScreen = navController::navigateToLeftSide, navigateToRightScreen = navController::navigateToRightSide, navigateToSettings = navController::navigateToSettings, - navigateToMenu = navController::navigateToTools, + navigateToMenu = openDrawer, viewModel = converterViewModel ) @@ -84,21 +78,11 @@ internal fun UnittoNavigation( navController = navController ) - toolsScreen( - navigateUpAction = navController::navigateUp, - navigateToConverter = { navController.navigateToConverter(navController.clearStack) }, - navigateToCalculator = { navController.navigateToCalculator(navController.clearStack) }, - navigateToEpoch = { navController.navigateToEpoch(navController.clearStack) } - ) - calculatorScreen( - navigateToMenu = navController::navigateToTools, + navigateToMenu = openDrawer, navigateToSettings = navController::navigateToSettings ) - epochScreen(navigateToMenu = navController::navigateToTools) + epochScreen(navigateToMenu = openDrawer) } } - -private val NavController.clearStack: NavOptions - get() = NavOptions.Builder().setPopUpTo(this.graph.id, false).build() \ No newline at end of file diff --git a/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt b/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt index d69e0b5c..fdd79d27 100644 --- a/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt +++ b/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt @@ -18,15 +18,31 @@ package com.sadellie.unitto.core.base -object TopLevelDestinations { - const val CONVERTER = "converter_route" - const val CALCULATOR = "calculator_route" - const val EPOCH = "epoch_route" -} +import androidx.annotation.StringRes -val TOP_LEVEL_DESTINATIONS: Map by lazy { - mapOf( - TopLevelDestinations.CONVERTER to R.string.unit_converter, - TopLevelDestinations.CALCULATOR to R.string.calculator, +sealed class TopLevelDestinations( + val route: String, + @StringRes val name: Int +) { + object Converter : TopLevelDestinations( + route = "converter_route", + name = R.string.unit_converter + ) + + object Calculator : TopLevelDestinations( + route = "calculator_route", + name = R.string.calculator + ) + + object Epoch : TopLevelDestinations( + route = "epoch_route", + name = R.string.epoch_converter + ) +} + +val TOP_LEVEL_DESTINATIONS: Map by lazy { + mapOf( + TopLevelDestinations.Converter to R.string.unit_converter, + TopLevelDestinations.Calculator to R.string.calculator, ) } diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerItem.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerItem.kt new file mode 100644 index 00000000..1fc51e88 --- /dev/null +++ b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerItem.kt @@ -0,0 +1,45 @@ +/* + * Unitto is a unit converter for Android + * Copyright (c) 2023 Elshan Agaev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.sadellie.unitto.core.ui.common + +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationDrawerItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import com.sadellie.unitto.core.base.TopLevelDestinations + +@Composable +internal fun UnittoDrawerItem( + modifier: Modifier = Modifier, + destination: TopLevelDestinations, + icon: ImageVector, + selected: Boolean, + onClick: (String) -> Unit +) { + NavigationDrawerItem( + modifier = modifier, + label = { Text(stringResource(destination.name)) }, + icon = { Icon(icon, stringResource(destination.name)) }, + selected = selected, + onClick = { onClick(destination.route) } + ) +} diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerSheet.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerSheet.kt new file mode 100644 index 00000000..5e3d35c4 --- /dev/null +++ b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/UnittoDrawerSheet.kt @@ -0,0 +1,57 @@ +/* + * Unitto is a unit converter for Android + * Copyright (c) 2023 Elshan Agaev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.sadellie.unitto.core.ui.common + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ModalDrawerSheet +import androidx.compose.material3.NavigationDrawerItemDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import com.sadellie.unitto.core.base.TopLevelDestinations + +@Composable +fun UnittoDrawerSheet( + modifier: Modifier, + mainTabs: List>, + currentDestination: String?, + onItemClick: (String) -> Unit +) { + ModalDrawerSheet( + modifier = modifier + ) { + Spacer(Modifier.height(24.dp)) + Text("Unitto", Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)) + Spacer(Modifier.height(12.dp)) + + mainTabs.forEach { (destination, icon) -> + UnittoDrawerItem( + modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding), + destination = destination, + icon = icon, + selected = destination.route == currentDestination, + onClick = onItemClick + ) + } + } +} diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt index c75ea6ab..d8453d02 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt @@ -67,7 +67,7 @@ data class UserPreferences( val shownUnitGroups: List = ALL_UNIT_GROUPS, val enableVibrations: Boolean = true, val enableToolsExperiment: Boolean = false, - val startingScreen: String = TopLevelDestinations.CONVERTER + val startingScreen: String = TopLevelDestinations.Converter.route ) /** @@ -133,7 +133,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS } ?: ALL_UNIT_GROUPS val enableVibrations: Boolean = preferences[PrefsKeys.ENABLE_VIBRATIONS] ?: true val enableToolsExperiment: Boolean = preferences[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] ?: false - val startingScreen: String = preferences[PrefsKeys.STARTING_SCREEN] ?: TopLevelDestinations.CONVERTER + val startingScreen: String = preferences[PrefsKeys.STARTING_SCREEN] ?: TopLevelDestinations.Converter.route UserPreferences( themingMode = themingMode, diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/navigation/CalculatorNavigation.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/navigation/CalculatorNavigation.kt index 80571915..a86bc6bf 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/navigation/CalculatorNavigation.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/navigation/CalculatorNavigation.kt @@ -18,19 +18,13 @@ package com.sadellie.unitto.feature.calculator.navigation -import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.navDeepLink import com.sadellie.unitto.core.base.TopLevelDestinations import com.sadellie.unitto.feature.calculator.CalculatorRoute -private const val calculatorRoute = TopLevelDestinations.CALCULATOR - -fun NavController.navigateToCalculator(navOptions: NavOptions) { - navigate(calculatorRoute, navOptions) -} +private val calculatorRoute: String by lazy { TopLevelDestinations.Calculator.route } fun NavGraphBuilder.calculatorScreen( navigateToMenu: () -> Unit, diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/navigation/ConverterNavigation.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/navigation/ConverterNavigation.kt index d8d8cc53..aed19e68 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/navigation/ConverterNavigation.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/navigation/ConverterNavigation.kt @@ -18,19 +18,13 @@ package com.sadellie.unitto.feature.converter.navigation -import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.sadellie.unitto.core.base.TopLevelDestinations import com.sadellie.unitto.feature.converter.ConverterRoute import com.sadellie.unitto.feature.converter.ConverterViewModel -const val converterRoute = TopLevelDestinations.CONVERTER - -fun NavController.navigateToConverter(navOptions: NavOptions) { - navigate(converterRoute, navOptions) -} +private val converterRoute: String by lazy { TopLevelDestinations.Converter.route } fun NavGraphBuilder.converterScreen( navigateToLeftScreen: (String) -> Unit, diff --git a/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/navigation/EpochNavigation.kt b/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/navigation/EpochNavigation.kt index 7f12e485..59b94afb 100644 --- a/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/navigation/EpochNavigation.kt +++ b/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/navigation/EpochNavigation.kt @@ -18,19 +18,13 @@ package com.sadellie.unitto.feature.epoch.navigation -import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.navDeepLink import com.sadellie.unitto.core.base.TopLevelDestinations import com.sadellie.unitto.feature.epoch.EpochRoute -private const val epochRoute = TopLevelDestinations.EPOCH - -fun NavController.navigateToEpoch(navOptions: NavOptions) { - navigate(epochRoute, navOptions) -} +private val epochRoute: String by lazy { TopLevelDestinations.Epoch.route } fun NavGraphBuilder.epochScreen( navigateToMenu: () -> Unit diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt index 06c3cbb9..0facf278 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt @@ -254,7 +254,7 @@ internal fun SettingsScreen( AlertDialogWithList( title = stringResource(R.string.starting_screen_setting), selectedItemIndex = userPrefs.value.startingScreen, - listItems = TOP_LEVEL_DESTINATIONS, + listItems = TOP_LEVEL_DESTINATIONS.mapKeys { it.key.route }, selectAction = viewModel::updateStartingScreen, dismissAction = { resetDialog() } ) diff --git a/feature/tools/.gitignore b/feature/tools/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/tools/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/tools/build.gradle.kts b/feature/tools/build.gradle.kts deleted file mode 100644 index 2b933c23..00000000 --- a/feature/tools/build.gradle.kts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -plugins { - id("unitto.library") - id("unitto.library.compose") - id("unitto.library.feature") - id("unitto.android.hilt") -} - -android { - namespace = "com.sadellie.unitto.feature.tools" -} diff --git a/feature/tools/consumer-rules.pro b/feature/tools/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/tools/src/main/AndroidManifest.xml b/feature/tools/src/main/AndroidManifest.xml deleted file mode 100644 index a5918e68..00000000 --- a/feature/tools/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/ToolsScreen.kt b/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/ToolsScreen.kt deleted file mode 100644 index cdab3e9e..00000000 --- a/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/ToolsScreen.kt +++ /dev/null @@ -1,126 +0,0 @@ -package com.sadellie.unitto.feature.tools - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Calculate -import androidx.compose.material.icons.filled.Schedule -import androidx.compose.material.icons.filled.SwapHoriz -import androidx.compose.material3.Badge -import androidx.compose.material3.Card -import androidx.compose.material3.Icon -import androidx.compose.material3.ListItem -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.sadellie.unitto.core.ui.common.UnittoLargeTopAppBar - -@Composable -@Suppress("UNUSED_PARAMETER") -internal fun ToolsScreen( - navigateUpAction: () -> Unit, - navigateToConverter: () -> Unit, - navigateToCalculator: () -> Unit, - navigateToEpoch: () -> Unit -) { - UnittoLargeTopAppBar( - title = stringResource(R.string.tools_screen), - navigateUpAction = navigateUpAction - ) { padding -> - LazyColumn(contentPadding = padding) { - item { - Card( - Modifier - .clickable(onClick = {}) - .padding(16.dp) - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(12.dp) - ) { - Text( - text = stringResource(R.string.tools_notice_title), - style = MaterialTheme.typography.titleLarge - ) - Text( - text = stringResource(R.string.tools_notice_description), - style = MaterialTheme.typography.bodyMedium - ) - Text( - modifier = Modifier.align(Alignment.End), - text = stringResource(R.string.click_to_read_more), - style = MaterialTheme.typography.labelLarge - ) - } - } - } - item { - ListItem( - leadingContent = { - Icon( - Icons.Default.SwapHoriz, - stringResource(R.string.unit_converter) - ) - }, - headlineText = { Text(stringResource(R.string.unit_converter)) }, - supportingText = { Text(stringResource(R.string.unit_converter_support)) }, - modifier = Modifier.clickable { navigateToConverter() } - ) - } - item { - ListItem( - leadingContent = { - Icon( - Icons.Default.Calculate, - stringResource(R.string.calculator) - ) - }, - headlineText = { Text(stringResource(R.string.calculator)) }, - supportingText = { Text(stringResource(R.string.calculator_support)) }, - modifier = Modifier.clickable { navigateToCalculator() } - ) - } - item { - ListItem( - leadingContent = { - Icon( - Icons.Default.Schedule, - stringResource(R.string.epoch_converter) - ) - }, - headlineText = { - Row(horizontalArrangement = Arrangement.spacedBy(4.dp)) { - Text(stringResource(R.string.epoch_converter)) - Badge { Text(stringResource(R.string.soon_label)) } - } - }, - supportingText = { Text(stringResource(R.string.epoch_converter_support)) }, - modifier = Modifier.alpha(0.5f) - ) - } - } - } -} - -@Preview -@Composable -internal fun PreviewToolsScreen() { - ToolsScreen( - navigateUpAction = {}, - navigateToConverter = {}, - navigateToEpoch = {}, - navigateToCalculator = {} - ) -} \ No newline at end of file diff --git a/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/navigation/ToolsNavigation.kt b/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/navigation/ToolsNavigation.kt deleted file mode 100644 index 7fe47c2c..00000000 --- a/feature/tools/src/main/java/com/sadellie/unitto/feature/tools/navigation/ToolsNavigation.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.sadellie.unitto.feature.tools.navigation - -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import com.sadellie.unitto.feature.tools.ToolsScreen - -private const val toolsRoute = "tools_route" - -fun NavController.navigateToTools() { - navigate(toolsRoute) -} - -fun NavGraphBuilder.toolsScreen( - navigateUpAction: () -> Unit, - navigateToConverter: () -> Unit, - navigateToCalculator: () -> Unit, - navigateToEpoch: () -> Unit -) { - composable(toolsRoute) { - ToolsScreen( - navigateUpAction = navigateUpAction, - navigateToConverter = navigateToConverter, - navigateToCalculator = navigateToCalculator, - navigateToEpoch = navigateToEpoch - ) - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 86a0e810..320aa67e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -24,7 +24,6 @@ include(":feature:converter") include(":feature:unitslist") include(":feature:calculator") include(":feature:settings") -include(":feature:tools") include(":feature:epoch") include(":data:userprefs") include(":data:unitgroups")