From f22aa22a3f0ac568cc9dc79dd759964fe9875005 Mon Sep 17 00:00:00 2001 From: sockenklaus Date: Sat, 16 Jul 2022 23:11:01 +0200 Subject: [PATCH] Moved DatePickerDialog to it's own Composable --- .../fragments/add_charge/AddChargeFragment.kt | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) 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 f63c832..2344fef 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 @@ -14,10 +14,7 @@ import androidx.compose.material.icons.filled.BatteryChargingFull import androidx.compose.material.icons.filled.EditCalendar import androidx.compose.material.icons.filled.Save import androidx.compose.material.icons.filled.Tag -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -30,10 +27,7 @@ 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.* import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.util.* @@ -56,7 +50,6 @@ class AddChargeFragment : Fragment() { // TODO: Add viewModel!! val items = listOf("E1", "E2", "E3", "E4", "Bonsai", "Bonai") - val dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(Locale.GERMANY) binding.root.setContent{ BatteryTrackerTheme { @@ -64,18 +57,10 @@ class AddChargeFragment : Fragment() { val innerPadding = 16.dp var selectedBatteryId by remember { mutableStateOf(TextFieldValue(""))} - var date by remember { mutableStateOf(ZonedDateTime.now())} + var date by remember { mutableStateOf(LocalDateTime.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) ) { @@ -131,20 +116,10 @@ class AddChargeFragment : Fragment() { Spacer(Modifier.size(innerPadding)) - TextButton( - onClick = { - datePicker.show(parentFragmentManager, "tag") - }, - modifier = Modifier.fillMaxWidth() - ){ - Icon( - Icons.Default.EditCalendar, - "Edit Calendar Icon", - Modifier.size(ButtonDefaults.IconSize), - ) - Spacer(Modifier.size(ButtonDefaults.IconSpacing)) - Text("Date: ${date.format(dateFormat)}") - } + ChargeDatePicker( + date = date, + onSelect = { date = it} + ) Spacer(Modifier.size(outerPadding)) @@ -167,15 +142,35 @@ class AddChargeFragment : Fragment() { _binding = null } - private fun openDatePicker() { - + @Composable + fun ChargeDatePicker( + date: LocalDateTime, + onSelect: (LocalDateTime) -> Unit, + ) { + val dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(Locale.GERMANY) val datePicker = MaterialDatePicker.Builder.datePicker() .setTitleText("Select date") - .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) + .setSelection( date.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() ) .build() - datePicker.show(parentFragmentManager, "test") + datePicker.addOnPositiveButtonClickListener { + onSelect(LocalDateTime.ofInstant(Instant.ofEpochMilli(it), ZoneId.systemDefault())) + } + TextButton( + onClick = { + datePicker.show(parentFragmentManager, "tag") + }, + modifier = Modifier.fillMaxWidth() + ){ + Icon( + Icons.Default.EditCalendar, + "Edit Calendar Icon", + Modifier.size(ButtonDefaults.IconSize), + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text("Date: ${date.format(dateFormat)}") + } } } \ No newline at end of file