Finished validators at AddBatteryFragment.kt

This commit is contained in:
Sockenklaus
2022-07-19 12:48:49 +02:00
parent cc18e7bf50
commit 967e16f011

View File

@@ -34,7 +34,6 @@ import kotlinx.coroutines.launch
* create an instance of this fragment. * create an instance of this fragment.
*/ */
class AddBatteryFragment : Fragment() { class AddBatteryFragment : Fragment() {
// TODO: Rename and change types of parameters
private var _binding: FragmentAddBatteryBinding? = null private var _binding: FragmentAddBatteryBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
@@ -47,6 +46,9 @@ class AddBatteryFragment : Fragment() {
val db = BatteryTrackerDB.getInstance(requireContext()) val db = BatteryTrackerDB.getInstance(requireContext())
val view = binding.root val view = binding.root
/**
* TODO: Move database interactions to ViewModel!
*/
val batteries = db.batteryDao().getBatteries().asLiveData() val batteries = db.batteryDao().getBatteries().asLiveData()
var listBatteries = emptyList<Battery>() var listBatteries = emptyList<Battery>()
@@ -57,12 +59,12 @@ class AddBatteryFragment : Fragment() {
binding.root.setContent { binding.root.setContent {
BatteryTrackerTheme { BatteryTrackerTheme {
var batteryId by remember { mutableStateOf("") } var batteryId by remember { mutableStateOf("") }
var declaredCapacity by remember { mutableStateOf("")} var batteryHasError by remember { mutableStateOf(false) }
var batteryHelperId: Int? by remember { mutableStateOf(null) }
var batteryIsError by remember { mutableStateOf(false) } var declaredCapacity by remember { mutableStateOf("")}
var batteryHelper: Int? by remember { mutableStateOf(null) } var capacityHasError by remember { mutableStateOf(false) }
var chargeIsError by remember { mutableStateOf(false) } var capacityHelperId: Int? by remember { mutableStateOf(null) }
var chargeHelper: Int? by remember { mutableStateOf(null) }
val outerPadding = 24.dp val outerPadding = 24.dp
val innerPadding = 16.dp val innerPadding = 16.dp
@@ -74,38 +76,47 @@ class AddBatteryFragment : Fragment() {
value = batteryId, value = batteryId,
onValueChange = { value -> onValueChange = { value ->
batteryId = value batteryId = value
onChangeBatteryId( batteryHasError = false
value = value, batteryHelperId = null
batteries = listBatteries, if(listBatteries.any{ it.id.lowercase() == value.lowercase() }){
changeHelper = { ch -> batteryHelper = ch }, batteryHasError = true
changeIsError = { ce -> batteryIsError = ce } batteryHelperId = R.string.helper_battery_not_unique
) }
}, },
labelId = R.string.hint_enter_battery_id, labelId = R.string.hint_enter_battery_id,
leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") }, leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") },
isError = batteryIsError, isError = batteryHasError,
helperTextId = batteryHelper helperTextId = batteryHelperId
) )
Spacer(Modifier.size(innerPadding)) Spacer(Modifier.size(innerPadding))
MyOutlinedTextField( MyOutlinedTextField(
value = declaredCapacity, value = declaredCapacity,
onValueChange = { declaredCapacity = validateDecimal(it, declaredCapacity) }, onValueChange = {
declaredCapacity = validateDecimal(it, declaredCapacity)
capacityHasError = false
capacityHelperId = null
},
labelId = R.string.hint_enter_declared_capacity, labelId = R.string.hint_enter_declared_capacity,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }, leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") },
isError = chargeIsError, isError = capacityHasError,
helperTextId = chargeHelper helperTextId = capacityHelperId
) )
Spacer(Modifier.size(outerPadding)) Spacer(Modifier.size(outerPadding))
ExtendedFloatingActionButton( ExtendedFloatingActionButton(
onClick = { saveBattery( onClick = {
batteryId, declaredCapacity if(batteryId.isBlank()) batteryHasError = true
) }, if(declaredCapacity.isBlank()) capacityHasError = true
icon = { Icon(Icons.Default.Save, null) },
if(!batteryHasError && !capacityHasError){
saveBattery(batteryId, declaredCapacity)
}
},
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)
) )
@@ -150,28 +161,10 @@ class AddBatteryFragment : Fragment() {
) )
} }
private fun onChangeBatteryId( private fun saveBattery(
value: String, id: String,
batteries: List<Battery>, declaredCapacity: String
changeIsError: (Boolean) -> Unit,
changeHelper: (Int?) -> Unit
) { ) {
changeIsError(false)
changeHelper(null)
if(batteries.any{ it.id.lowercase() == value.lowercase() }){
changeIsError(true)
changeHelper(R.string.helper_battery_not_unique)
}
if(value.isEmpty()){
changeIsError(true)
changeHelper(null)
}
}
/*
TODO: Implement the action
*/
private fun saveBattery(id: String, declaredCapacity: String) {
val db = BatteryTrackerDB.getInstance(requireContext()) val db = BatteryTrackerDB.getInstance(requireContext())
lifecycleScope.launch(Dispatchers.IO){ lifecycleScope.launch(Dispatchers.IO){