diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
index 38bb4c5..f63c832 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
@@ -6,7 +6,6 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.ArrayAdapter
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.*
@@ -19,33 +18,30 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
-import androidx.constraintlayout.compose.ConstraintLayout
-import androidx.constraintlayout.compose.Dimension
import com.google.android.material.datepicker.MaterialDatePicker
import com.sockenklaus.batterytracker.R
import com.sockenklaus.batterytracker.databinding.FragmentAddChargeBinding
import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme
import com.sockenklaus.batterytracker.util.validateDecimal
+import java.time.Instant
import java.time.LocalDate
+import java.time.ZoneId
+import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle
import java.util.*
class AddChargeFragment : Fragment() {
- companion object {
- fun newInstance() = AddChargeFragment()
- }
private var _binding: FragmentAddChargeBinding? = null
-
private lateinit var viewModel: AddChargeViewModel
-
private val binding get() = _binding!!
@OptIn(ExperimentalMaterialApi::class)
@@ -64,26 +60,28 @@ class AddChargeFragment : Fragment() {
binding.root.setContent{
BatteryTrackerTheme {
- ConstraintLayout {
- val (textBatteryId, ddTextField, dd, btnDate, textCharge, fab) = createRefs()
- val outerMargin = 24.dp
- val innerMargin = 16.dp
+ val outerPadding = 24.dp
+ val innerPadding = 16.dp
- var selectedBatteryId by remember { mutableStateOf(TextFieldValue(""))}
- var date by remember { mutableStateOf(LocalDate.now())}
- var charge by remember { mutableStateOf("") }
- var bIdExpanded by remember { mutableStateOf(false)}
+ var selectedBatteryId by remember { mutableStateOf(TextFieldValue(""))}
+ var date by remember { mutableStateOf(ZonedDateTime.now())}
+ var charge by remember { mutableStateOf("") }
+ var bIdExpanded by remember { mutableStateOf(false)}
+ val datePicker = MaterialDatePicker.Builder.datePicker()
+ .setTitleText("Select date")
+ .setSelection( date.toInstant().toEpochMilli())
+ .build()
+ datePicker.addOnPositiveButtonClickListener {
+ date = ZonedDateTime.ofInstant(Instant.ofEpochMilli(it), ZoneId.systemDefault())
+ }
+
+ Column(
+ Modifier.padding(outerPadding)
+ ) {
ExposedDropdownMenuBox(
expanded = bIdExpanded,
- onExpandedChange = { bIdExpanded = !bIdExpanded},
- modifier = Modifier
- .constrainAs(textBatteryId) {
- top.linkTo(parent.top, margin = outerMargin)
- start.linkTo(parent.start, margin = outerMargin)
- end.linkTo(parent.end, margin = outerMargin)
- width = Dimension.fillToConstraints
- }
+ onExpandedChange = { bIdExpanded = !bIdExpanded}
) {
OutlinedTextField(
value = selectedBatteryId,
@@ -94,21 +92,14 @@ class AddChargeFragment : Fragment() {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = bIdExpanded)
},
colors = ExposedDropdownMenuDefaults.outlinedTextFieldColors(),
- modifier = Modifier
- .fillMaxWidth()
- .constrainAs(ddTextField){
- top.linkTo(parent.top)
- }
+ modifier = Modifier.fillMaxWidth()
)
val filteringOptions = items.filter { it.contains(selectedBatteryId.text, ignoreCase = true)}
- if(filteringOptions.size > 1 && !selectedBatteryId.text.isNullOrBlank()) bIdExpanded = true
+ if(filteringOptions.size > 1 && selectedBatteryId.text.isNotBlank()) bIdExpanded = true
if(filteringOptions.isNotEmpty()) {
ExposedDropdownMenu(
expanded = bIdExpanded,
- onDismissRequest = { bIdExpanded = false },
- modifier = Modifier.constrainAs(dd){
- top.linkTo(ddTextField.bottom)
- }
+ onDismissRequest = { bIdExpanded = false }
) {
for (filteringOption in filteringOptions) {
DropdownMenuItem(
@@ -126,16 +117,25 @@ class AddChargeFragment : Fragment() {
}
}
}
- TextButton(
- onClick = { openDatePicker() },
- modifier = Modifier
- .constrainAs(btnDate){
- top.linkTo(textCharge.bottom, innerMargin)
- start.linkTo(parent.start, outerMargin)
- end.linkTo(parent.end, outerMargin)
- width = Dimension.fillToConstraints
- }
+ Spacer(Modifier.size(innerPadding))
+
+ OutlinedTextField(
+ value = charge,
+ onValueChange = { charge = validateDecimal(it, charge) },
+ leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
+ label = { Text(stringResource(R.string.hint_charge)) },
+ modifier = Modifier.fillMaxWidth()
+ )
+
+ Spacer(Modifier.size(innerPadding))
+
+ TextButton(
+ onClick = {
+ datePicker.show(parentFragmentManager, "tag")
+ },
+ modifier = Modifier.fillMaxWidth()
){
Icon(
Icons.Default.EditCalendar,
@@ -146,29 +146,14 @@ class AddChargeFragment : Fragment() {
Text("Date: ${date.format(dateFormat)}")
}
- OutlinedTextField(
- value = charge,
- onValueChange = { charge = validateDecimal(it, charge) },
- leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") },
- keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
- label = { Text(stringResource(R.string.hint_charge)) },
- modifier = Modifier
- .constrainAs(textCharge){
- top.linkTo(textBatteryId.bottom, innerMargin)
- start.linkTo(parent.start, outerMargin)
- end.linkTo(parent.end, outerMargin)
- width = Dimension.fillToConstraints
- }
- )
+ Spacer(Modifier.size(outerPadding))
ExtendedFloatingActionButton(
text = { Text(stringResource(R.string.button_save_charge)) },
onClick = { /*TODO*/ },
icon = { Icon(Icons.Default.Save, "Icon Save") },
- modifier = Modifier.constrainAs(fab){
- top.linkTo(btnDate.bottom, 24.dp)
- end.linkTo(parent.end, outerMargin)
- }
+ modifier = Modifier.align(Alignment.End)
+
)
}
}
@@ -190,6 +175,7 @@ class AddChargeFragment : Fragment() {
.build()
datePicker.show(parentFragmentManager, "test")
+
}
}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8994e4f..dd4ee42 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -20,7 +20,7 @@
Save Charge
Date
Charge
- Enter Charge, decimal
+ Enter Charge in Ah
Select Battery ID
Enter Battery ID
Enter declared capacity