diff --git a/app/build.gradle b/app/build.gradle index 0448d248..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,6 +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.2' 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) { + 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, + 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..5c097c84 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 + 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? 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/" } } }