Extrahiere DatePicker-Logik in eigene Klasse

master
Niko Diamadis 4 years ago
parent b802e3798d
commit ad1fa586c5
Signed by: niko
GPG Key ID: BE53B0B17B1B142E

@ -1,6 +1,5 @@
package com.cyb3rko.techniklogger.fragments package com.cyb3rko.techniklogger.fragments
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.text.Html import android.text.Html
@ -12,17 +11,14 @@ import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import com.cyb3rko.techniklogger.* import com.cyb3rko.techniklogger.*
import com.cyb3rko.techniklogger.CURRENT_YEAR
import com.cyb3rko.techniklogger.data.HourMinute import com.cyb3rko.techniklogger.data.HourMinute
import com.cyb3rko.techniklogger.data.objects.Mission
import com.cyb3rko.techniklogger.data.ParseController import com.cyb3rko.techniklogger.data.ParseController
import com.cyb3rko.techniklogger.data.objects.Mission
import com.cyb3rko.techniklogger.databinding.FragmentMissionPusherBinding import com.cyb3rko.techniklogger.databinding.FragmentMissionPusherBinding
import com.cyb3rko.techniklogger.modals.DatePickerBuilder
import com.cyb3rko.techniklogger.modals.TimePickerBuilder import com.cyb3rko.techniklogger.modals.TimePickerBuilder
import com.google.android.material.datepicker.MaterialDatePicker
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.parse.ParseObject import com.parse.ParseObject
import java.text.SimpleDateFormat
import java.util.*
class MissionPusherFragment : Fragment() { class MissionPusherFragment : Fragment() {
private var _binding: FragmentMissionPusherBinding? = null private var _binding: FragmentMissionPusherBinding? = null
@ -36,8 +32,6 @@ class MissionPusherFragment : Fragment() {
private var duration = 0f private var duration = 0f
private lateinit var location: String private lateinit var location: String
private lateinit var name: String private lateinit var name: String
@SuppressLint("SimpleDateFormat")
private val simpleDateFormat = SimpleDateFormat("dd.MM.yyyy")
// This property is only valid between onCreateView and onDestroyView. // This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!! private val binding get() = _binding!!
@ -54,14 +48,12 @@ class MissionPusherFragment : Fragment() {
getArgumentInformation() getArgumentInformation()
restoreInformation() restoreInformation()
val builder = MaterialDatePicker.Builder.datePicker() val datePickerBuilder = DatePickerBuilder()
.setTitleText("Datum")
val timePickerBuilder = TimePickerBuilder() val timePickerBuilder = TimePickerBuilder()
binding.dateButton.setOnClickListener { binding.dateButton.setOnClickListener {
if (date != "") { if (date != "") {
val dateInMillis = simpleDateFormat.parse(date)!!.time datePickerBuilder.setInitialDate(date)
builder.setSelection(dateInMillis + 7200000)
} }
if (time != "") { if (time != "") {
@ -71,21 +63,19 @@ class MissionPusherFragment : Fragment() {
initialEnd = HourMinute.fromString(times[1]) initialEnd = HourMinute.fromString(times[1])
} }
} }
val picker = builder.build()
picker.addOnPositiveButtonClickListener {
date = simpleDateFormat.format(Date(it))
binding.dateView.text = Html.fromHtml("<b>Datum:</b><br/>${date}")
timePickerBuilder.show(requireActivity(), null) { time, duration -> datePickerBuilder.show(requireActivity()) { newDate ->
binding.dateView.text = Html.fromHtml("<b>Datum:</b><br/>${newDate}")
date = newDate
timePickerBuilder.show(requireActivity(), null) { newTime, newDuration ->
binding.durationView.text = Html.fromHtml( binding.durationView.text = Html.fromHtml(
"<b>Dauer:</b> $time Uhr, $duration Stunden" "<b>Dauer:</b> $newTime Uhr, $newDuration Stunden"
) )
this.time = time time = newTime
this.duration = duration duration = newDuration
} }
} }
picker.show(requireActivity().supportFragmentManager, picker.tag)
} }
if (childKey != "") { if (childKey != "") {

@ -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)
}
}
Loading…
Cancel
Save