mirror of
https://github.com/gedoor/legado.git
synced 2024-07-04 23:36:56 +08:00
优化
This commit is contained in:
parent
4c6ec35d95
commit
065ac7e119
|
@ -71,12 +71,15 @@ abstract class BaseService : LifecycleService() {
|
|||
}
|
||||
|
||||
/**
|
||||
* 检测通知权限
|
||||
* 检测通知权限和后台权限
|
||||
*/
|
||||
private fun checkNotificationPermission() {
|
||||
PermissionsCompat.Builder()
|
||||
.addPermissions(Permissions.POST_NOTIFICATIONS)
|
||||
.rationale(R.string.notification_permission_rationale)
|
||||
.addPermissions(
|
||||
Permissions.POST_NOTIFICATIONS,
|
||||
Permissions.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
|
||||
)
|
||||
.rationale(R.string.service_permission_rationale)
|
||||
.onGranted {
|
||||
if (lifecycleScope.isActive) {
|
||||
startForegroundNotification()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.legado.app.lib.permission
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
|
@ -24,6 +25,7 @@ class PermissionActivity : AppCompatActivity() {
|
|||
finish()
|
||||
}
|
||||
|
||||
@SuppressLint("BatteryLife")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val rationale = intent.getStringExtra(KEY_RATIONALE)
|
||||
|
@ -72,6 +74,16 @@ class PermissionActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Request.TYPE_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -> showSettingDialog(
|
||||
permissions, rationale
|
||||
) {
|
||||
kotlin.runCatching {
|
||||
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
||||
intent.setData(Uri.parse("package:$packageName"))
|
||||
settingActivityResult.launch(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
|
||||
|
|
|
@ -43,6 +43,9 @@ object Permissions {
|
|||
|
||||
const val ACCESS_MEDIA_LOCATION = "android.permission.ACCESS_MEDIA_LOCATION"
|
||||
|
||||
const val REQUEST_IGNORE_BATTERY_OPTIMIZATIONS =
|
||||
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"
|
||||
|
||||
object Group {
|
||||
val STORAGE = if (isManageExternalStorage()) {
|
||||
arrayOf(MANAGE_EXTERNAL_STORAGE)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -538,7 +538,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
|||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
if (BaseReadAloudService.pause) {
|
||||
if (BaseReadAloudService.isRun && BaseReadAloudService.pause) {
|
||||
ReadAloud.stop(context)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1147,4 +1147,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1150,4 +1150,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1150,4 +1150,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1146,4 +1146,5 @@ Còn </string>
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1147,4 +1147,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1149,4 +1149,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1149,4 +1149,5 @@
|
|||
<string name="font_weight_text">中/粗/细</string>
|
||||
<string name="keep_swipe_tip">继续滑动以加载下一章…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
|
@ -1150,4 +1150,5 @@
|
|||
<string name="font_weight_text">N/B/L</string>
|
||||
<string name="keep_swipe_tip">Keep swiping to load the next chapter…</string>
|
||||
<string name="enable_optimize_render">启用绘制优化</string>
|
||||
<string name="service_permission_rationale">阅读需要发送通知来显示朗读控制和下载进度、请求后台权限以保持服务正常运行</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue
Block a user