From b802e3798d80b32d9cc8ce4295fb354c01607261 Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Mon, 17 Oct 2022 07:51:41 +0200 Subject: [PATCH] Implementiere neue TimePicker in MissionPusher --- .../fragments/MissionPusherFragment.kt | 63 ++++++------------- .../techniklogger/modals/TimePickerBuilder.kt | 19 +++--- 2 files changed, 30 insertions(+), 52 deletions(-) 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 32f2fe5..f6ab091 100644 --- a/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt +++ b/app/src/main/java/com/cyb3rko/techniklogger/fragments/MissionPusherFragment.kt @@ -13,15 +13,14 @@ 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.databinding.FragmentMissionPusherBinding +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.timepicker.MaterialTimePicker -import com.google.android.material.timepicker.TimeFormat import com.parse.ParseObject -import java.sql.Time import java.text.SimpleDateFormat import java.util.* @@ -34,8 +33,6 @@ class MissionPusherFragment : Fragment() { private var date = "" private lateinit var mission: Mission private var time = "" - private lateinit var time1: Time - private lateinit var time2: Time private var duration = 0f private lateinit var location: String private lateinit var name: String @@ -66,53 +63,29 @@ class MissionPusherFragment : Fragment() { val dateInMillis = simpleDateFormat.parse(date)!!.time builder.setSelection(dateInMillis + 7200000) } + if (time != "") { - val times = time.split(" - ") - builder2.setHour(times[0].split(":")[0].toInt()) - .setMinute(times[0].split(":")[1].toInt()) - builder3.setHour(times[1].split(":")[0].toInt()) - .setMinute(times[1].split(":")[1].toInt()) + val times = time.split(" Uhr")[0].split(" - ") + timePickerBuilder.apply { + initialStart = HourMinute.fromString(times[0]) + initialEnd = HourMinute.fromString(times[1]) + } } - var tempTime = "" val picker = builder.build() - val picker2 = builder2.build() - val picker3 = builder3.build() - var hour: String - var minute: String - var hoursInMillis: Long - var minutesInMillis: Long picker.addOnPositiveButtonClickListener { date = simpleDateFormat.format(Date(it)) binding.dateView.text = Html.fromHtml("Datum:
${date}") - activity?.let { it1 -> picker2.show(it1.supportFragmentManager, picker2.tag) } + + timePickerBuilder.show(requireActivity(), null) { time, duration -> + binding.durationView.text = Html.fromHtml( + "Dauer: $time Uhr, $duration Stunden" + ) + this.time = time + this.duration = duration + } } - picker2.addOnPositiveButtonClickListener { - hour = picker2.hour.toString() - hour = if (hour.length != 1) hour else "0$hour" - minute = picker2.minute.toString() - minute = if (minute.length != 1) minute else "0$minute" - hoursInMillis = picker2.hour.toLong() * 3600000 - minutesInMillis = picker2.minute.toLong() * 60000 - time1 = Time(hoursInMillis + minutesInMillis) - tempTime += "${hour}:${minute} - " - activity?.let { it1 -> picker3.show(it1.supportFragmentManager, picker3.tag) } - } - picker3.addOnPositiveButtonClickListener { - hour = picker3.hour.toString() - hour = if (hour.length != 1) hour else "0$hour" - minute = picker3.minute.toString() - minute = if (minute.length != 1) minute else "0$minute" - hoursInMillis = hour.toLong() * 3600000 - minutesInMillis = minute.toLong() * 60000 - time2 = Time(hoursInMillis + minutesInMillis) - tempTime += "${hour}:${minute}" - time = tempTime -// duration = DecimalFormat("#.#").format((time2.time - time1.time) / 3600 / 1000.toFloat()) -// duration = duration.replace(",", ".") - duration = (time2.time - time1.time) / 3600 / 1000.toFloat() - binding.durationView.text = Html.fromHtml("Dauer: $time Uhr, $duration Stunden") - } - activity?.let { it1 -> picker.show(it1.supportFragmentManager, picker.tag) } + + picker.show(requireActivity().supportFragmentManager, picker.tag) } if (childKey != "") { diff --git a/app/src/main/java/com/cyb3rko/techniklogger/modals/TimePickerBuilder.kt b/app/src/main/java/com/cyb3rko/techniklogger/modals/TimePickerBuilder.kt index 8996e0e..f815d9b 100644 --- a/app/src/main/java/com/cyb3rko/techniklogger/modals/TimePickerBuilder.kt +++ b/app/src/main/java/com/cyb3rko/techniklogger/modals/TimePickerBuilder.kt @@ -20,10 +20,10 @@ internal class TimePickerBuilder { internal fun show( activity: FragmentActivity, - missionTime: String, + missionTime: String?, action: (time: String, duration: Float) -> Unit ) { - if (!missionTime.contains("Uhr")) { + if (missionTime != null && !missionTime.contains("Uhr")) { activity.showWarningToast("Ändern der Arbeitszeit bei fehlendem Einsatz-Zeitraum nicht möglich") return } @@ -44,13 +44,18 @@ internal class TimePickerBuilder { val picker1 = builder1.build() val picker2 = builder2.build() - val missionTimes = missionTime.split(" Uhr")[0].split(" - ") - val missionStart = HourMinute.fromString(missionTimes[0]) - val missionEnd = HourMinute.fromString(missionTimes[1]) + var missionStart: HourMinute? = null + var missionEnd: HourMinute? = null + if (missionTime != null) { + val missionTimes = missionTime.split(" Uhr")[0].split(" - ") + missionStart = HourMinute.fromString(missionTimes[0]) + missionEnd = HourMinute.fromString(missionTimes[1]) + } + var start = HourMinute(0, 0) picker1.addOnPositiveButtonClickListener { start = HourMinute(picker1.hour, picker1.minute) - if (start < missionStart) { + if (missionStart != null && start < missionStart) { activity.showWarningToast("Start muss im Einsatz-Zeitraum liegen") } else { picker2.show(activity.supportFragmentManager, "$TAG von") @@ -60,7 +65,7 @@ internal class TimePickerBuilder { var end: HourMinute picker2.addOnPositiveButtonClickListener { end = HourMinute(picker2.hour, picker2.minute) - if (end > missionEnd) { + if (missionEnd != null && end > missionEnd) { activity.showWarningToast("Ende muss im Einsatz-Zeitraum liegen") } else if (start >= end) { activity.showWarningToast("Ungültige Arbeitszeit erkannt")