|
|
@@ -9,6 +9,7 @@ import androidx.core.app.NotificationManagerCompat
|
|
|
import androidx.core.content.ContextCompat
|
|
|
import io.legado.app.utils.startActivity
|
|
|
import splitties.init.appCtx
|
|
|
+import splitties.systemservices.powerManager
|
|
|
|
|
|
@Suppress("MemberVisibilityCanBePrivate")
|
|
|
internal class Request : OnRequestPermissionsResultCallback {
|
|
|
@@ -73,6 +74,10 @@ internal class Request : OnRequestPermissionsResultCallback {
|
|
|
}
|
|
|
} else if (deniedPermissions.contains(Permissions.POST_NOTIFICATIONS)) {
|
|
|
toNotificationSetting()
|
|
|
+ } else if (deniedPermissions.contains(Permissions.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ toIgnoreBatterySetting()
|
|
|
+ }
|
|
|
} else if (deniedPermissions.size > 1) {
|
|
|
appCtx.startActivity<PermissionActivity> {
|
|
|
putExtra(PermissionActivity.KEY_RATIONALE, rationale)
|
|
|
@@ -98,6 +103,7 @@ internal class Request : OnRequestPermissionsResultCallback {
|
|
|
deniedPermissionList.add(permission)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
Permissions.MANAGE_EXTERNAL_STORAGE -> {
|
|
|
if (Permissions.isManageExternalStorage()) {
|
|
|
if (!Environment.isExternalStorageManager()) {
|
|
|
@@ -105,6 +111,15 @@ internal class Request : OnRequestPermissionsResultCallback {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ Permissions.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -> {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ if (!powerManager.isIgnoringBatteryOptimizations(appCtx.packageName)) {
|
|
|
+ deniedPermissionList.add(permission)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
else -> {
|
|
|
if (
|
|
|
ContextCompat.checkSelfPermission(appCtx, permission)
|
|
|
@@ -165,6 +180,18 @@ internal class Request : OnRequestPermissionsResultCallback {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private fun toIgnoreBatterySetting() {
|
|
|
+ appCtx.startActivity<PermissionActivity> {
|
|
|
+ putExtra(PermissionActivity.KEY_RATIONALE, rationale)
|
|
|
+ putExtra(
|
|
|
+ PermissionActivity.KEY_INPUT_REQUEST_TYPE,
|
|
|
+ TYPE_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
|
|
|
+ )
|
|
|
+ putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS_CODE, requestCode)
|
|
|
+ putExtra(PermissionActivity.KEY_INPUT_PERMISSIONS, deniedPermissions)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
override fun onRequestPermissionsResult(
|
|
|
permissions: Array<String>,
|
|
|
grantResults: IntArray
|
|
|
@@ -196,5 +223,6 @@ internal class Request : OnRequestPermissionsResultCallback {
|
|
|
const val TYPE_REQUEST_SETTING = 2
|
|
|
const val TYPE_MANAGE_ALL_FILES_ACCESS = 3
|
|
|
const val TYPE_REQUEST_NOTIFICATIONS = 4
|
|
|
+ const val TYPE_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = 5
|
|
|
}
|
|
|
}
|