From f7c3faa7bd98ca35ea88e3a3a41061c52d17fd15 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sun, 9 May 2021 15:18:35 +0200 Subject: [PATCH] Chargeprice: show my tariffs first in overview --- .../evmap/adapter/DataBindingAdapters.kt | 16 ++++++++++++++- .../evmap/api/chargeprice/ChargepriceModel.kt | 3 +++ .../evmap/fragment/ChargepriceFragment.kt | 6 ++++++ .../net/vonforst/evmap/ui/BindingAdapters.kt | 11 ++++++++++ .../evmap/viewmodel/ChargepriceViewModel.kt | 20 ++++++++++++++++++- .../res/drawable/my_tariff_background.xml | 5 +++++ app/src/main/res/layout/item_chargeprice.xml | 12 ++++++++++- 7 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/my_tariff_background.xml diff --git a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt index 00b7adb1..a9fffcac 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt @@ -107,6 +107,16 @@ class ChargepriceAdapter() : field = value notifyDataSetChanged() } + var myTariffs: Set? = null + set(value) { + field = value + notifyDataSetChanged() + } + var myTariffsAll: Boolean? = null + set(value) { + field = value + notifyDataSetChanged() + } override fun getItemViewType(position: Int): Int = R.layout.item_chargeprice @@ -127,7 +137,11 @@ class ChargepriceAdapter() : override fun bind(holder: ViewHolder, item: ChargePrice) { super.bind(holder, item) - (holder.binding as ItemChargepriceBinding).meta = meta + (holder.binding as ItemChargepriceBinding).apply { + this.meta = this@ChargepriceAdapter.meta + this.myTariffs = this@ChargepriceAdapter.myTariffs + this.myTariffsAll = this@ChargepriceAdapter.myTariffsAll + } } } diff --git a/app/src/main/java/net/vonforst/evmap/api/chargeprice/ChargepriceModel.kt b/app/src/main/java/net/vonforst/evmap/api/chargeprice/ChargepriceModel.kt index d66738f7..3294f611 100644 --- a/app/src/main/java/net/vonforst/evmap/api/chargeprice/ChargepriceModel.kt +++ b/app/src/main/java/net/vonforst/evmap/api/chargeprice/ChargepriceModel.kt @@ -179,6 +179,8 @@ class ChargePrice : Resource(), Equatable, Cloneable { @field:Json(name = "charge_point_prices") lateinit var chargepointPrices: List + var tariff: HasOne? = null + fun formatMonthlyFees(ctx: Context): String { return listOfNotNull( @@ -245,6 +247,7 @@ class ChargePrice : Resource(), Equatable, Cloneable { tariffName = this@ChargePrice.tariffName totalMonthlyFee = this@ChargePrice.totalMonthlyFee url = this@ChargePrice.url + tariff = this@ChargePrice.tariff } } } 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 96939966..f05a2a58 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/ChargepriceFragment.kt @@ -112,6 +112,12 @@ class ChargepriceFragment : DialogFragment() { vm.chargepriceMetaForChargepoint.observe(viewLifecycleOwner) { chargepriceAdapter.meta = it?.data } + vm.myTariffs.observe(viewLifecycleOwner) { + chargepriceAdapter.myTariffs = it + } + vm.myTariffsAll.observe(viewLifecycleOwner) { + chargepriceAdapter.myTariffsAll = it + } val connectorsAdapter = CheckableConnectorAdapter() diff --git a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt index c72ed171..a35b287a 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt @@ -291,4 +291,15 @@ fun colorEnabled(ctx: Context, enabled: Boolean): Int { @BindingAdapter("app:tint") fun setImageTintList(view: ImageView, @ColorInt color: Int) { view.imageTintList = ColorStateList.valueOf(color) +} + +@BindingAdapter("myTariffsBackground") +fun myTariffsBackground(view: View, myTariff: Boolean) { + if (myTariff) { + view.background = ContextCompat.getDrawable(view.context, R.drawable.my_tariff_background) + } else { + view.context.obtainStyledAttributes(intArrayOf(R.attr.selectableItemBackground)).use { + view.background = it.getDrawable(0) + } + } } \ No newline at end of file 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 64c9487a..bf1b11c7 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/ChargepriceViewModel.kt @@ -115,6 +115,7 @@ class ChargepriceViewModel(application: Application, chargepriceApiKey: String) } else if (cps.status == Status.LOADING) { value = Resource.loading(null) } else { + val myTariffs = prefs.chargepriceMyTariffs value = Resource.success(cps.data!!.map { cp -> val filteredPrices = cp.chargepointPrices.filter { it.plug == chargepoint.type && it.power == chargepoint.power } @@ -125,13 +126,30 @@ class ChargepriceViewModel(application: Application, chargepriceApiKey: String) chargepointPrices = filteredPrices } } - }.filterNotNull().sortedBy { it.chargepointPrices.first().price }) + }.filterNotNull() + .sortedBy { it.chargepointPrices.first().price } + .sortedByDescending { + prefs.chargepriceMyTariffsAll || + myTariffs != null && it.tariff?.get()?.id in myTariffs + } + ) } } } } } + val myTariffs: LiveData> by lazy { + MutableLiveData>().apply { + value = prefs.chargepriceMyTariffs + } + } + val myTariffsAll: LiveData by lazy { + MutableLiveData().apply { + value = prefs.chargepriceMyTariffsAll + } + } + val chargepriceMetaForChargepoint: MediatorLiveData> by lazy { MediatorLiveData>().apply { listOf(chargePriceMeta, chargepoint).forEach { diff --git a/app/src/main/res/drawable/my_tariff_background.xml b/app/src/main/res/drawable/my_tariff_background.xml new file mode 100644 index 00000000..fd2a45e2 --- /dev/null +++ b/app/src/main/res/drawable/my_tariff_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_chargeprice.xml b/app/src/main/res/layout/item_chargeprice.xml index 4bf9898c..b1daf1ed 100644 --- a/app/src/main/res/layout/item_chargeprice.xml +++ b/app/src/main/res/layout/item_chargeprice.xml @@ -11,6 +11,8 @@ + + @@ -18,6 +20,14 @@ + + + + + app:myTariffsBackground="@{!myTariffsAll && myTariffs.contains(item.tariff.get().id)}">