Skip to content
This repository was archived by the owner on Jan 16, 2024. It is now read-only.

Commit 0733951

Browse files
committed
feat: 唤醒锁
1 parent 78d530a commit 0733951

File tree

6 files changed

+76
-14
lines changed

6 files changed

+76
-14
lines changed

app/src/main/java/com/github/jing332/alistandroid/config/AppConfig.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,28 @@ package com.github.jing332.alistandroid.config
33
import com.funny.data_saver.core.DataSaverPreferences
44
import com.funny.data_saver.core.mutableDataSaverStateOf
55
import com.github.jing332.alistandroid.app
6+
import java.io.File
67

78
object AppConfig {
89
private val pref =
910
DataSaverPreferences(app.getSharedPreferences("app", 0))
1011

1112

13+
val isFirstRun: Boolean
14+
get() = File(
15+
(app.filesDir.parentFile?.absolutePath ?: "") + File.separator + "databases"
16+
).listFiles()?.isEmpty() ?: true
17+
1218
var isAutoCheckUpdate = mutableDataSaverStateOf(
1319
dataSaverInterface = pref,
1420
key = "isCheckUpdate",
1521
initialValue = true
1622
)
1723

24+
var enabledWakeLock = mutableDataSaverStateOf(
25+
dataSaverInterface = pref,
26+
key = "enabledWakeLock",
27+
initialValue = false
28+
)
29+
1830
}

app/src/main/java/com/github/jing332/alistandroid/service/AlistService.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.jing332.alistandroid.service
22

33
import alistlib.Alistlib
4+
import android.annotation.SuppressLint
45
import android.app.Notification
56
import android.app.NotificationChannel
67
import android.app.NotificationManager
@@ -12,8 +13,10 @@ import android.content.Intent
1213
import android.content.IntentFilter
1314
import android.os.Build
1415
import android.os.IBinder
16+
import android.os.PowerManager
1517
import androidx.core.content.ContextCompat
1618
import com.github.jing332.alistandroid.R
19+
import com.github.jing332.alistandroid.config.AppConfig
1720
import com.github.jing332.alistandroid.constant.AppConst
1821
import com.github.jing332.alistandroid.model.alist.AList
1922
import com.github.jing332.alistandroid.model.alist.AListConfigManager
@@ -23,6 +26,7 @@ import com.github.jing332.alistandroid.util.ClipboardUtils
2326
import com.github.jing332.alistandroid.util.ToastUtils.toast
2427
import kotlinx.coroutines.CoroutineScope
2528
import kotlinx.coroutines.Job
29+
import splitties.systemservices.powerManager
2630

2731
class AlistService : Service() {
2832
companion object {
@@ -40,12 +44,22 @@ class AlistService : Service() {
4044
private val mScope = CoroutineScope(Job())
4145
private val mNotificationReceiver = NotificationActionReceiver()
4246
private val mReceiver = MyReceiver()
47+
private val mWakeLock by lazy {
48+
powerManager.newWakeLock(
49+
PowerManager.PARTIAL_WAKE_LOCK,
50+
"alist:service"
51+
)
52+
}
4353

4454
override fun onBind(p0: Intent?): IBinder? = null
4555

56+
@SuppressLint("WakelockTimeout")
4657
override fun onCreate() {
4758
super.onCreate()
4859

60+
if (AppConfig.enabledWakeLock.value)
61+
mWakeLock.acquire()
62+
4963
AppConst.localBroadcast.registerReceiver(
5064
mReceiver,
5165
IntentFilter(AList.ACTION_STATUS_CHANGED)
@@ -67,6 +81,9 @@ class AlistService : Service() {
6781
@Suppress("DEPRECATION")
6882
override fun onDestroy() {
6983
super.onDestroy()
84+
85+
mWakeLock.release()
86+
7087
stopForeground(true)
7188

7289
AppConst.localBroadcast.unregisterReceiver(mReceiver)

app/src/main/java/com/github/jing332/alistandroid/ui/MainActivity.kt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import androidx.compose.runtime.staticCompositionLocalOf
1717
import androidx.compose.ui.Modifier
1818
import androidx.lifecycle.lifecycleScope
1919
import androidx.navigation.compose.rememberNavController
20+
import com.github.jing332.alistandroid.config.AppConfig
2021
import com.github.jing332.alistandroid.model.ShortCuts
22+
import com.github.jing332.alistandroid.ui.MyTools.killBattery
2123
import com.github.jing332.alistandroid.ui.nav.BottomNavBar
2224
import com.github.jing332.alistandroid.ui.nav.NavigationGraph
2325
import kotlinx.coroutines.launch
@@ -38,7 +40,8 @@ class MainActivity : BaseComposeActivity() {
3840
super.onCreate(savedInstanceState)
3941

4042
lifecycleScope.launch {
41-
killBattery()
43+
if (AppConfig.isFirstRun)
44+
killBattery()
4245
ShortCuts.buildShortCuts(this@MainActivity)
4346
}
4447
}
@@ -81,16 +84,4 @@ class MainActivity : BaseComposeActivity() {
8184
}
8285

8386

84-
@SuppressLint("BatteryLife")
85-
private fun killBattery() {
86-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
87-
if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
88-
kotlin.runCatching {
89-
startActivity(Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
90-
data = Uri.parse("package:$packageName")
91-
})
92-
}
93-
}
94-
}
95-
}
9687
}

app/src/main/java/com/github/jing332/alistandroid/ui/MyTools.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,29 @@ import android.content.Intent
77
import android.content.pm.ShortcutInfo
88
import android.content.pm.ShortcutManager
99
import android.graphics.drawable.Icon
10+
import android.net.Uri
1011
import android.os.Build
12+
import android.provider.Settings
1113
import com.github.jing332.alistandroid.util.ToastUtils.longToast
14+
import splitties.systemservices.powerManager
1215

1316
object MyTools {
17+
fun Context.isIgnoringBatteryOptimizations(): Boolean {
18+
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
19+
powerManager.isIgnoringBatteryOptimizations(packageName)
20+
}
21+
22+
@SuppressLint("BatteryLife")
23+
fun Context.killBattery() {
24+
runCatching {
25+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isIgnoringBatteryOptimizations()) {
26+
startActivity(Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
27+
data = Uri.parse("package:$packageName")
28+
})
29+
}
30+
}
31+
}
32+
1433
/* 添加快捷方式 */
1534
@SuppressLint("UnspecifiedImmutableFlag")
1635
@Suppress("DEPRECATION")

app/src/main/java/com/github/jing332/alistandroid/ui/nav/settings/SettingsScreen.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.jing332.alistandroid.ui.nav.settings
22

3+
import androidx.compose.animation.AnimatedVisibility
34
import androidx.compose.foundation.layout.Column
45
import androidx.compose.foundation.layout.statusBarsPadding
56
import androidx.compose.material.icons.Icons
@@ -10,10 +11,14 @@ import androidx.compose.runtime.Composable
1011
import androidx.compose.runtime.getValue
1112
import androidx.compose.runtime.remember
1213
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.platform.LocalContext
1315
import com.github.jing332.alistandroid.config.AppConfig
16+
import com.github.jing332.alistandroid.ui.MyTools.isIgnoringBatteryOptimizations
17+
import com.github.jing332.alistandroid.ui.MyTools.killBattery
1418

1519
@Composable
1620
fun SettingsScreen() {
21+
val context = LocalContext.current
1722
Column(Modifier.statusBarsPadding()) {
1823
var checkUpdate by remember { AppConfig.isAutoCheckUpdate }
1924
PreferenceSwitch(
@@ -26,5 +31,23 @@ fun SettingsScreen() {
2631
}
2732
)
2833

34+
var enabledWakeLock by remember { AppConfig.enabledWakeLock }
35+
PreferenceSwitch(
36+
title = { Text("唤醒锁") },
37+
subTitle = { Text("打开可防止锁屏后CPU休眠,但在部分系统可能会导致杀后台") },
38+
checked = enabledWakeLock,
39+
onCheckedChange = { enabledWakeLock = it }
40+
)
41+
42+
AnimatedVisibility(visible = !context.isIgnoringBatteryOptimizations()) {
43+
BasePreferenceWidget(
44+
onClick = {
45+
context.killBattery()
46+
},
47+
title = { Text("请求设置电池优化白名单") },
48+
subTitle = { Text("如果程序在后台运行时被系统杀死,可以尝试设置。") }) {
49+
50+
}
51+
}
2952
}
3053
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
buildscript {
22
ext {
33
kotlin_version = '1.9.0'
4-
agp_version = '8.2.0-alpha15'
4+
agp_version = '8.2.0-alpha16'
55
room_version = '2.5.2'
66
ksp_version = '1.9.0-1.0.13'
77
about_lib_version = "10.8.3"

0 commit comments

Comments
 (0)