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 {