Moved DatePickerDialog to it's own Composable

This commit is contained in:
sockenklaus
2022-07-16 23:11:01 +02:00
parent b1dd123ecb
commit f22aa22a3f

View File

@@ -14,10 +14,7 @@ import androidx.compose.material.icons.filled.BatteryChargingFull
import androidx.compose.material.icons.filled.EditCalendar import androidx.compose.material.icons.filled.EditCalendar
import androidx.compose.material.icons.filled.Save import androidx.compose.material.icons.filled.Save
import androidx.compose.material.icons.filled.Tag import androidx.compose.material.icons.filled.Tag
import androidx.compose.runtime.getValue import androidx.compose.runtime.*
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource 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.databinding.FragmentAddChargeBinding
import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme
import com.sockenklaus.batterytracker.util.validateDecimal import com.sockenklaus.batterytracker.util.validateDecimal
import java.time.Instant import java.time.*
import java.time.LocalDate
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.util.* import java.util.*
@@ -56,7 +50,6 @@ class AddChargeFragment : Fragment() {
// TODO: Add viewModel!! // TODO: Add viewModel!!
val items = listOf("E1", "E2", "E3", "E4", "Bonsai", "Bonai") val items = listOf("E1", "E2", "E3", "E4", "Bonsai", "Bonai")
val dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(Locale.GERMANY)
binding.root.setContent{ binding.root.setContent{
BatteryTrackerTheme { BatteryTrackerTheme {
@@ -64,18 +57,10 @@ class AddChargeFragment : Fragment() {
val innerPadding = 16.dp val innerPadding = 16.dp
var selectedBatteryId by remember { mutableStateOf(TextFieldValue(""))} 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 charge by remember { mutableStateOf("") }
var bIdExpanded by remember { mutableStateOf(false)} 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( Column(
Modifier.padding(outerPadding) Modifier.padding(outerPadding)
) { ) {
@@ -131,20 +116,10 @@ class AddChargeFragment : Fragment() {
Spacer(Modifier.size(innerPadding)) Spacer(Modifier.size(innerPadding))
TextButton( ChargeDatePicker(
onClick = { date = date,
datePicker.show(parentFragmentManager, "tag") onSelect = { date = it}
}, )
modifier = Modifier.fillMaxWidth()
){
Icon(
Icons.Default.EditCalendar,
"Edit Calendar Icon",
Modifier.size(ButtonDefaults.IconSize),
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Date: ${date.format(dateFormat)}")
}
Spacer(Modifier.size(outerPadding)) Spacer(Modifier.size(outerPadding))
@@ -167,15 +142,35 @@ class AddChargeFragment : Fragment() {
_binding = null _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() val datePicker = MaterialDatePicker.Builder.datePicker()
.setTitleText("Select date") .setTitleText("Select date")
.setSelection(MaterialDatePicker.todayInUtcMilliseconds()) .setSelection( date.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() )
.build() .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)}")
}
} }
} }