Bimba.git

commit c9f7c38441bb89763ab9167e4bc7cd93fefef54c

Author: Adam Evyčędo <git@apiote.xyz>

persist time filter between screen change

%!v(PANIC=String method: strings: negative Repeat count)


diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesActivity.kt b/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesActivity.kt
index aac1ac3ddeb48a64419aaf670d74b366a53a676e..98a5390c76d36966e06f346bfacb09333416b276 100644
--- a/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesActivity.kt
+++ b/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesActivity.kt
@@ -39,7 +39,6 @@ import xyz.apiote.bimba.czwek.units.Millisecond
 import xyz.apiote.bimba.czwek.units.Second
 import xyz.apiote.bimba.czwek.units.Tim
 import java.time.Instant
-import java.time.LocalDate
 import java.time.LocalTime
 import java.time.ZoneId
 import java.time.ZonedDateTime
@@ -64,10 +63,7 @@ 			.build()
 	private var timePickerStart: MaterialTimePicker? = null
 	private var timePickerEnd: MaterialTimePicker? = null
 	private var linePicker: MaterialAlertDialogBuilder? = null
-	private var date: LocalDate? = null
 	private val linesFilterTemporary = mutableMapOf<String, Boolean>()
-	private var startTime: LocalTime = LocalTime.MIN
-	private var endTime: LocalTime = LocalTime.MAX
 	private var alertDescriptions: String = ""
 
 	// TODO [elizabeth] millisInFuture from header Cache-Control max-age
@@ -133,7 +129,7 @@ 						viewModel.linesFilter.values.all { !it } or (viewModel.linesFilter[d.vehicle.Line.name] ?: false)
 					}
 					.filter { d ->
 						val t = LocalTime.of(d.time.Hour.toInt(), d.time.Minute.toInt())
-						t >= startTime && t <= endTime
+						t >= viewModel.startTime && t <= viewModel.endTime
 					},
 				stopDepartures.stop
 			)
@@ -162,18 +158,18 @@ 		binding.departuresAppBar.menu.findItem(R.id.departures_filter_bytime).setEnabled(false)
 
 
 		datePicker.addOnNegativeButtonClickListener {
-			date = null
-			startTime = LocalTime.MIN
-			endTime = LocalTime.MAX
+			viewModel.date = null
+			viewModel.startTime = LocalTime.MIN
+			viewModel.endTime = LocalTime.MAX
 			binding.departuresAppBar.menu.findItem(R.id.departures_filter_bytime).setEnabled(false)
 			getDepartures(true)
 		}
 		datePicker.addOnPositiveButtonClickListener {
-			if (date == null) {
-				startTime = LocalTime.MIN
-				endTime = LocalTime.MAX
+			if (viewModel.date == null) {
+				viewModel.startTime = LocalTime.MIN
+				viewModel.endTime = LocalTime.MAX
 			}
-			date = Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault())
+			viewModel.date = Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault())
 				.toLocalDate()
 			binding.departuresAppBar.menu.findItem(R.id.departures_filter_bytime).setEnabled(true)
 			getDepartures(true)
@@ -203,30 +199,30 @@ 				R.id.departures_filter_bytime -> {
 					timePickerStart =
 						MaterialTimePicker.Builder().setTitleText(R.string.title_select_time_start)
 							.setTimeFormat(TimeFormat.CLOCK_24H)
-							.setHour(startTime.hour)
-							.setMinute(startTime.minute)
+							.setHour(viewModel.startTime.hour)
+							.setMinute(viewModel.startTime.minute)
 							.setNegativeButtonText(R.string.clear_date_selection)
 							.build()
 					timePickerEnd = MaterialTimePicker.Builder().setTitleText(R.string.title_select_time_end)
 						.setTimeFormat(TimeFormat.CLOCK_24H)
-						.setHour(endTime.hour)
-						.setMinute(endTime.minute)
+						.setHour(viewModel.endTime.hour)
+						.setMinute(viewModel.endTime.minute)
 						.setNegativeButtonText(R.string.clear_date_selection)
 						.build()
 					timePickerEnd!!.addOnPositiveButtonClickListener {
-						endTime = LocalTime.of(timePickerEnd!!.hour, timePickerEnd!!.minute)
+						viewModel.endTime = LocalTime.of(timePickerEnd!!.hour, timePickerEnd!!.minute)
 						getDepartures(true)
 					}
 					timePickerEnd!!.addOnNegativeButtonClickListener {
-						endTime = LocalTime.MAX
+						viewModel.endTime = LocalTime.MAX
 						getDepartures(true)
 					}
 					timePickerStart!!.addOnPositiveButtonClickListener {
-						startTime = LocalTime.of(timePickerStart!!.hour, timePickerStart!!.minute)
+						viewModel.startTime = LocalTime.of(timePickerStart!!.hour, timePickerStart!!.minute)
 						timePickerEnd!!.show(supportFragmentManager, "timePickerEnd")
 					}
 					timePickerStart!!.addOnNegativeButtonClickListener {
-						startTime = LocalTime.MIN
+						viewModel.startTime = LocalTime.MIN
 						timePickerEnd!!.show(supportFragmentManager, "timePickerEnd")
 					}
 					timePickerStart!!.show(supportFragmentManager, "timePickerStart")
@@ -323,7 +319,7 @@ 		} else {
 			adapter.refreshItems()
 			setupSnackbar()
 		}
-		viewModel.getDepartures(this, date, force)
+		viewModel.getDepartures(this, viewModel.date, force)
 	}
 
 	private fun setupSnackbar() {
@@ -382,7 +378,7 @@ 			progress = Tim(Second(30)).tims
 		}
 		countdown.cancel()
 		countdown.start()
-		adapter.update(departures, date != null, true)
+		adapter.update(departures, viewModel.date != null, true)
 		binding.collapsingLayout.apply {
 			title = stop.name
 		}




diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesViewModel.kt b/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesViewModel.kt
index 9696c312133aff2c50b5f6e34a50ada961841451..3bcbc042905b39dda17cd10d5adec093fa03c315 100644
--- a/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesViewModel.kt
+++ b/app/src/main/java/xyz/apiote/bimba/czwek/departures/DeparturesViewModel.kt
@@ -23,6 +23,7 @@ import xyz.apiote.bimba.czwek.repo.QrLocation
 import xyz.apiote.bimba.czwek.repo.StopDepartures
 import xyz.apiote.bimba.czwek.repo.TrafficResponseException
 import java.time.LocalDate
+import java.time.LocalTime
 
 class DeparturesViewModel : ViewModel() {
 	private val _departures = MutableLiveData<StopDepartures>()
@@ -35,6 +36,11 @@ 	private var feed: FeedInfo? = null
 	private lateinit var code: String
 	// TODO observe in activity, maybe refreshing and not getting departures is enough
 	val linesFilter = mutableMapOf<String, Boolean>()
+	// TODO observe in activity, maybe refreshing and not getting departures is enough
+	var startTime: LocalTime = LocalTime.MIN
+	var endTime: LocalTime = LocalTime.MAX
+	// TODO observe in activity, maybe refreshing and not getting departures is enough
+	var date: LocalDate? = null
 
 	fun getDepartures(context: Context, date: LocalDate?, force: Boolean) {
 		MainScope().launch {