From 62f2002e5c3047411e377673efbb3990fc686578 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Tue, 16 Aug 2022 21:04:44 +0200 Subject: [PATCH] Reload Chargeprice data when vehicles have changed fixes #209 --- .../evmap/fragment/ChargepriceFragment.kt | 5 ++ .../evmap/viewmodel/ChargepriceViewModel.kt | 48 +++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt index f011ddcd..11729a33 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt @@ -60,6 +60,11 @@ class ChargepriceFragment : Fragment() { } } + override fun onResume() { + super.onResume() + vm.reloadPrefs() + } + private fun showDonationDialog() { AlertDialog.Builder(requireContext()) .setTitle(R.string.chargeprice_donation_dialog_title) diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt index 593b3994..789594a1 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt @@ -33,13 +33,30 @@ class ChargepriceViewModel(application: Application, chargepriceApiKey: String) MutableLiveData() } - val vehicles: MutableLiveData>> by lazy { - MutableLiveData>>().apply { - if (prefs.chargepriceMyVehicles.isEmpty()) { - value = Resource.success(emptyList()) - } else { - value = Resource.loading(null) - loadVehicles() + private val vehicleIds: MutableLiveData> by lazy { + MutableLiveData>().apply { + value = prefs.chargepriceMyVehicles + } + } + + val vehicles: LiveData>> by lazy { + MediatorLiveData>>().apply { + addSource(vehicleIds.distinctUntilChanged()) { vehicleIds -> + if (vehicleIds.isEmpty()) { + value = Resource.success(emptyList()) + } else { + value = Resource.loading(null) + viewModelScope.launch { + value = try { + val result = api.getVehicles() + Resource.success(result.filter { + it.id in vehicleIds + }) + } catch (e: IOException) { + Resource.error(e.message, null) + } + } + } } observeForever { vehicle.value = it.data?.firstOrNull() @@ -157,6 +174,10 @@ class ChargepriceViewModel(application: Application, chargepriceApiKey: String) } } + fun reloadPrefs() { + vehicleIds.value = prefs.chargepriceMyVehicles + } + private fun getChargepricePlugType(chargepoint: Chargepoint): String { val index = charger.value!!.chargepointsMerged.indexOf(chargepoint) val type = charger.value!!.chargepriceData!!.plugTypes?.get(index) ?: chargepoint.type @@ -261,17 +282,4 @@ class ChargepriceViewModel(application: Application, chargepriceApiKey: String) } } } - - private fun loadVehicles() { - viewModelScope.launch { - try { - val result = api.getVehicles() - vehicles.value = Resource.success(result.filter { - it.id in prefs.chargepriceMyVehicles - }) - } catch (e: IOException) { - vehicles.value = Resource.error(e.message, null) - } - } - } } \ No newline at end of file