Finished validators at AddBatteryFragment.kt
This commit is contained in:
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user