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