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