From ad1fa586c58cdce38de128cf9a8f8ba8a7c707a6 Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Mon, 17 Oct 2022 08:08:10 +0200 Subject: [PATCH] Extrahiere DatePicker-Logik in eigene Klasse --- .../fragments/MissionPusherFragment.kt | 34 ++++++----------- .../techniklogger/modals/DatePickerBuilder.kt | 37 +++++++++++++++++++ 2 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 app/src/main/java/com/cyb3rko/techniklogger/modals/DatePickerBuilder.kt diff --git a/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt b/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt index f6ab091..65764cc 100644 --- a/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt +++ b/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt @@ -1,6 +1,5 @@ package com.cyb3rko.techniklogger.fragments -import android.annotation.SuppressLint import android.content.Context import android.os.Bundle import android.text.Html @@ -12,17 +11,14 @@ import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.cyb3rko.techniklogger.* -import com.cyb3rko.techniklogger.CURRENT_YEAR import com.cyb3rko.techniklogger.data.HourMinute -import com.cyb3rko.techniklogger.data.objects.Mission import com.cyb3rko.techniklogger.data.ParseController +import com.cyb3rko.techniklogger.data.objects.Mission import com.cyb3rko.techniklogger.databinding.FragmentMissionPusherBinding +import com.cyb3rko.techniklogger.modals.DatePickerBuilder import com.cyb3rko.techniklogger.modals.TimePickerBuilder -import com.google.android.material.datepicker.MaterialDatePicker import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.parse.ParseObject -import java.text.SimpleDateFormat -import java.util.* class MissionPusherFragment : Fragment() { private var _binding: FragmentMissionPusherBinding? = null @@ -36,8 +32,6 @@ class MissionPusherFragment : Fragment() { private var duration = 0f private lateinit var location: String private lateinit var name: String - @SuppressLint("SimpleDateFormat") - private val simpleDateFormat = SimpleDateFormat("dd.MM.yyyy") // This property is only valid between onCreateView and onDestroyView. private val binding get() = _binding!! @@ -54,14 +48,12 @@ class MissionPusherFragment : Fragment() { getArgumentInformation() restoreInformation() - val builder = MaterialDatePicker.Builder.datePicker() - .setTitleText("Datum") + val datePickerBuilder = DatePickerBuilder() val timePickerBuilder = TimePickerBuilder() binding.dateButton.setOnClickListener { if (date != "") { - val dateInMillis = simpleDateFormat.parse(date)!!.time - builder.setSelection(dateInMillis + 7200000) + datePickerBuilder.setInitialDate(date) } if (time != "") { @@ -71,21 +63,19 @@ class MissionPusherFragment : Fragment() { initialEnd = HourMinute.fromString(times[1]) } } - val picker = builder.build() - picker.addOnPositiveButtonClickListener { - date = simpleDateFormat.format(Date(it)) - binding.dateView.text = Html.fromHtml("Datum:
${date}") - timePickerBuilder.show(requireActivity(), null) { time, duration -> + datePickerBuilder.show(requireActivity()) { newDate -> + binding.dateView.text = Html.fromHtml("Datum:
${newDate}") + date = newDate + + timePickerBuilder.show(requireActivity(), null) { newTime, newDuration -> binding.durationView.text = Html.fromHtml( - "Dauer: $time Uhr, $duration Stunden" + "Dauer: $newTime Uhr, $newDuration Stunden" ) - this.time = time - this.duration = duration + time = newTime + duration = newDuration } } - - picker.show(requireActivity().supportFragmentManager, picker.tag) } if (childKey != "") { diff --git a/app/src/main/java/com/cyb3rko/techniklogger/modals/DatePickerBuilder.kt b/app/src/main/java/com/cyb3rko/techniklogger/modals/DatePickerBuilder.kt new file mode 100644 index 0000000..c7ae144 --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/modals/DatePickerBuilder.kt @@ -0,0 +1,37 @@ +package com.cyb3rko.techniklogger.modals + +import android.annotation.SuppressLint +import androidx.fragment.app.FragmentActivity +import com.google.android.material.datepicker.MaterialDatePicker +import java.text.SimpleDateFormat +import java.util.* + +internal class DatePickerBuilder { + companion object { + private const val TAG = "DatePickerDialog" + } + + @SuppressLint("SimpleDateFormat") + private val simpleDateFormat = SimpleDateFormat("dd.MM.yyyy") + private var initialDate = 0L + + internal fun setInitialDate(date: String) { + initialDate = simpleDateFormat.parse(date)!!.time + 7200000 + } + + internal fun show(activity: FragmentActivity, action: (date: String) -> Unit) { + val builder = MaterialDatePicker.Builder.datePicker() + .setTitleText("Datum") + + if (initialDate != 0L) builder.setSelection(initialDate) + + val picker = builder.build() + + picker.addOnPositiveButtonClickListener { + val date = simpleDateFormat.format(Date(it)) + action(date) + } + + picker.show(activity.supportFragmentManager, TAG) + } +}