diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/BatteryTracker.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/BatteryTracker.kt index ec44afc..687ea07 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/BatteryTracker.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/BatteryTracker.kt @@ -3,7 +3,6 @@ package com.sockenklaus.batterytracker.ui import androidx.compose.animation.AnimatedContent import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material.* import androidx.compose.material.icons.Icons @@ -24,10 +23,10 @@ import com.sockenklaus.batterytracker.ui.models.MainViewModel import kotlinx.coroutines.launch object Routes { - const val HOME = "home" - const val ADD_BATTERY = "add_battery" - const val ADD_CHARGE = "add_charge" - const val BATTERY_DETAILS = "battery_details" + const val HOME = "Home" + const val ADD_BATTERY = "Add Battery" + const val ADD_CHARGE = "Add Charge" + const val BATTERY_DETAILS = "Battery Details" } @Composable @@ -44,16 +43,17 @@ fun BatteryTracker() { Routes.BATTERY_DETAILS -> DetailsTopAppBar( navController = state.navController, - changeCurrentScreen = { state.currentScreen = it } + drawerState = state.scaffoldState.drawerState, + appTitle = state.currentScreen ) else -> MainTopAppBar( drawerState = state.scaffoldState.drawerState, - appTitle = state.appTitle + appTitle = state.currentScreen, ) } } - ) { innerPadding -> + ) { _ -> ModalDrawer( drawerState = state.scaffoldState.drawerState, drawerContent = { @@ -82,19 +82,27 @@ fun BatteryTracker() { NavHost( navController = state.navController, startDestination = Routes.HOME, - modifier = Modifier.padding(innerPadding)) + ) { - composable(Routes.HOME) { Home(state.navController, state) } - composable(Routes.ADD_CHARGE) { AddCharge(state.navController) } - composable(Routes.ADD_BATTERY) { AddBattery(state.navController) } + composable(Routes.HOME) { + state.currentScreen = Routes.HOME + Home(state.navController) + } + composable(Routes.ADD_CHARGE) { + state.currentScreen = Routes.ADD_CHARGE + AddCharge(state.navController) + } + composable(Routes.ADD_BATTERY) { + state.currentScreen = Routes.ADD_BATTERY + AddBattery(state.navController) + } composable( route = "${Routes.BATTERY_DETAILS}/{batteryId}", arguments = listOf(navArgument("batteryId"){ type = NavType.IntType }) ) { navBackStackEntry -> + state.currentScreen = Routes.BATTERY_DETAILS BatteryDetails( - navController = state.navController, batteryId = navBackStackEntry.arguments?.getInt("batteryId"), - appState = state ) } } @@ -162,9 +170,7 @@ fun NavListItem( modifier = Modifier .clickable { scope.launch { - state.appTitle = text state.navController.navigate(route) - state.currentScreen = route state.scaffoldState.drawerState.close() } } diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddBattery.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddBattery.kt index 30f15aa..5798a4d 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddBattery.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddBattery.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import com.sockenklaus.batterytracker.R +import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.models.AddBatteryViewModel import com.sockenklaus.batterytracker.util.validateDecimal @@ -24,7 +25,7 @@ fun AddBattery(navController: NavController){ val model: AddBatteryViewModel = viewModel() val batteries by model.batteries.observeAsState(emptyList()) - val outerPadding = 24.dp + val outerPadding = 16.dp val innerPadding = 16.dp Column( @@ -68,7 +69,7 @@ fun AddBattery(navController: NavController){ if(model.batteryName.isBlank()) model.batteryHasError = true if(!model.batteryHasError && model.saveBattery(model.batteryName, model.declaredCapacity)){ - navController.navigate("home") + navController.navigate(Routes.HOME) } }, icon = { Icon(Icons.Default.Save, "Icon Save") }, diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddCharge.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddCharge.kt index 78e6fc1..73b322d 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddCharge.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/AddCharge.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import com.sockenklaus.batterytracker.R +import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.models.AddChargeViewModel import com.sockenklaus.batterytracker.ui.theme.Gray500 @@ -34,7 +35,7 @@ import java.util.* @OptIn(ExperimentalMaterialApi::class) @Composable fun AddCharge(navController: NavController){ - val outerPadding = 24.dp + val outerPadding = 16.dp val innerPadding = 16.dp var bIdExpanded by remember { mutableStateOf(false)} @@ -137,7 +138,7 @@ fun AddCharge(navController: NavController){ } if(!model.batteryHasError && !model.chargeHasError && model.saveCharge(batteries, model.batteryId.text, model.charge, model.date)){ - navController.navigate("home") + navController.navigate(Routes.HOME) } }, icon = { Icon(Icons.Default.Save, "Icon Save") }, diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt index 2043ced..27d798b 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/BatteryDetails.kt @@ -1,77 +1,50 @@ package com.sockenklaus.batterytracker.ui.composables -import androidx.activity.OnBackPressedCallback -import androidx.activity.OnBackPressedDispatcher -import androidx.activity.compose.LocalOnBackPressedDispatcherOwner -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp import androidx.navigation.NavController +import com.sockenklaus.batterytracker.ui.AppBarTitle import com.sockenklaus.batterytracker.ui.Routes -import com.sockenklaus.batterytracker.ui.models.MainViewModel @Composable fun BatteryDetails( - navController: NavController, - batteryId: Int? = null, - appState: MainViewModel + batteryId: Int? = null ){ - var onBack = { - val backTarget = navController.previousBackStackEntry?.destination?.route ?: Routes.HOME - appState.currentScreen = backTarget - navController.navigate(backTarget) + Column( + modifier = Modifier.padding(16.dp) + ){ + Text(batteryId.toString()) } - - BackPressHandler(onBackPressed = onBack) - - Text(batteryId.toString()) - } +@OptIn(ExperimentalMaterialApi::class) @Composable fun DetailsTopAppBar( navController: NavController, - changeCurrentScreen: (String) -> Unit + appTitle: String, + drawerState: DrawerState ){ TopAppBar( - title = { Text("Details") }, + title = { + AppBarTitle( + drawerTarget = drawerState.targetValue, + appTitle = appTitle + ) + }, navigationIcon = { IconButton( onClick = { - navController.navigate("home") - changeCurrentScreen(Routes.HOME) + navController.navigate(Routes.HOME) } ) { Icon(Icons.Default.ArrowBack, null) } } ) -} - -@Composable -fun BackPressHandler( - backPressedDispatcher: OnBackPressedDispatcher? = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher, - onBackPressed: () -> Unit -) { - val currentOnBackPressed by rememberUpdatedState(newValue = onBackPressed) - - val backCallback = remember { - object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - currentOnBackPressed() - } - } - } - - DisposableEffect(key1 = backPressedDispatcher) { - backPressedDispatcher?.addCallback(backCallback) - - onDispose { - backCallback.remove() - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/Home.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/Home.kt index aef2a37..830d630 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/Home.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/composables/Home.kt @@ -1,6 +1,5 @@ package com.sockenklaus.batterytracker.ui.composables -import android.telecom.Call import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn @@ -9,7 +8,6 @@ import androidx.compose.foundation.lazy.items import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -20,21 +18,17 @@ import com.sockenklaus.batterytracker.room.entities.Battery import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.models.HomeViewModel -import com.sockenklaus.batterytracker.ui.models.MainViewModel -import java.lang.reflect.GenericDeclaration @OptIn(ExperimentalMaterialApi::class) @Composable fun Home( - navController: NavController, - appState: MainViewModel + navController: NavController ) { val model: HomeViewModel = viewModel() val batteries by model.batteries.observeAsState(emptyList()) var filterText by remember { mutableStateOf("")} val filteredList = batteries.filter { it.name.contains(filterText, ignoreCase = true) } - val modHorizontalPadding = Modifier.padding(horizontal = 16.dp) Column { MyOutlinedTextFieldWithSuffix( @@ -42,18 +36,18 @@ fun Home( onValueChange = { filterText = it }, labelId = R.string.hint_filter_batteries, modifier = Modifier.padding( + top = 16.dp, start = 16.dp, - end = 16.dp, - top = 16.dp + end = 16.dp ) ) LazyColumn( - state = LazyListState() + state = LazyListState(), ) { items(filteredList){ battery -> ListItem( - text = { + text = { ListPrimaryText(battery) }, secondaryText = { @@ -65,10 +59,9 @@ fun Home( }, modifier = Modifier.clickable { navController.navigate("${Routes.BATTERY_DETAILS}/${battery.id}") - appState.currentScreen = Routes.BATTERY_DETAILS } ) - Divider(modHorizontalPadding) + Divider(Modifier.padding(horizontal = 16.dp)) } } } diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/models/MainViewModel.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/models/MainViewModel.kt index 089cbda..24781fb 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/models/MainViewModel.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/models/MainViewModel.kt @@ -2,17 +2,13 @@ package com.sockenklaus.batterytracker.ui.models import androidx.compose.material.* import androidx.compose.runtime.* -import androidx.compose.ui.graphics.BlendMode.Companion.Screen import androidx.lifecycle.ViewModel import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController -import com.sockenklaus.batterytracker.ui.AppBarTitle import com.sockenklaus.batterytracker.ui.Routes -import com.sockenklaus.batterytracker.ui.ToggleDrawerButton class MainViewModel : ViewModel() { - var appTitle by mutableStateOf("Home") var currentScreen by mutableStateOf(Routes.HOME) lateinit var navController: NavHostController