Author: Adam Evyčędo <git@apiote.xyz>
persist line 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 9f2d3cc6b79c738b200b899fecf49c16b69710e5..aac1ac3ddeb48a64419aaf670d74b366a53a676e 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 @@ -65,7 +65,6 @@ private var timePickerStart: MaterialTimePicker? = null private var timePickerEnd: MaterialTimePicker? = null private var linePicker: MaterialAlertDialogBuilder? = null private var date: LocalDate? = null - private val linesFilter = mutableMapOf<String, Boolean>() private val linesFilterTemporary = mutableMapOf<String, Boolean>() private var startTime: LocalTime = LocalTime.MIN private var endTime: LocalTime = LocalTime.MAX @@ -89,15 +88,18 @@ _binding = ActivityDeparturesBinding.inflate(layoutInflater) setContentView(binding.root) viewModel = ViewModelProvider(this)[DeparturesViewModel::class.java] + getLine()?.let { + viewModel.linesFilter[it] = true + } linePicker = MaterialAlertDialogBuilder(this) .setTitle(resources.getString(R.string.title_select_line)) .setNegativeButton(R.string.clear_date_selection) { _, _ -> - linesFilter.clear() + viewModel.linesFilter.clear() getDepartures() } .setPositiveButton(R.string.ok) { _, _ -> - linesFilterTemporary.forEach { linesFilter[it.key] = it.value } + linesFilterTemporary.forEach { viewModel.linesFilter[it.key] = it.value } getDepartures() } @@ -127,7 +129,7 @@ } updateItems( stopDepartures.departures .filter { d -> - linesFilter.values.all { !it } or (linesFilter[d.vehicle.Line.name] ?: false) + 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()) @@ -146,7 +148,7 @@ } else { s1.compareTo(s2) } }.toSet().toTypedArray() - val selections = lines.map { linesFilter.getOrDefault(it, false) }.toBooleanArray() + val selections = lines.map { viewModel.linesFilter.getOrDefault(it, false) }.toBooleanArray() linePicker?.setMultiChoiceItems(lines, selections) { _, which, checked -> linesFilterTemporary[lines[which]] = checked @@ -192,7 +194,7 @@ } R.id.departures_filter_byline -> { linesFilterTemporary.clear() - linesFilter.forEach { filter -> linesFilterTemporary[filter.key] = filter.value } + viewModel.linesFilter.forEach { filter -> linesFilterTemporary[filter.key] = filter.value } linePicker?.show() true } @@ -280,14 +282,6 @@ } else { val request = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build() connectivityManager.registerNetworkCallback(request, networkCallback) - } - } - - override fun onStart() { - super.onStart() - linesFilter.clear() - getLine()?.let { - linesFilter[it] = true } } 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 b973174eeb0b9325f3c5282aaa682545ac5187e4..9696c312133aff2c50b5f6e34a50ada961841451 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 @@ -33,6 +33,8 @@ var requestedItemsNumber = 12 var allItemsRequested = false 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>() fun getDepartures(context: Context, date: LocalDate?, force: Boolean) { MainScope().launch {