@@ -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>,
|
||||||
|
|||||||
Reference in New Issue
Block a user