Bimba.git

commit d96c5cd297a9945cca67a2e3d8d479a0a83021f8

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 {