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.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),
ChargeDatePicker(
date = date,
onSelect = { date = it}
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Date: ${date.format(dateFormat)}")
}
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)}")
}
}
}