From 6ac49fd84df0bd35982506ee3899f2b2b8b5a6b1 Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Thu, 2 Jul 2020 19:15:44 +0200 Subject: [PATCH] highlight selected charging cards also in detail dialog (refs #32) --- app/src/main/java/net/vonforst/evmap/Utils.kt | 15 ++++++++++++--- .../evmap/adapter/DataBindingAdapters.kt | 16 ++-------------- .../net/vonforst/evmap/fragment/MapFragment.kt | 15 ++++++++++++--- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/net/vonforst/evmap/Utils.kt b/app/src/main/java/net/vonforst/evmap/Utils.kt index 1d41b3e1..a4c285ac 100644 --- a/app/src/main/java/net/vonforst/evmap/Utils.kt +++ b/app/src/main/java/net/vonforst/evmap/Utils.kt @@ -1,9 +1,9 @@ package net.vonforst.evmap +import android.graphics.Typeface import android.os.Bundle -import android.text.SpannableStringBuilder -import android.text.SpannedString -import android.text.TextUtils +import android.text.* +import android.text.style.StyleSpan fun Bundle.optDouble(name: String): Double? { if (!this.containsKey(name)) return null @@ -42,4 +42,13 @@ fun Iterable.joinToSpannedString( operator fun CharSequence.plus(other: CharSequence): CharSequence { return TextUtils.concat(this, other) +} + +fun String.bold(): CharSequence { + return SpannableString(this).apply { + setSpan( + StyleSpan(Typeface.BOLD), 0, this.length, + Spannable.SPAN_INCLUSIVE_EXCLUSIVE + ) + } } \ No newline at end of file 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 20e3bba7..64fde378 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt @@ -1,10 +1,6 @@ package net.vonforst.evmap.adapter import android.content.Context -import android.graphics.Typeface -import android.text.Spannable -import android.text.SpannableString -import android.text.style.StyleSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -18,16 +14,13 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.google.android.material.chip.Chip -import net.vonforst.evmap.BR -import net.vonforst.evmap.R +import net.vonforst.evmap.* import net.vonforst.evmap.api.availability.ChargepointStatus import net.vonforst.evmap.api.goingelectric.* import net.vonforst.evmap.databinding.ItemFilterMultipleChoiceBinding import net.vonforst.evmap.databinding.ItemFilterMultipleChoiceLargeBinding import net.vonforst.evmap.databinding.ItemFilterSliderBinding import net.vonforst.evmap.fragment.MultiSelectDialog -import net.vonforst.evmap.joinToSpannedString -import net.vonforst.evmap.plus import net.vonforst.evmap.viewmodel.* import java.time.ZoneId import java.time.format.DateTimeFormatter @@ -211,12 +204,7 @@ fun formatChargeCards( .mapNotNull { val name = chargecardData[it.id]?.name ?: return@mapNotNull null if (filteredChargeCards?.contains(it.id) == true) { - SpannableString(name).apply { - setSpan( - StyleSpan(Typeface.BOLD), 0, this.length, - Spannable.SPAN_INCLUSIVE_EXCLUSIVE - ) - } + name.bold() } else { name } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index 4ea5a98a..60c8f409 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -508,13 +508,22 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac val activity = activity ?: return val chargecardData = vm.chargeCardMap.value ?: return val chargecards = charger.chargecards ?: return + val filteredChargeCards = vm.filteredChargeCards.value - val data = chargecards.map { chargecardData[it.id] }.sortedBy { it?.name } - val names = data.map { it?.name ?: "" } + val data = chargecards.mapNotNull { chargecardData[it.id] } + .sortedBy { it.name } + .sortedByDescending { filteredChargeCards?.contains(it.id) } + val names = data.map { + if (filteredChargeCards?.contains(it.id) == true) { + it.name.bold() + } else { + it.name + } + } AlertDialog.Builder(activity) .setTitle(R.string.charge_cards) .setItems(names.toTypedArray()) { _, i -> - val card = data[i] ?: return@setItems + val card = data[i] (activity as? MapsActivity)?.openUrl("https:${card.url}") }.show() }