From af9207c7a0a72b5655059f89e51e46a274d3cda5 Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Wed, 25 Jan 2023 15:31:16 +0100 Subject: [PATCH 1/4] Fix missing permissions on newer Android versions --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 2 ++ .../gotify/init/InitializationActivity.kt | 25 ++++++++++++++++++- build.gradle | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0448d248..c5a50aac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable:1.1.0' implementation 'androidx.preference:preference:1.2.0' + implementation 'com.github.quickpermissions:quickpermissions-kotlin:0.4.0' implementation 'com.hypertrack:hyperlog:0.0.10' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'io.noties.markwon:core:4.6.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e398f1c3..37f4a2ac 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ + + Unit) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // Android 13 and above + runWithPermissions( + Manifest.permission.SCHEDULE_EXACT_ALARM, + Manifest.permission.POST_NOTIFICATIONS, + callback = action + ) + } else { + // Android 12 and Android 12L + runWithPermissions(Manifest.permission.SCHEDULE_EXACT_ALARM, callback = action) + } + } else { + // Android 11 and below + action() + } + } } diff --git a/build.gradle b/build.gradle index e8dddf7f..d8ddb3ff 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,7 @@ allprojects { repositories { google() jcenter() + maven { url "https://jitpack.io/" } } } From da657f88906cfd9a50227a6b3e5cb1c18f3bf2da Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Fri, 27 Jan 2023 16:04:20 +0100 Subject: [PATCH 2/4] Use QuickPermissions fork + use custom dialogs --- app/build.gradle | 2 +- .../gotify/init/InitializationActivity.kt | 38 ++++++++++++++++++- app/src/main/res/values/strings.xml | 3 ++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c5a50aac..78b01443 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,7 +68,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable:1.1.0' implementation 'androidx.preference:preference:1.2.0' - implementation 'com.github.quickpermissions:quickpermissions-kotlin:0.4.0' + implementation 'com.github.cyb3rko:QuickPermissions-Kotlin:1.0.1' implementation 'com.hypertrack:hyperlog:0.0.10' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'io.noties.markwon:core:4.6.2' diff --git a/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt b/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt index 4c76aba7..ae342d9c 100644 --- a/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt +++ b/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt @@ -23,7 +23,9 @@ import com.github.gotify.login.LoginActivity import com.github.gotify.messages.MessagesActivity import com.github.gotify.service.WebSocketService import com.github.gotify.settings.ThemeHelper -import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions +import com.livinglifetechway.quickpermissionskotlin.runWithPermissions +import com.livinglifetechway.quickpermissionskotlin.util.QuickPermissionsOptions +import com.livinglifetechway.quickpermissionskotlin.util.QuickPermissionsRequest internal class InitializationActivity : AppCompatActivity() { @@ -137,20 +139,52 @@ internal class InitializationActivity : AppCompatActivity() { private fun runWithNeededPermissions(action: () -> Unit) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val quickPermissionsOption = QuickPermissionsOptions( + handleRationale = true, + handlePermanentlyDenied = true, + rationaleMethod = { req -> processPermissionRationale(req) }, + permissionsDeniedMethod = { req -> processPermissionRationale(req) }, + permanentDeniedMethod = { req -> processPermissionsPermanentDenied(req) } + ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13 and above runWithPermissions( Manifest.permission.SCHEDULE_EXACT_ALARM, Manifest.permission.POST_NOTIFICATIONS, + options = quickPermissionsOption, callback = action ) } else { // Android 12 and Android 12L - runWithPermissions(Manifest.permission.SCHEDULE_EXACT_ALARM, callback = action) + runWithPermissions( + Manifest.permission.SCHEDULE_EXACT_ALARM, + options = quickPermissionsOption, + callback = action + ) } } else { // Android 11 and below action() } } + + private fun processPermissionRationale(req: QuickPermissionsRequest) { + AlertDialog.Builder(this) + .setMessage(getString(R.string.permissions_denied_temp)) + .setPositiveButton(getString(R.string.permissions_dialog_grant)) { _, _ -> + req.proceed() + } + .setCancelable(false) + .show() + } + + private fun processPermissionsPermanentDenied(req: QuickPermissionsRequest) { + AlertDialog.Builder(this) + .setMessage(getString(R.string.permissions_denied_permanent)) + .setPositiveButton(getString(R.string.permissions_dialog_grant)) { _, _ -> + req.openAppSettings() + } + .setCancelable(false) + .show() + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c440644f..a217c947 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,9 @@ Failed to read CA: %s Login Check URL + Grant + Please grant the following required permissions. + Please grant the required permissions in the settings. Gotify logo Refresh all Do you really want to logout? From d62dc9b72b2c3effaf9cb242f425fae023e41b81 Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Fri, 27 Jan 2023 16:36:33 +0100 Subject: [PATCH 3/4] Fix lint error because of incompatible Kotlin version --- app/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 78b01443..de468fa6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,6 +36,9 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } + kotlinOptions { + jvmTarget = '11' + } lintOptions { disable 'GoogleAppIndexingWarning' lintConfig file('../lint.xml') @@ -68,7 +71,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable:1.1.0' implementation 'androidx.preference:preference:1.2.0' - implementation 'com.github.cyb3rko:QuickPermissions-Kotlin:1.0.1' + implementation 'com.github.cyb3rko:QuickPermissions-Kotlin:1.0.2' implementation 'com.hypertrack:hyperlog:0.0.10' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'io.noties.markwon:core:4.6.2' From c416ed7d4b302976bd9c7140ec278d15ee394983 Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Sat, 28 Jan 2023 19:23:31 +0100 Subject: [PATCH 4/4] Add more specific permission description --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a217c947..5c097c84 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,8 +46,8 @@ Login Check URL Grant - Please grant the following required permissions. - Please grant the required permissions in the settings. + Gotify requires permission to display push notifications. + Gotify requires permission to display push notifications. Please grant the required permission in the settings. Gotify logo Refresh all Do you really want to logout?