From 5f14cd0bb3d7950c22b45bd04ca31a7fb8da2673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20W=C3=BCrl?= Date: Sun, 29 Dec 2024 20:57:13 +0100 Subject: [PATCH] Rework permission setup (#259) * Use "auto" grid size by default * refactor permission setup * update * update android plugin * update notification text * exclude for older OS * update text * update version * update * update * update --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 2 + .../org/blitzortung/android/app/AppService.kt | 34 ++++++++ .../java/org/blitzortung/android/app/Main.kt | 85 +++++++++++-------- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- build.gradle | 4 +- 12 files changed, 94 insertions(+), 47 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 182e5b17..f26e991e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { applicationId "org.blitzortung.android.app" minSdkVersion 21 targetSdkVersion 34 - versionCode 323 + versionCode 325 versionName '2.2.6' multiDexEnabled false testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b7c61f1..39e3fb63 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,7 +11,9 @@ + + - requestPermission( - arrayOf(permission), requestCode, R.string.location_permission_required - ) - }.show() + requestPermission( + permission, requestCode, + R.string.location_permission_required + ) } else { - if (requiresBackgroundPermission) { - requestPermission( - arrayOf(ACCESS_BACKGROUND_LOCATION), - requestCode, - R.string.location_permission_background_required - ) + if (requiresBackgroundPermission && isAtLeast(Build.VERSION_CODES.Q)) { + val locationText = this.resources.getString(R.string.location_permission_background_disclosure) + AlertDialog.Builder(this).setMessage(locationText).setCancelable(false) + .setPositiveButton(android.R.string.ok) { dialog, count -> + requestPermission( + ACCESS_BACKGROUND_LOCATION, + requestCode, + R.string.location_permission_background_required + ) + }.show() } } } } + @TargetApi(Build.VERSION_CODES.M) - private fun requestPermission(permission: Array, requestCode: Int, permissionRequiredStringId: Int) { - val shouldShowPermissionRationale = shouldShowRequestPermissionRationale(permission[0]) - val permissionStatus = checkSelfPermission(permission[0]) + private fun requestPermission(permission: String, requestCode: Int, permissionRequiredStringId: Int) { + val shouldShowPermissionRationale = shouldShowRequestPermissionRationale(permission) + val permissionIsGranted = checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED Log.v( LOG_TAG, - "Main.requestPermission() permission: ${permission.joinToString()}, status: $permissionStatus, shouldRequest: ${!shouldShowPermissionRationale}" + "Main.requestPermission() permission: $permission, isGranted: $permissionIsGranted, shouldShowRationale: ${!shouldShowPermissionRationale}" ) - if (!shouldShowPermissionRationale && permissionStatus != PackageManager.PERMISSION_GRANTED) { - requestPermissions(permission, requestCode) - } else { + + if (!permissionIsGranted) { if (shouldShowPermissionRationale) { - Toast.makeText(baseContext, permissionRequiredStringId, Toast.LENGTH_LONG).show() + requestPermissionsAfterDialog(permissionRequiredStringId, permission, requestCode) + } else { + requestPermissions(arrayOf(permission), requestCode) } } } + @TargetApi(Build.VERSION_CODES.M) + private fun requestPermissionsAfterDialog( + dialogTextResource: Int, + permission: String, + requestCode: Int, + ) { + Log.v( + LOG_TAG, + "Main.requestPermissionsAfterDialog() permission: $permission, dialogResource: $dialogTextResource, requestCode: $requestCode" + ) + + val locationText = resources.getString(dialogTextResource) + AlertDialog.Builder(this).setMessage(locationText).setCancelable(false) + .setPositiveButton(android.R.string.ok) { dialog, count -> + Log.v(LOG_TAG, "Main.requestPermissionsAfterDialog() clicked OK, before request") + requestPermissions(arrayOf(permission), requestCode) + Log.v(LOG_TAG, "Main.requestPermissionsAfterDialog() clicked OK, after request") + }.show() + } + @TargetApi(Build.VERSION_CODES.M) private fun requestWakeupPermissions(context: Context) { Log.v(LOG_TAG, "requestWakeupPermissions() background alerts: $backgroundAlertEnabled") diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f8e1b8b5..67a47560 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -364,7 +364,7 @@ Ivan Karev (karev.ivan@gmail.com)\nTschechisch: Jakub Mareček (jakubmarecek715@ Für die Ortsbestimmung über den Gerätestandort ist die Berechtigung erforderlich. Für die Ortsbestimmung über den Gerätestandort im Hintergrund ist die Berechtigung erforderlich. Änderungsprotokoll - Diese App verwendet Standortdaten, auch wenn die App geschlossen ist oder nicht verwendet wird, wenn Warnungen im Hintergrund mit einer Gerätestandortquelle verwendet werden. + Diese App verwendet Standortdaten und Datenübertragung, auch wenn die App geschlossen ist oder nicht verwendet wird, sofern Warnungen im Hintergrund aktiviert wurden. Menü öffnen jetzt Vergangenheit diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f783b5c3..29913459 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -362,7 +362,7 @@ Traducción ruso por: Ivan Karev (karev.ivan@gmail.com)\n Change log Se requiere permiso de ubicación cuando se usa una fuente de ubicación de dispositivo. Se requiere permiso de ubicación en segundo plano cuando se utiliza una fuente de ubicación de dispositivo. - Esta aplicación usa datos de ubicación incluso cuando la aplicación está cerrada o no está en uso cuando se usan alarmas en segundo plano con una fuente de ubicación del dispositivo. + Esta aplicación utiliza datos de ubicación y datos de red incluso cuando la aplicación está cerrada o no está en uso cuando usa alarmas en segundo plano con una fuente de ubicación del dispositivo. Menú abierto ahora Pasado diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 092697d0..3e6eff4b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -362,7 +362,7 @@ Russe: Ivan Karev (karev.ivan@gmail.com)\n Change log L\'autorisation de localisation est requise lors de l\'utilisation d\'une source de localisation de périphérique. L\'autorisation de localisation en arrière-plan est requise lors de l\'utilisation d\'une source de localisation de périphérique. - Cette application utilise les données de localisation même lorsque l\'application est fermée ou non utilisée lors de l\'utilisation d\'alarmes d\'arrière-plan avec une source de localisation de périphérique. + Cette application utilise les données de localisation et les données réseau même lorsque l\'application est fermée ou n\'est pas utilisée lors de l\'utilisation d\'alarmes en arrière-plan avec une source de localisation d\'appareil. maintenant Passé [Heures] diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 62c4a491..6d8d494c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -353,6 +353,6 @@ Traduzione russo di: Ivan Karev (karev.ivan@gmail.com)\n Change log L\'autorizzazione alla posizione è richiesta quando si utilizza un\'origine della posizione del dispositivo. L\'autorizzazione alla posizione in background è necessaria quando si utilizza un\'origine della posizione del dispositivo. - Questa app utilizza i dati sulla posizione anche quando l\'app è chiusa o non è in uso quando si utilizzano allarmi in background con un\'origine della posizione del dispositivo. + Questa app utilizza i dati sulla posizione e i dati di rete anche quando l\'app è chiusa o non in uso quando si utilizzano allarmi in background con una fonte di posizione del dispositivo. Intervallo di animazione diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b645966a..0a339759 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -362,7 +362,7 @@ Russisch: Ivan Karev (karev.ivan@gmail.com)\n Locatie delen is nodig om je huidige locatie te bepalen. Change log Achtergrondlocatietoestemming is vereist bij het gebruik van een apparaatlocatiebron. - Deze app gebruikt locatiegegevens, zelfs wanneer de app is gesloten of niet in gebruik is, wanneer achtergrondalarmen worden gebruikt met een apparaatlocatiebron. + Deze app gebruikt locatiegegevens en netwerkgegevens, zelfs wanneer de app gesloten is of niet in gebruik is bij gebruik van achtergrondalarmen met een apparaatlocatiebron. Menu openen nu Verleden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 577e3081..4f01e4e9 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -365,7 +365,7 @@ rosyjski: Ivan Karev (karev.ivan@gmail.com)\n Wybierz skalowanie [%] kafelków mapy W przypadku korzystania ze źródła lokalizacji urządzenia wymagane jest uprawnienie do lokalizacji. W przypadku korzystania ze źródła lokalizacji urządzenia wymagane jest uprawnienie do lokalizacji w tle. - Ta aplikacja korzysta z danych o lokalizacji nawet wtedy, gdy jest zamknięta lub nieużywana, podczas korzystania z alarmów w tle. + Ta aplikacja korzysta z danych o Twojej lokalizacji i danych sieciowych, nawet jeśli jest zamknięta lub nieużywana, a w tle włączone są alarmy. Nie można znaleźć miejsca do zapisu mapy. Proszę zgłosić. Dziennik zmian Otwórz menu diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 128a73b9..fc4223af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -379,7 +379,7 @@ Russian by Ivan Karev (karev.ivan@gmail.com)\n Select scaling [%] of map tiles Location permission is required when using a device location source. Background location permission is required when using a device location source. - This app uses location data even when the app is closed or not in use when using background alarms with a device location source. + This app uses location data and network data transfer even when the app is closed or not in use when using background alarms. Cannot find writable storage for map. Please report. Change log Open menu diff --git a/build.gradle b/build.gradle index 327add29..4260f9b1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.7.1' apply false - id 'com.android.library' version '8.7.1' apply false + id 'com.android.application' version '8.7.3' apply false + id 'com.android.library' version '8.7.3' apply false id 'org.jetbrains.kotlin.android' version '2.0.20' apply false id "org.sonarqube" version "5.1.0.4882" }