From c789182998a14cbd93cef0d562ab6c769e79ef80 Mon Sep 17 00:00:00 2001 From: Prat <616399+pt2121@users.noreply.github.com> Date: Tue, 15 Aug 2023 20:17:59 -0700 Subject: [PATCH] Remember preferred means of transport (#833) * Remember preferred means of transport Signed-off-by: Prat T * Add prefix for pref key for transportation mode --------- Signed-off-by: Prat T Co-authored-by: Prat T --- .../transportr/settings/SettingsManager.kt | 26 +++++++++++++++++++ .../trips/search/DirectionsViewModel.kt | 7 ++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/grobox/transportr/settings/SettingsManager.kt b/app/src/main/java/de/grobox/transportr/settings/SettingsManager.kt index 5a8ca6322..c1f9cc628 100644 --- a/app/src/main/java/de/grobox/transportr/settings/SettingsManager.kt +++ b/app/src/main/java/de/grobox/transportr/settings/SettingsManager.kt @@ -30,6 +30,7 @@ import de.grobox.transportr.R import de.schildbach.pte.NetworkId import de.schildbach.pte.NetworkProvider.Optimize import de.schildbach.pte.NetworkProvider.WalkSpeed +import de.schildbach.pte.dto.Product import java.util.* import javax.inject.Inject @@ -135,6 +136,30 @@ class SettingsManager @Inject constructor(private val context: Context) { return settings.getBoolean(SHOW_WHEN_LOCKED, true) } + fun setPreferredProducts(selected: Set) { + val editor = settings.edit() + Product.ALL.toSet().forEach { product -> + editor.putBoolean(LAST_PRODUCT_PREFIX + product.name, product in selected) + } + editor.apply() + } + + fun getPreferredProducts(): Set { + val firstTime = Product.ALL.none { settings.contains(LAST_PRODUCT_PREFIX + it.name) } + if (firstTime) { + setPreferredProducts(Product.ALL) + return Product.ALL + } + + val products = mutableSetOf() + Product.ALL.toSet().forEach { product -> + if (settings.getBoolean(LAST_PRODUCT_PREFIX + product.name, false)) { + products.add(product) + } + } + return products + } + companion object { private const val NETWORK_ID_1 = "NetworkId" private const val NETWORK_ID_2 = "NetworkId2" @@ -147,6 +172,7 @@ class SettingsManager @Inject constructor(private val context: Context) { private const val OPTIMIZE = "pref_key_optimize" private const val LOCATION_ONBOARDING = "locationOnboarding" private const val TRIP_DETAIL_ONBOARDING = "tripDetailOnboarding" + private const val LAST_PRODUCT_PREFIX = "pref_key_last_product_prefix_" } } diff --git a/app/src/main/java/de/grobox/transportr/trips/search/DirectionsViewModel.kt b/app/src/main/java/de/grobox/transportr/trips/search/DirectionsViewModel.kt index 9273ccfe2..0562454d1 100644 --- a/app/src/main/java/de/grobox/transportr/trips/search/DirectionsViewModel.kt +++ b/app/src/main/java/de/grobox/transportr/trips/search/DirectionsViewModel.kt @@ -46,7 +46,7 @@ import java.util.* import javax.inject.Inject class DirectionsViewModel @Inject internal constructor( - application: TransportrApplication, transportNetworkManager: TransportNetworkManager, settingsManager: SettingsManager, + application: TransportrApplication, transportNetworkManager: TransportNetworkManager, private val settingsManager: SettingsManager, locationRepository: LocationRepository, searchesRepository: SearchesRepository ) : SavedSearchesViewModel(application, transportNetworkManager, locationRepository, searchesRepository), TimeDateListener, LocationViewListener { @@ -60,7 +60,7 @@ class DirectionsViewModel @Inject internal constructor( val timeUpdate = LiveTrigger() private val _now = MutableLiveData(true) private val _calendar = MutableLiveData(Calendar.getInstance()) - private val _products = MutableLiveData>(EnumSet.allOf(Product::class.java)) + private val _products = MutableLiveData>(EnumSet.copyOf(settingsManager.getPreferredProducts())) private val _isDeparture = MutableLiveData(true) private val _isExpanded = MutableLiveData(false) val showTrips = SingleLiveEvent() @@ -121,6 +121,7 @@ class DirectionsViewModel @Inject internal constructor( fun setProducts(newProducts: EnumSet) { _products.value = newProducts search() + settingsManager.setPreferredProducts(newProducts) } val isDeparture: LiveData = _isDeparture @@ -211,4 +212,4 @@ class DirectionsViewModel @Inject internal constructor( ) viaSupported = MutableLiveData(network.networkProvider.hasCapabilities(NetworkProvider.Capability.TRIPS_VIA)) } -} \ No newline at end of file +}