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 65b88c2..95a476f 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 @@ -1,6 +1,7 @@ package com.sockenklaus.batterytracker.ui.composables import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.icons.Icons @@ -13,7 +14,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.text.toUpperCase import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController @@ -22,7 +22,6 @@ 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 -import java.util.* @Composable fun AddBattery(navController: NavController){ @@ -91,6 +90,11 @@ fun AddBattery(navController: NavController){ keyboardType = KeyboardType.Decimal, imeAction = ImeAction.Done ), + keyboardActions = KeyboardActions( + onDone = { + saveBattery(model = model, navController = navController) + } + ), leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }, suffix = "Ah", modifier = Modifier.fillMaxWidth() @@ -99,16 +103,21 @@ fun AddBattery(navController: NavController){ Spacer(Modifier.size(outerPadding)) ExtendedFloatingActionButton( - onClick = { - if(model.batteryName.isBlank()) model.batteryHasError = true - - if(!model.batteryHasError && model.saveBattery(model.batteryName, model.declaredCapacity)){ - navController.navigate(Routes.HOME) - } - }, + onClick = { saveBattery(model = model, navController = navController) }, icon = { Icon(Icons.Default.Save, "Icon Save") }, text = { Text(stringResource(R.string.button_save_battery)) }, modifier = Modifier.align(Alignment.End) ) } +} + +private fun saveBattery( + model: AddBatteryViewModel, + navController: NavController +){ + if(model.batteryName.isBlank()) model.batteryHasError = true + + if(!model.batteryHasError && model.saveBattery(model.batteryName, model.declaredCapacity)) { + navController.navigate(Routes.HOME) + } } \ No newline at end of file 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 0168784..bf7abcf 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 @@ -2,6 +2,7 @@ package com.sockenklaus.batterytracker.ui.composables import android.app.DatePickerDialog import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.icons.Icons @@ -23,6 +24,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.room.entities.Battery import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.models.AddChargeViewModel @@ -81,6 +83,12 @@ fun AddCharge( keyboardOptions = KeyboardOptions( imeAction = ImeAction.Next ), + keyboardActions = KeyboardActions( + onNext = { + bIdExpanded = false + defaultKeyboardAction(ImeAction.Next) + } + ), singleLine = true ) @@ -124,6 +132,11 @@ fun AddCharge( keyboardType = KeyboardType.Decimal, imeAction = ImeAction.Done ), + keyboardActions = KeyboardActions( + onDone = { + saveCharge(batteries, model, navController) + } + ), labelId = R.string.hint_charge, leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") }, isError = model.chargeHasError, @@ -155,14 +168,7 @@ fun AddCharge( if(model.charge.isBlank()){ model.chargeHasError = true } - - if(!model.batteryHasError && !model.chargeHasError && model.saveCharge(batteries, model.batteryName.text, model.charge, model.date)){ - val id = model.getBatId( - batteries, - model.batteryName.text - ) - navController.navigate("${Routes.BATTERY_DETAILS}/${id}") - } + saveCharge(batteries, model, navController) }, icon = { Icon(Icons.Default.Save, "Icon Save") }, modifier = Modifier.align(Alignment.End) @@ -171,6 +177,31 @@ fun AddCharge( } } +fun saveCharge( + batteries: List, + model: AddChargeViewModel, + navController: NavController +) { + if(!batteries.any{ it.name == model.batteryName.text }){ + model.batteryHasError = true + model.batteryHelper = R.string.helper_battery_not_found + } + if(model.batteryName.text.isBlank()){ + model.batteryHasError = true + model.batteryHelper = R.string.helper_required + } + if(model.charge.isBlank()){ + model.chargeHasError = true + } + + if(!model.batteryHasError && !model.chargeHasError && model.saveCharge(batteries, model.batteryName.text, model.charge, model.date)){ + val id = model.getBatId( + batteries, + model.batteryName.text + ) + navController.navigate("${Routes.BATTERY_DETAILS}/${id}") + } +} @Composable fun ChargeDatePicker( 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 9481f75..4b8aea6 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 @@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.icons.Icons @@ -58,6 +59,11 @@ fun Home( singleLine = true, keyboardOptions = KeyboardOptions( imeAction = ImeAction.Search + ), + keyboardActions = KeyboardActions( + onSearch = { + + } ) )