From 8a9b3ad94805c2423cbbdb0ba5a69d4e9b72fe6f Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sun, 27 Aug 2023 19:05:04 +0200 Subject: [PATCH] Android Auto/Automotive: Make users explicitly accept the privacy policy --- .../net/vonforst/evmap/auto/CarAppService.kt | 5 ++++ .../vonforst/evmap/auto/PermissionScreen.kt | 1 + .../vonforst/evmap/auto/SettingsScreens.kt | 30 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/app/src/main/java/net/vonforst/evmap/auto/CarAppService.kt b/app/src/main/java/net/vonforst/evmap/auto/CarAppService.kt index 022a333c..ae8ece3b 100644 --- a/app/src/main/java/net/vonforst/evmap/auto/CarAppService.kt +++ b/app/src/main/java/net/vonforst/evmap/auto/CarAppService.kt @@ -149,6 +149,11 @@ class EVMapSession(val cas: CarAppService) : Session(), DefaultLifecycleObserver ) ) } + if (!prefs.privacyAccepted) { + screens.add( + AcceptPrivacyScreen(carContext) + ) + } if (screens.size > 1) { val screenManager = carContext.getCarService(ScreenManager::class.java) diff --git a/app/src/main/java/net/vonforst/evmap/auto/PermissionScreen.kt b/app/src/main/java/net/vonforst/evmap/auto/PermissionScreen.kt index 53d97f13..c9db7f04 100644 --- a/app/src/main/java/net/vonforst/evmap/auto/PermissionScreen.kt +++ b/app/src/main/java/net/vonforst/evmap/auto/PermissionScreen.kt @@ -23,6 +23,7 @@ class PermissionScreen( Action.Builder() .setTitle(carContext.getString(R.string.grant_on_phone)) .setBackgroundColor(CarColor.PRIMARY) + .setFlags(Action.FLAG_PRIMARY) .setOnClickListener(ParkedOnlyOnClickListener.create { requestPermissions() }) diff --git a/app/src/main/java/net/vonforst/evmap/auto/SettingsScreens.kt b/app/src/main/java/net/vonforst/evmap/auto/SettingsScreens.kt index fd092a5e..bc02cc61 100644 --- a/app/src/main/java/net/vonforst/evmap/auto/SettingsScreens.kt +++ b/app/src/main/java/net/vonforst/evmap/auto/SettingsScreens.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.content.pm.PackageManager.NameNotFoundException import android.hardware.Sensor import android.hardware.SensorManager +import android.text.Html import androidx.annotation.StringRes import androidx.car.app.CarContext import androidx.car.app.CarToast @@ -13,6 +14,7 @@ import androidx.car.app.annotations.ExperimentalCarApi import androidx.car.app.constraints.ConstraintManager import androidx.car.app.model.* import androidx.core.graphics.drawable.IconCompat +import androidx.core.text.HtmlCompat import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.launch import net.vonforst.evmap.* @@ -703,6 +705,34 @@ class AboutScreen(ctx: CarContext) : Screen(ctx) { } } +class AcceptPrivacyScreen(ctx: CarContext) : Screen(ctx) { + val prefs = PreferenceDataSource(ctx) + override fun onGetTemplate(): Template { + val textWithoutLink = HtmlCompat.fromHtml( + carContext.getString(R.string.accept_privacy), + HtmlCompat.FROM_HTML_MODE_LEGACY + ).toString() + return MessageTemplate.Builder(textWithoutLink).apply { + setTitle(carContext.getString(R.string.privacy)) + addAction(Action.Builder() + .setTitle(carContext.getString(R.string.ok)) + .setFlags(Action.FLAG_PRIMARY) + .setBackgroundColor(CarColor.PRIMARY) + .setOnClickListener { + prefs.privacyAccepted = true + screenManager.pop() + }.build() + ) + addAction(Action.Builder() + .setTitle(carContext.getString(R.string.privacy)) + .setOnClickListener(ParkedOnlyOnClickListener.create { + openUrl(carContext, carContext.getString(R.string.privacy_link)) + }).build() + ) + }.build() + } +} + class DeveloperOptionsScreen(ctx: CarContext) : Screen(ctx) { val prefs = PreferenceDataSource(ctx)