Merge pull request #271 from cyb3rko/permissions-fix
Fix missing permissions on newer Android versions
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.github.gotify.init
|
||||
|
||||
import android.Manifest
|
||||
import android.app.NotificationManager
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
@@ -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() {
|
||||
|
||||
@@ -46,7 +50,9 @@ internal class InitializationActivity : AppCompatActivity() {
|
||||
Log.i("Entering ${javaClass.simpleName}")
|
||||
|
||||
if (settings.tokenExists()) {
|
||||
tryAuthenticate()
|
||||
runWithNeededPermissions {
|
||||
tryAuthenticate()
|
||||
}
|
||||
} else {
|
||||
showLogin()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -27,6 +27,7 @@ allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url "https://jitpack.io/" }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user