From 50849f6a078cd59546f907f6b72882bf7f0ff9c5 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Jan 2023 20:41:17 +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 --- .../io/legado/app/lib/permission/OnErrorCallback.kt | 7 +++++++ .../app/lib/permission/OnPermissionsResultCallback.kt | 4 +++- .../permission/OnRequestPermissionsResultCallback.kt | 2 ++ .../io/legado/app/lib/permission/PermissionActivity.kt | 9 +++++---- .../io/legado/app/lib/permission/PermissionsCompat.kt | 9 +++++++++ .../main/java/io/legado/app/lib/permission/Request.kt | 10 ++++++++++ .../io/legado/app/lib/permission/RequestManager.kt | 6 +++++- .../io/legado/app/ui/document/HandleFileActivity.kt | 6 ++++++ 8 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/io/legado/app/lib/permission/OnErrorCallback.kt diff --git a/app/src/main/java/io/legado/app/lib/permission/OnErrorCallback.kt b/app/src/main/java/io/legado/app/lib/permission/OnErrorCallback.kt new file mode 100644 index 000000000..2f32126a9 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/permission/OnErrorCallback.kt @@ -0,0 +1,7 @@ +package io.legado.app.lib.permission + +interface OnErrorCallback { + + fun onError(e: Exception) + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/lib/permission/OnPermissionsResultCallback.kt b/app/src/main/java/io/legado/app/lib/permission/OnPermissionsResultCallback.kt index 41ae2f5fc..9d83c31af 100644 --- a/app/src/main/java/io/legado/app/lib/permission/OnPermissionsResultCallback.kt +++ b/app/src/main/java/io/legado/app/lib/permission/OnPermissionsResultCallback.kt @@ -4,6 +4,8 @@ interface OnPermissionsResultCallback { fun onPermissionsGranted() - fun onPermissionsDenied(deniedPermissions: Array) + fun onPermissionsDenied(deniedPermissions: Array?) + + fun onError(e: Exception) } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/lib/permission/OnRequestPermissionsResultCallback.kt b/app/src/main/java/io/legado/app/lib/permission/OnRequestPermissionsResultCallback.kt index 2934e4c77..4298e0fb4 100644 --- a/app/src/main/java/io/legado/app/lib/permission/OnRequestPermissionsResultCallback.kt +++ b/app/src/main/java/io/legado/app/lib/permission/OnRequestPermissionsResultCallback.kt @@ -5,4 +5,6 @@ interface OnRequestPermissionsResultCallback { fun onRequestPermissionsResult(permissions: Array, grantResults: IntArray) fun onSettingActivityResult() + + fun onError(e: Exception) } 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 e41384534..6dc7757b0 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 @@ -23,12 +23,11 @@ class PermissionActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + val requestCode = intent.getIntExtra(KEY_INPUT_PERMISSIONS_CODE, 1000) + val permissions = intent.getStringArrayExtra(KEY_INPUT_PERMISSIONS) when (intent.getIntExtra(KEY_INPUT_REQUEST_TYPE, Request.TYPE_REQUEST_PERMISSION)) { //权限请求 Request.TYPE_REQUEST_PERMISSION -> { - val requestCode = intent.getIntExtra(KEY_INPUT_PERMISSIONS_CODE, 1000) - val permissions = intent.getStringArrayExtra(KEY_INPUT_PERMISSIONS) if (permissions != null) { ActivityCompat.requestPermissions(this, permissions, requestCode) } else { @@ -42,6 +41,7 @@ class PermissionActivity : AppCompatActivity() { settingActivityResult.launch(settingIntent) } catch (e: Exception) { toastOnUi(R.string.tip_cannot_jump_setting_page) + RequestPlugins.sRequestCallback?.onError(e) finish() } //所有文件所有文件的管理权限 @@ -54,7 +54,8 @@ class PermissionActivity : AppCompatActivity() { throw NoStackTraceException("no MANAGE_ALL_FILES_ACCESS_PERMISSION") } } catch (e: Exception) { - toastOnUi(R.string.tip_cannot_jump_setting_page) + toastOnUi(e.localizedMessage) + RequestPlugins.sRequestCallback?.onError(e) finish() } } diff --git a/app/src/main/java/io/legado/app/lib/permission/PermissionsCompat.kt b/app/src/main/java/io/legado/app/lib/permission/PermissionsCompat.kt index f127c77d6..c21176e34 100644 --- a/app/src/main/java/io/legado/app/lib/permission/PermissionsCompat.kt +++ b/app/src/main/java/io/legado/app/lib/permission/PermissionsCompat.kt @@ -47,6 +47,15 @@ class PermissionsCompat private constructor() { return this } + fun onError(callback: (e: Exception) -> Unit): Builder { + request.setOnErrorCallBack(object : OnErrorCallback{ + override fun onError(e: Exception) { + callback(e) + } + }) + return this + } + fun rationale(rationale: CharSequence): Builder { request.setRationale(rationale) return this 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 a8e8d78fb..28cc4aaa0 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 @@ -19,6 +19,7 @@ internal class Request : OnRequestPermissionsResultCallback { private var permissions: ArrayList? = null private var grantedCallback: OnPermissionsGrantedCallback? = null private var deniedCallback: OnPermissionsDeniedCallback? = null + private var errorCallback: OnErrorCallback? = null private var rationaleResId: Int = 0 private var rationale: CharSequence? = null @@ -53,6 +54,10 @@ internal class Request : OnRequestPermissionsResultCallback { deniedCallback = callback } + fun setOnErrorCallBack(callback: OnErrorCallback) { + errorCallback = callback + } + fun setRationale(@StringRes resId: Int) { rationaleResId = resId rationale = null @@ -201,6 +206,11 @@ internal class Request : OnRequestPermissionsResultCallback { } } + override fun onError(e: Exception) { + errorCallback?.onError(e) + RequestPlugins.sResultCallback?.onError(e) + } + companion object { const val TYPE_REQUEST_PERMISSION = 1 const val TYPE_REQUEST_SETTING = 2 diff --git a/app/src/main/java/io/legado/app/lib/permission/RequestManager.kt b/app/src/main/java/io/legado/app/lib/permission/RequestManager.kt index 2bc6832c7..c4a67edb8 100644 --- a/app/src/main/java/io/legado/app/lib/permission/RequestManager.kt +++ b/app/src/main/java/io/legado/app/lib/permission/RequestManager.kt @@ -62,7 +62,11 @@ internal object RequestManager : OnPermissionsResultCallback { startNextRequest() } - override fun onPermissionsDenied(deniedPermissions: Array) { + override fun onPermissionsDenied(deniedPermissions: Array?) { + startNextRequest() + } + + override fun onError(e: Exception) { startNextRequest() } diff --git a/app/src/main/java/io/legado/app/ui/document/HandleFileActivity.kt b/app/src/main/java/io/legado/app/ui/document/HandleFileActivity.kt index e3672779b..4c271f0ce 100644 --- a/app/src/main/java/io/legado/app/ui/document/HandleFileActivity.kt +++ b/app/src/main/java/io/legado/app/ui/document/HandleFileActivity.kt @@ -192,6 +192,12 @@ class HandleFileActivity : .onGranted { success?.invoke() } + .onDenied { + finish() + } + .onError { + finish() + } .request() }