Skip to content

Commit

Permalink
Merge pull request #271 from cyb3rko/permissions-fix
Browse files Browse the repository at this point in the history
Fix missing permissions on newer Android versions
  • Loading branch information
jmattheis authored Jan 28, 2023
2 parents 5de5114 + c416ed7 commit 11a7453
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 1 deletion.
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ android {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
lintOptions {
disable 'GoogleAppIndexingWarning'
lintConfig file('../lint.xml')
Expand Down Expand Up @@ -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'
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

<application
android:allowBackup="false"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.gotify.init

import android.Manifest
import android.app.NotificationManager
import android.content.Intent
import android.os.Build
Expand All @@ -22,6 +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.quickpermissionskotlin.runWithPermissions
import com.livinglifetechway.quickpermissionskotlin.util.QuickPermissionsOptions
import com.livinglifetechway.quickpermissionskotlin.util.QuickPermissionsRequest

internal class InitializationActivity : AppCompatActivity() {

Expand All @@ -46,7 +50,9 @@ internal class InitializationActivity : AppCompatActivity() {
Log.i("Entering ${javaClass.simpleName}")

if (settings.tokenExists()) {
tryAuthenticate()
runWithNeededPermissions {
tryAuthenticate()
}
} else {
showLogin()
}
Expand Down Expand Up @@ -130,4 +136,55 @@ internal class InitializationActivity : AppCompatActivity() {
.version
.enqueue(Callback.callInUI(this, callback, errorCallback))
}

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,
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()
}
}
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
<string name="select_ca_failed">Failed to read CA: %s</string>
<string name="login">Login</string>
<string name="check_url">Check URL</string>
<string name="permissions_dialog_grant">Grant</string>
<string name="permissions_denied_temp">Gotify requires permission to display push notifications.</string>
<string name="permissions_denied_permanent">Gotify requires permission to display push notifications. Please grant the required permission in the settings.</string>
<string name="gotify_logo">Gotify logo</string>
<string name="refresh_all">Refresh all</string>
<string name="logout_confirm">Do you really want to logout?</string>
Expand Down
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io/" }
}
}

Expand Down

0 comments on commit 11a7453

Please sign in to comment.