Skip to content

Commit 8e9d9d1

Browse files
committed
Auto: make new map screen optional for now
mainly due to bug https://issuetracker.google.com/issues/389974133
1 parent ca9a7df commit 8e9d9d1

5 files changed

Lines changed: 47 additions & 3 deletions

File tree

app/src/main/java/net/vonforst/evmap/auto/CarAppService.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class CarAppService : androidx.car.app.CarAppService() {
109109
@ExperimentalCarApi
110110
class EVMapSession(val cas: CarAppService) : Session(), DefaultLifecycleObserver {
111111
private val TAG = "EVMapSession"
112+
lateinit var intent: Intent
112113
var mapScreen: LocationAwareScreen? = null
113114
set(value) {
114115
field = value
@@ -132,7 +133,8 @@ class EVMapSession(val cas: CarAppService) : Session(), DefaultLifecycleObserver
132133
}
133134

134135
override fun onCreateScreen(intent: Intent): Screen {
135-
val mapScreen = if (supportsNewMapScreen(carContext)) {
136+
this.intent = intent
137+
val mapScreen = if (supportsNewMapScreen(carContext) && prefs.androidAutoNewMapScreenEnabled) {
136138
MapScreen(carContext, this)
137139
} else {
138140
LegacyMapScreen(carContext, this)

app/src/main/java/net/vonforst/evmap/auto/SettingsScreens.kt

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,13 @@ import java.io.IOException
4747
import java.time.Instant
4848

4949
@ExperimentalCarApi
50-
class SettingsScreen(ctx: CarContext, val session: EVMapSession) : Screen(ctx) {
50+
class SettingsScreen(ctx: CarContext, val session: EVMapSession) : Screen(ctx), DefaultLifecycleObserver {
5151
val prefs = PreferenceDataSource(ctx)
52+
val newMapScreenEnabledPrevious = prefs.androidAutoNewMapScreenEnabled
53+
54+
init {
55+
lifecycle.addObserver(this)
56+
}
5257

5358
override fun onGetTemplate(): Template {
5459
return ListTemplate.Builder().apply {
@@ -87,7 +92,26 @@ class SettingsScreen(ctx: CarContext, val session: EVMapSession) : Screen(ctx) {
8792
}
8893
.build()
8994
)
90-
if (carContext.carAppApiLevel < 7 || !carContext.isAppDrivenRefreshSupported) {
95+
if (supportsNewMapScreen(carContext)) {
96+
addItem(
97+
Row.Builder()
98+
.setTitle(carContext.getString(R.string.auto_use_new_map_screen))
99+
.setToggle(Toggle.Builder {
100+
prefs.androidAutoNewMapScreenEnabled = it
101+
invalidate()
102+
}.setChecked(prefs.androidAutoNewMapScreenEnabled).build())
103+
.setImage(
104+
CarIcon.Builder(
105+
IconCompat.createWithResource(
106+
carContext,
107+
R.drawable.ic_developer
108+
)
109+
).setTint(CarColor.DEFAULT).build()
110+
)
111+
.build()
112+
)
113+
}
114+
if (!supportsNewMapScreen(carContext) || !prefs.androidAutoNewMapScreenEnabled) {
91115
// this option is only supported in LegacyMapScreen
92116
addItem(
93117
Row.Builder()
@@ -127,6 +151,15 @@ class SettingsScreen(ctx: CarContext, val session: EVMapSession) : Screen(ctx) {
127151
}.build())
128152
}.build()
129153
}
154+
155+
override fun onStop(owner: LifecycleOwner) {
156+
if (newMapScreenEnabledPrevious != prefs.androidAutoNewMapScreenEnabled) {
157+
val newMapScreen = session.onCreateScreen(session.intent)
158+
val oldMapScreen = screenManager.screenStack.last()
159+
screenManager.push(newMapScreen)
160+
screenManager.remove(oldMapScreen)
161+
}
162+
}
130163
}
131164

132165
@ExperimentalCarApi

app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import net.vonforst.evmap.autocomplete.PlaceWithBounds
1212
import net.vonforst.evmap.model.FILTERS_CUSTOM
1313
import net.vonforst.evmap.model.FILTERS_DISABLED
1414
import java.time.Instant
15+
import androidx.core.content.edit
1516

1617
class PreferenceDataSource(val context: Context) {
1718
val sp = PreferenceManager.getDefaultSharedPreferences(context)
@@ -254,6 +255,12 @@ class PreferenceDataSource(val context: Context) {
254255
set(value) {
255256
sp.edit().putBoolean("android_auto_compass_enabled", value).apply()
256257
}
258+
259+
var androidAutoNewMapScreenEnabled: Boolean
260+
get() = sp.getBoolean("android_auto_new_map_screen_enabled", false)
261+
set(value) {
262+
sp.edit { putBoolean("android_auto_new_map_screen_enabled", value) }
263+
}
257264
}
258265

259266
fun SharedPreferences.getLatLng(key: String): LatLng? =

app/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,4 +388,5 @@
388388
<string name="accessibility_residents">Bewohner</string>
389389
<string name="chargeprice_removal_2025_dialog_title">Sorry!</string>
390390
<string name="chargeprice_removal_2025_dialog_detail">Die Kosten für den Zugriff auf Chargeprice-Daten sind stark gestiegen und können nicht mehr durch Spenden gedeckt werden. Daher kann EVMap diese Daten nicht mehr direkt anzeigen. Hier öffnet sich nun die Chargeprice-Website. Eine alternative Lösung ist in Arbeit, wird aber Zeit brauchen und anfangs nur eingeschränkt funktionieren. Danke für eure Geduld und Unterstützung!</string>
391+
<string name="auto_use_new_map_screen">Neue Kartendarstellung (beta)</string>
391392
</resources>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,4 +388,5 @@
388388
<string name="accessibility_residents">Residents</string>
389389
<string name="chargeprice_removal_2025_dialog_title">Sorry!</string>
390390
<string name="chargeprice_removal_2025_dialog_detail">Costs for Chargeprice data access have risen sharply and can’t be covered by donations, so EVMap can no longer show this data directly. For now, this opens the Chargeprice website. An alternative solution is being developed, but it’ll take time and may start with limited features. Thanks for your patience and support!</string>
391+
<string name="auto_use_new_map_screen">New map screen (beta)</string>
391392
</resources>

0 commit comments

Comments
 (0)