Cleanup permission request

This commit is contained in:
tarsin committed 2023-04-06 14:20:02 +08:00
1 parent 06dc33b126
commit 3c0da086f5
4 files changed
+44 -26

No files matched your search

@@ -15,13 +15,13 @@
*/
package com.hippo.ehviewer.ui
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import com.hippo.app.ListCheckBoxDialogBuilder
import com.hippo.ehviewer.EhApplication.Companion.application
import com.hippo.ehviewer.EhApplication.Companion.favouriteStatusRouter
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.R
@@ -32,7 +32,9 @@ import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.download.DownloadService
import com.hippo.ehviewer.ui.scene.BaseScene
import com.hippo.unifile.UniFile
import com.hippo.util.requestPermission
import com.hippo.yorozuya.collect.LongList
import eu.kanade.tachiyomi.util.lang.launchNow
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import com.hippo.ehviewer.download.DownloadManager as downloadManager
@@ -132,10 +134,12 @@ object CommonOperations {
galleryInfos: List<GalleryInfo>,
forceDefault: Boolean,
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
application.topActivity?.checkAndRequestNotificationPermission()
launchNow {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
activity.requestPermission(Manifest.permission.POST_NOTIFICATIONS)
}
doStartDownload(activity, galleryInfos, forceDefault)
}
doStartDownload(activity, galleryInfos, forceDefault)
}
private fun doStartDownload(
@@ -15,17 +15,11 @@
*/
package com.hippo.ehviewer.ui
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Resources.Theme
import android.os.Build
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.annotation.StyleRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
@@ -72,20 +66,4 @@ abstract class EhActivity : AppCompatActivity() {
super.onResume()
window.setSecureScreen(Settings.enabledSecurity)
}
private val requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { Settings.putNotificationRequired() }
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun checkAndRequestNotificationPermission() {
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.POST_NOTIFICATIONS,
) == PackageManager.PERMISSION_GRANTED
) {
return
}
if (Settings.notificationRequired) return
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
@@ -75,6 +75,7 @@ import com.hippo.util.addTextToClipboard
import com.hippo.util.getClipboardManager
import com.hippo.util.getParcelableExtraCompat
import com.hippo.util.getUrlFromClipboard
import com.hippo.util.initPermission
import com.hippo.yorozuya.IOUtils
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.util.lang.launchUI
@@ -92,6 +93,10 @@ class MainActivity : EhActivity() {
private val connectivityManager by lazy { getSystemService<ConnectivityManager>()!! }
private val availableNetworks = mutableListOf<Network>()
init {
initPermission()
}
private fun saveImageToTempFile(uri: Uri): File? {
val src = ImageDecoder.createSource(contentResolver, uri)
val bitmap = runCatching {
@@ -0,0 +1,31 @@
package com.hippo.util
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import androidx.activity.ComponentActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.resume
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>
private lateinit var callback: (Boolean) -> Unit
fun ComponentActivity.initPermission() {
requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission(), ::permissionCallback)
}
private fun permissionCallback(v: Boolean) {
callback(v)
}
suspend fun Context.requestPermission(key: String): Boolean {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) return true
return suspendCancellableCoroutine { cont ->
callback = {
cont.resume(it)
}
requestPermissionLauncher.launch(key)
}
}