Merge HEAD with 6e0eb1c8f4

This commit is contained in:
Sockenklaus
2022-11-19 15:53:35 +01:00
3 changed files with 63 additions and 17 deletions

View File

@@ -1,6 +1,7 @@
package com.sockenklaus.batterytracker.ui.composables package com.sockenklaus.batterytracker.ui.composables
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons 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.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.toUpperCase
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController 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.composables.util.MyOutlinedTextFieldWithSuffix
import com.sockenklaus.batterytracker.ui.models.AddBatteryViewModel import com.sockenklaus.batterytracker.ui.models.AddBatteryViewModel
import com.sockenklaus.batterytracker.util.validateDecimal import com.sockenklaus.batterytracker.util.validateDecimal
import java.util.*
@Composable @Composable
fun AddBattery(navController: NavController){ fun AddBattery(navController: NavController){
@@ -91,6 +90,11 @@ fun AddBattery(navController: NavController){
keyboardType = KeyboardType.Decimal, keyboardType = KeyboardType.Decimal,
imeAction = ImeAction.Done imeAction = ImeAction.Done
), ),
keyboardActions = KeyboardActions(
onDone = {
saveBattery(model = model, navController = navController)
}
),
leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }, leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") },
suffix = "Ah", suffix = "Ah",
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
@@ -99,16 +103,21 @@ fun AddBattery(navController: NavController){
Spacer(Modifier.size(outerPadding)) Spacer(Modifier.size(outerPadding))
ExtendedFloatingActionButton( ExtendedFloatingActionButton(
onClick = { onClick = { saveBattery(model = model, navController = navController) },
if(model.batteryName.isBlank()) model.batteryHasError = true
if(!model.batteryHasError && model.saveBattery(model.batteryName, model.declaredCapacity)){
navController.navigate(Routes.HOME)
}
},
icon = { Icon(Icons.Default.Save, "Icon Save") }, icon = { Icon(Icons.Default.Save, "Icon Save") },
text = { Text(stringResource(R.string.button_save_battery)) }, text = { Text(stringResource(R.string.button_save_battery)) },
modifier = Modifier.align(Alignment.End) 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)
}
} }

View File

@@ -2,6 +2,7 @@ package com.sockenklaus.batterytracker.ui.composables
import android.app.DatePickerDialog import android.app.DatePickerDialog
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@@ -23,6 +24,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import com.sockenklaus.batterytracker.R import com.sockenklaus.batterytracker.R
import com.sockenklaus.batterytracker.room.entities.Battery
import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.Routes
import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix
import com.sockenklaus.batterytracker.ui.models.AddChargeViewModel import com.sockenklaus.batterytracker.ui.models.AddChargeViewModel
@@ -81,6 +83,12 @@ fun AddCharge(
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Next imeAction = ImeAction.Next
), ),
keyboardActions = KeyboardActions(
onNext = {
bIdExpanded = false
defaultKeyboardAction(ImeAction.Next)
}
),
singleLine = true singleLine = true
) )
@@ -124,6 +132,11 @@ fun AddCharge(
keyboardType = KeyboardType.Decimal, keyboardType = KeyboardType.Decimal,
imeAction = ImeAction.Done imeAction = ImeAction.Done
), ),
keyboardActions = KeyboardActions(
onDone = {
saveCharge(batteries, model, navController)
}
),
labelId = R.string.hint_charge, labelId = R.string.hint_charge,
leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") }, leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") },
isError = model.chargeHasError, isError = model.chargeHasError,
@@ -155,14 +168,7 @@ fun AddCharge(
if(model.charge.isBlank()){ if(model.charge.isBlank()){
model.chargeHasError = true model.chargeHasError = true
} }
saveCharge(batteries, model, navController)
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}")
}
}, },
icon = { Icon(Icons.Default.Save, "Icon Save") }, icon = { Icon(Icons.Default.Save, "Icon Save") },
modifier = Modifier.align(Alignment.End) modifier = Modifier.align(Alignment.End)
@@ -171,6 +177,31 @@ fun AddCharge(
} }
} }
fun saveCharge(
batteries: List<Battery>,
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 @Composable
fun ChargeDatePicker( fun ChargeDatePicker(

View File

@@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@@ -58,6 +59,11 @@ fun Home(
singleLine = true, singleLine = true,
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Search imeAction = ImeAction.Search
),
keyboardActions = KeyboardActions(
onSearch = {
}
) )
) )