mirror of
https://github.com/ev-map/EVMap.git
synced 2026-02-28 04:16:57 -05:00
Chargeprice vehicle selection: Add battery size and charging power to distinguish vehicle models
fixes #268
This commit is contained in:
@@ -114,7 +114,16 @@ data class ChargepriceCar(
|
||||
val brand: String,
|
||||
|
||||
@Json(name = "dc_charge_ports")
|
||||
val dcChargePorts: List<String>
|
||||
val dcChargePorts: List<String>,
|
||||
|
||||
@Json(name = "usable_battery_size")
|
||||
val usableBatterySize: Float,
|
||||
|
||||
@Json(name = "ac_max_power")
|
||||
val acMaxPower: Float,
|
||||
|
||||
@Json(name = "dc_max_power")
|
||||
val dcMaxPower: Float?
|
||||
) : Equatable, Parcelable {
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -17,7 +17,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
companion object {
|
||||
fun getInstance(
|
||||
title: String,
|
||||
data: Map<String, String>,
|
||||
data: Map<String, CharSequence>,
|
||||
selected: Set<String>,
|
||||
commonChoices: Set<String>?,
|
||||
showAllButton: Boolean = true
|
||||
@@ -55,7 +55,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
|
||||
override fun initView(view: View, savedInstanceState: Bundle?) {
|
||||
val args = requireArguments()
|
||||
val data = args.getSerializable("data") as HashMap<String, String>
|
||||
val data = args.getSerializable("data") as HashMap<String, CharSequence>
|
||||
val selected = args.getSerializable("selected") as HashSet<String>
|
||||
val title = args.getString("title")
|
||||
val commonChoices = if (args.containsKey("commonChoices")) {
|
||||
@@ -71,7 +71,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
binding.btnAll.visibility = if (showAllButton) View.VISIBLE else View.INVISIBLE
|
||||
|
||||
items = data.entries.toList()
|
||||
.sortedBy { it.value.lowercase(Locale.getDefault()) }
|
||||
.sortedBy { it.value.toString().lowercase(Locale.getDefault()) }
|
||||
.sortedBy {
|
||||
when {
|
||||
selected.contains(it.key) && commonChoices?.contains(it.key) == true -> 0
|
||||
@@ -117,7 +117,7 @@ private fun search(
|
||||
): List<MultiSelectItem> {
|
||||
return items.filter { item ->
|
||||
// search for string within name
|
||||
text.lowercase(Locale.getDefault()) in item.name.lowercase(Locale.getDefault())
|
||||
text.lowercase(Locale.getDefault()) in item.name.toString().lowercase(Locale.getDefault())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,4 +125,5 @@ class Adapter() : DataBindingAdapter<MultiSelectItem>({ it.key }) {
|
||||
override fun getItemViewType(position: Int) = R.layout.dialog_multi_select_item
|
||||
}
|
||||
|
||||
data class MultiSelectItem(val key: String, val name: String, var selected: Boolean) : Equatable
|
||||
data class MultiSelectItem(val key: String, val name: CharSequence, var selected: Boolean) :
|
||||
Equatable
|
||||
@@ -2,13 +2,19 @@ package net.vonforst.evmap.fragment.preference
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
import android.text.style.ImageSpan
|
||||
import android.text.style.RelativeSizeSpan
|
||||
import android.view.View
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.preference.MultiSelectListPreference
|
||||
import net.vonforst.evmap.R
|
||||
import net.vonforst.evmap.ui.MultiSelectDialogPreference
|
||||
import net.vonforst.evmap.viewmodel.SettingsViewModel
|
||||
import net.vonforst.evmap.viewmodel.viewModelFactory
|
||||
|
||||
|
||||
class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
override val isTopLevel = false
|
||||
|
||||
@@ -22,8 +28,8 @@ class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
}
|
||||
})
|
||||
|
||||
private lateinit var myVehiclePreference: MultiSelectListPreference
|
||||
private lateinit var myTariffsPreference: MultiSelectListPreference
|
||||
private lateinit var myVehiclePreference: MultiSelectDialogPreference
|
||||
private lateinit var myTariffsPreference: MultiSelectDialogPreference
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -34,8 +40,21 @@ class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
res.data?.let { cars ->
|
||||
val sortedCars = cars.sortedBy { it.brand }
|
||||
myVehiclePreference.entryValues = sortedCars.map { it.id }.toTypedArray()
|
||||
myVehiclePreference.entries =
|
||||
sortedCars.map { "${it.brand} ${it.name}" }.toTypedArray()
|
||||
myVehiclePreference.entries = sortedCars.map {
|
||||
SpannableStringBuilder().apply {
|
||||
appendLine("${it.brand} ${it.name}")
|
||||
append(SpannableStringBuilder().apply {
|
||||
append("%.0f kWh".format(it.usableBatterySize))
|
||||
append(" | ")
|
||||
append("AC %.0f kW".format(it.acMaxPower))
|
||||
it.dcMaxPower?.let {
|
||||
append(" | ")
|
||||
append("DC %.0f kW".format(it))
|
||||
}
|
||||
}, RelativeSizeSpan(0.86f), Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
|
||||
|
||||
}
|
||||
}.toTypedArray()
|
||||
myVehiclePreference.isEnabled = true
|
||||
updateMyVehiclesSummary()
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ class MultiSelectDialogPreference(ctx: Context, attrs: AttributeSet) :
|
||||
val dialog =
|
||||
MultiSelectDialog.getInstance(
|
||||
title.toString(),
|
||||
entryValues.map { it.toString() }.zip(entries.map { it.toString() }).toMap(),
|
||||
entryValues.map { it.toString() }.zip(entries).toMap(),
|
||||
if (all) entryValues.map { it.toString() }.toSet() else values,
|
||||
emptySet(),
|
||||
showAllButton
|
||||
|
||||
Reference in New Issue
Block a user