diff --git a/app/build.gradle b/app/build.gradle index c5a50aa..78b0144 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 4c76aba..ae342d9 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 c440644..a217c94 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?