Moved DatePickerDialog to it's own Composable
This commit is contained in:
@@ -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)}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user