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.
*/
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<Battery>()
@@ -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<Battery>,
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){