From 20409343fd02ae087f30bf82433a7fde37ca49e8 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Wed, 22 Jun 2022 22:35:37 +0200 Subject: [PATCH] Android Auto/Automotive: add "select all" option to tariffs selection screen fixes #183 --- .../vonforst/evmap/auto/SearchSelectScreen.kt | 38 +++++++++++++++++++ .../vonforst/evmap/auto/SettingsScreens.kt | 14 +++++++ app/src/google/res/values-de/values.xml | 2 + app/src/google/res/values/values.xml | 2 + app/src/main/res/drawable/ic_select_all.xml | 10 +++++ app/src/main/res/drawable/ic_select_none.xml | 10 +++++ 6 files changed, 76 insertions(+) create mode 100644 app/src/main/res/drawable/ic_select_all.xml create mode 100644 app/src/main/res/drawable/ic_select_none.xml diff --git a/app/src/google/java/net/vonforst/evmap/auto/SearchSelectScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/SearchSelectScreen.kt index 0f898304..f36c571c 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/SearchSelectScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/SearchSelectScreen.kt @@ -1,11 +1,14 @@ package net.vonforst.evmap.auto import androidx.car.app.CarContext +import androidx.car.app.CarToast import androidx.car.app.Screen import androidx.car.app.constraints.ConstraintManager import androidx.car.app.model.* +import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.launch +import net.vonforst.evmap.R abstract class MultiSelectSearchScreen(ctx: CarContext) : Screen(ctx), SearchTemplate.SearchCallback { @@ -16,6 +19,7 @@ abstract class MultiSelectSearchScreen(ctx: CarContext) : Screen(ctx), ctx.constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST) } else 6 protected abstract val isMultiSelect: Boolean + protected abstract val shouldShowSelectAll: Boolean override fun onGetTemplate(): Template { if (fullList == null) { @@ -33,6 +37,30 @@ abstract class MultiSelectSearchScreen(ctx: CarContext) : Screen(ctx), } ?: run { setLoading(true) } + if (isMultiSelect) { + setActionStrip(ActionStrip.Builder().apply { + addAction( + Action.Builder().setIcon( + CarIcon.Builder( + IconCompat.createWithResource( + carContext, + R.drawable.ic_select_all + ) + ).build() + ).setOnClickListener(::selectAll).build() + ) + addAction( + Action.Builder().setIcon( + CarIcon.Builder( + IconCompat.createWithResource( + carContext, + R.drawable.ic_select_none + ) + ).build() + ).setOnClickListener(::selectNone).build() + ) + }.build()) + } }.build() } @@ -86,6 +114,16 @@ abstract class MultiSelectSearchScreen(ctx: CarContext) : Screen(ctx), abstract fun toggleSelected(item: T) + open fun selectAll() { + CarToast.makeText(carContext, R.string.selecting_all, CarToast.LENGTH_SHORT).show() + invalidate() + } + + open fun selectNone() { + CarToast.makeText(carContext, R.string.selecting_none, CarToast.LENGTH_SHORT).show() + invalidate() + } + abstract fun isSelected(it: T): Boolean abstract fun getLabel(it: T): String diff --git a/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt b/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt index 74cc236b..b668c8bf 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt @@ -183,6 +183,7 @@ class SelectVehiclesScreen(ctx: CarContext) : MultiSelectSearchScreen>(ctx) { private val prefs = PreferenceDataSource(carContext) override val isMultiSelect = false + override val shouldShowSelectAll = false override fun isSelected(it: Pair): Boolean = prefs.chargepriceCurrency == it.second diff --git a/app/src/google/res/values-de/values.xml b/app/src/google/res/values-de/values.xml index 42ccd5d9..bf0d7e5f 100644 --- a/app/src/google/res/values-de/values.xml +++ b/app/src/google/res/values-de/values.xml @@ -37,4 +37,6 @@ Mehrere der in der App ausgewählten Fahrzeuge passen zu diesem Fahrzeug (%1$s %2$s). Ladebereich für Preisvergleich In den Einstellungen kannst du auch zwischen Google Maps und OpenStreetMap (Mapbox) für die Kartendaten wechseln. + alle Einträge ausgewählt + alle Einträge abgewählt \ No newline at end of file diff --git a/app/src/google/res/values/values.xml b/app/src/google/res/values/values.xml index 2a5f399f..2d24a883 100644 --- a/app/src/google/res/values/values.xml +++ b/app/src/google/res/values/values.xml @@ -47,4 +47,6 @@ Mehrere der in der App ausgewählten Fahrzeuge passen zu diesem Fahrzeug (%1$s %2$s). Charging range for price comparison In the settings you can also switch between Google Maps and OpenStreetMap (Mapbox) for the map data. + selected all items + deselected all items \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_select_all.xml b/app/src/main/res/drawable/ic_select_all.xml new file mode 100644 index 00000000..15b2df09 --- /dev/null +++ b/app/src/main/res/drawable/ic_select_all.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_select_none.xml b/app/src/main/res/drawable/ic_select_none.xml new file mode 100644 index 00000000..f8b9c9d7 --- /dev/null +++ b/app/src/main/res/drawable/ic_select_none.xml @@ -0,0 +1,10 @@ + + +