From d567919fb1cc46e1d4f80622194f78510d295647 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 2 Feb 2023 22:56:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/lib/permission/PermissionActivity.kt | 35 +++++++++++---- .../io/legado/app/lib/permission/Request.kt | 45 +++++++++---------- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt b/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt index 6acf61e3e..c2ab8fd95 100644 --- a/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt +++ b/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt @@ -2,6 +2,7 @@ package io.legado.app.lib.permission import android.content.Intent import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.KeyEvent @@ -34,15 +35,7 @@ class PermissionActivity : AppCompatActivity() { } } //跳转到设置界面 - Request.TYPE_REQUEST_SETTING -> try { - val settingIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - settingIntent.data = Uri.fromParts("package", packageName, null) - settingActivityResult.launch(settingIntent) - } catch (e: Exception) { - toastOnUi(R.string.tip_cannot_jump_setting_page) - RequestPlugins.sRequestCallback?.onError(e) - finish() - } + Request.TYPE_REQUEST_SETTING -> openSettingsActivity() //所有文件的管理权限 Request.TYPE_MANAGE_ALL_FILES_ACCESS_PERMISSION -> try { if (Permissions.isManageExternalStorage()) { @@ -56,6 +49,30 @@ class PermissionActivity : AppCompatActivity() { RequestPlugins.sRequestCallback?.onError(e) finish() } + Request.TYPE_REQUEST_NOTIFICATIONS -> kotlin.runCatching { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //这种方案适用于 API 26, 即8.0(含8.0)以上可以用 + val intent = Intent() + intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS + intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName) + intent.putExtra(Settings.EXTRA_CHANNEL_ID, applicationInfo.uid) + settingActivityResult.launch(intent) + } else { + openSettingsActivity() + } + } + } + } + + private fun openSettingsActivity() { + try { + val settingIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + settingIntent.data = Uri.fromParts("package", packageName, null) + settingActivityResult.launch(settingIntent) + } catch (e: Exception) { + toastOnUi(R.string.tip_cannot_jump_setting_page) + RequestPlugins.sRequestCallback?.onError(e) + finish() } } diff --git a/app/src/main/java/io/legado/app/lib/permission/Request.kt b/app/src/main/java/io/legado/app/lib/permission/Request.kt index ae1f0cd5f..4b965ea8d 100644 --- a/app/src/main/java/io/legado/app/lib/permission/Request.kt +++ b/app/src/main/java/io/legado/app/lib/permission/Request.kt @@ -73,39 +73,35 @@ internal class Request : OnRequestPermissionsResultCallback { val deniedPermissions = deniedPermissions val rationale = this.rationale + if (deniedPermissions == null) { + onPermissionsGranted() + return + } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - if (deniedPermissions == null) { - onPermissionsGranted() - } else { - if (rationale != null) { - showSettingDialog(rationale) { - onPermissionsDenied(deniedPermissions) - } - } else { + if (rationale != null) { + showSettingDialog(rationale) { onPermissionsDenied(deniedPermissions) } + } else { + onPermissionsDenied(deniedPermissions) } } else { - if (deniedPermissions != null) { - if (deniedPermissions.contains(Permissions.MANAGE_EXTERNAL_STORAGE)) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - if (rationale != null) { - showManageFileDialog(rationale) { - onPermissionsDenied(deniedPermissions) - } - } else { + if (deniedPermissions.contains(Permissions.MANAGE_EXTERNAL_STORAGE)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (rationale != null) { + showManageFileDialog(rationale) { onPermissionsDenied(deniedPermissions) } - } - } else if (deniedPermissions.size > 1) { - source?.context?.startActivity { - putExtra(PermissionActivity.KEY_INPUT_REQUEST_TYPE, TYPE_REQUEST_PERMISSION) - putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS_CODE, requestCode) - putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS, deniedPermissions) + } else { + onPermissionsDenied(deniedPermissions) } } - } else { - onPermissionsGranted() + } else if (deniedPermissions.size > 1) { + source?.context?.startActivity { + putExtra(PermissionActivity.KEY_INPUT_REQUEST_TYPE, TYPE_REQUEST_PERMISSION) + putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS_CODE, requestCode) + putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS, deniedPermissions) + } } } } @@ -248,5 +244,6 @@ internal class Request : OnRequestPermissionsResultCallback { const val TYPE_REQUEST_PERMISSION = 1 const val TYPE_REQUEST_SETTING = 2 const val TYPE_MANAGE_ALL_FILES_ACCESS_PERMISSION = 3 + const val TYPE_REQUEST_NOTIFICATIONS = 4 } } \ No newline at end of file