Просмотр исходного кода

Merge pull request #767

* 代码优化
5151561 7 месяцев назад
Родитель
Сommit
fafc852840
1 измененных файлов с 28 добавлено и 1 удалено
  1. 28 1
      app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt

+ 28 - 1
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.content.Intent
 import android.net.Uri
 import android.net.Uri
+import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.provider.Settings
 import android.provider.Settings
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.result.contract.ActivityResultContracts
@@ -33,10 +34,15 @@ class PermissionActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
         val rationale = intent.getStringExtra(KEY_RATIONALE)
         val rationale = intent.getStringExtra(KEY_RATIONALE)
         val permissions = intent.getStringArrayExtra(KEY_INPUT_PERMISSIONS)!!
         val permissions = intent.getStringArrayExtra(KEY_INPUT_PERMISSIONS)!!
+        val requestType = intent.getIntExtra(KEY_INPUT_REQUEST_TYPE, Request.TYPE_REQUEST_PERMISSION)
 
 
         showSettingDialog(permissions, rationale) {
         showSettingDialog(permissions, rationale) {
             try {
             try {
-                requestPermissionsResult.launch(permissions)
+                when (requestType) {
+                    Request.TYPE_MANAGE_ALL_FILES_ACCESS -> openManageAllFilesAccessSettings()
+                    Request.TYPE_REQUEST_SETTING -> openSettingsActivity()
+                    else -> requestPermissionsResult.launch(permissions)
+                }
             } catch (e: Exception) {
             } catch (e: Exception) {
                 AppLog.put("请求权限出错\n$e", e, true)
                 AppLog.put("请求权限出错\n$e", e, true)
                 RequestPlugins.sRequestCallback?.onError(e)
                 RequestPlugins.sRequestCallback?.onError(e)
@@ -62,6 +68,27 @@ class PermissionActivity : AppCompatActivity() {
         }
         }
     }
     }
 
 
+    private fun openManageAllFilesAccessSettings() {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+            openSettingsActivity()
+            return
+        }
+        val packageUri = Uri.fromParts("package", packageName, null)
+        val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).apply {
+            data = packageUri
+        }
+        runCatching {
+            settingActivityResult.launch(intent)
+        }.getOrElse {
+            val fallbackIntent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
+            runCatching {
+                settingActivityResult.launch(fallbackIntent)
+            }.getOrElse {
+                openSettingsActivity()
+            }
+        }
+    }
+
     override fun onRequestPermissionsResult(
     override fun onRequestPermissionsResult(
         requestCode: Int,
         requestCode: Int,
         permissions: Array<String>,
         permissions: Array<String>,