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

Commit 2ea9b2b

Browse files
committed
fix: wakeLock
1 parent 0733951 commit 2ea9b2b

File tree

5 files changed

+77
-32
lines changed

5 files changed

+77
-32
lines changed

.github/workflows/release.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,6 @@ jobs:
8080
name: "AlistAndroid_${{env.ver_name}}"
8181
path: ${{ env.output }}/*.apk
8282

83-
- name: Make "CHANGELOG.md"
84-
run: |
85-
file="${{ github.workspace }}/CHANGELOG.md"
86-
echo -e > "未知CPU架构? 那就选择体积最大的apk. \n#### 更新内容\n$(cat $file)"> $file
87-
88-
8983
- uses: softprops/[email protected]
9084
with:
9185
name: ${{ env.ver_name }}

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,21 @@ class AlistService : Service() {
4444
private val mScope = CoroutineScope(Job())
4545
private val mNotificationReceiver = NotificationActionReceiver()
4646
private val mReceiver = MyReceiver()
47-
private val mWakeLock by lazy {
48-
powerManager.newWakeLock(
49-
PowerManager.PARTIAL_WAKE_LOCK,
50-
"alist:service"
51-
)
52-
}
47+
private var mWakeLock: PowerManager.WakeLock? = null
5348

5449
override fun onBind(p0: Intent?): IBinder? = null
5550

5651
@SuppressLint("WakelockTimeout")
5752
override fun onCreate() {
5853
super.onCreate()
5954

60-
if (AppConfig.enabledWakeLock.value)
61-
mWakeLock.acquire()
55+
if (AppConfig.enabledWakeLock.value) {
56+
mWakeLock = powerManager.newWakeLock(
57+
PowerManager.PARTIAL_WAKE_LOCK,
58+
"alist::service"
59+
)
60+
mWakeLock?.acquire()
61+
}
6262

6363
AppConst.localBroadcast.registerReceiver(
6464
mReceiver,
@@ -82,7 +82,8 @@ class AlistService : Service() {
8282
override fun onDestroy() {
8383
super.onDestroy()
8484

85-
mWakeLock.release()
85+
mWakeLock?.release()
86+
mWakeLock = null
8687

8788
stopForeground(true)
8889

app/src/main/java/com/github/jing332/alistandroid/ui/nav/alist/AListScreen.kt

Lines changed: 60 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,50 @@ package com.github.jing332.alistandroid.ui.nav.alist
22

33
import android.content.Intent
44
import android.content.IntentFilter
5-
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.animation.Crossfade
6+
import androidx.compose.animation.animateColorAsState
7+
import androidx.compose.animation.core.LinearEasing
8+
import androidx.compose.animation.core.animateFloatAsState
9+
import androidx.compose.animation.core.tween
10+
import androidx.compose.foundation.layout.Box
611
import androidx.compose.foundation.layout.Column
712
import androidx.compose.foundation.layout.Row
813
import androidx.compose.foundation.layout.fillMaxSize
914
import androidx.compose.foundation.layout.fillMaxWidth
1015
import androidx.compose.foundation.layout.imePadding
1116
import androidx.compose.foundation.layout.padding
17+
import androidx.compose.foundation.layout.size
18+
import androidx.compose.foundation.shape.CircleShape
1219
import androidx.compose.material.icons.Icons
1320
import androidx.compose.material.icons.filled.AddBusiness
1421
import androidx.compose.material.icons.filled.MoreVert
1522
import androidx.compose.material.icons.filled.Password
23+
import androidx.compose.material.icons.filled.Send
24+
import androidx.compose.material.icons.filled.Stop
1625
import androidx.compose.material3.AlertDialog
1726
import androidx.compose.material3.DropdownMenu
1827
import androidx.compose.material3.DropdownMenuItem
1928
import androidx.compose.material3.ExperimentalMaterial3Api
29+
import androidx.compose.material3.FloatingActionButton
30+
import androidx.compose.material3.FloatingActionButtonDefaults
2031
import androidx.compose.material3.Icon
2132
import androidx.compose.material3.IconButton
2233
import androidx.compose.material3.MaterialTheme
2334
import androidx.compose.material3.OutlinedTextField
2435
import androidx.compose.material3.Scaffold
25-
import androidx.compose.material3.Switch
2636
import androidx.compose.material3.Text
2737
import androidx.compose.material3.TextButton
2838
import androidx.compose.material3.TopAppBar
2939
import androidx.compose.runtime.Composable
3040
import androidx.compose.runtime.getValue
3141
import androidx.compose.runtime.mutableStateOf
3242
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.rememberCoroutineScope
3344
import androidx.compose.runtime.setValue
3445
import androidx.compose.ui.Alignment
3546
import androidx.compose.ui.Modifier
47+
import androidx.compose.ui.draw.rotate
48+
import androidx.compose.ui.graphics.graphicsLayer
3649
import androidx.compose.ui.platform.LocalContext
3750
import androidx.compose.ui.platform.LocalView
3851
import androidx.compose.ui.res.stringResource
@@ -115,7 +128,7 @@ fun AListScreen() {
115128
}
116129
}
117130

118-
Scaffold(modifier = Modifier.imePadding(),
131+
Scaffold(
119132
topBar = {
120133
TopAppBar(
121134
title = {
@@ -186,31 +199,61 @@ fun AListScreen() {
186199
)
187200
}
188201
) { paddingValues ->
189-
Column(
202+
Box(
190203
Modifier
191204
.padding(paddingValues)
192205
.fillMaxSize()
193206
.padding(horizontal = 8.dp)
194-
.padding(bottom = 16.dp)
195207
) {
196208
ServerLogScreen(
197209
modifier = Modifier
198-
.fillMaxWidth()
199-
.weight(1f)
210+
.fillMaxSize()
200211
)
201212

202-
Column(
203-
Modifier
204-
.fillMaxWidth(),
205-
verticalArrangement = Arrangement.Bottom,
213+
SwitchFloatingButton(
214+
modifier = Modifier
215+
.align(Alignment.BottomEnd)
216+
.padding(16.dp),
217+
switch = alistRunning
206218
) {
207-
Switch(
208-
modifier = Modifier
209-
.align(Alignment.CenterHorizontally),
210-
checked = alistRunning,
211-
onCheckedChange = { switch() },
212-
)
219+
switch()
213220
}
214221
}
215222
}
223+
}
224+
225+
@Composable
226+
fun SwitchFloatingButton(modifier: Modifier, switch: Boolean, onSwitchChange: (Boolean) -> Unit) {
227+
val targetIcon =
228+
if (switch) Icons.Filled.Stop else Icons.Filled.Send
229+
val rotationAngle by animateFloatAsState(targetValue = if (switch) 360f else 0f, label = "")
230+
231+
val color =
232+
animateColorAsState(
233+
targetValue = if (switch) MaterialTheme.colorScheme.inversePrimary else MaterialTheme.colorScheme.primaryContainer,
234+
label = "",
235+
animationSpec = tween(500, 0, LinearEasing)
236+
)
237+
238+
FloatingActionButton(
239+
modifier = modifier,
240+
elevation = FloatingActionButtonDefaults.elevation(8.dp),
241+
shape = CircleShape,
242+
containerColor = color.value,
243+
onClick = { onSwitchChange(!switch) }) {
244+
245+
Crossfade(targetState = targetIcon, label = "") {
246+
Icon(
247+
imageVector = it,
248+
contentDescription = stringResource(id = if (switch) R.string.shutdown else R.string.start),
249+
modifier = Modifier
250+
.rotate(rotationAngle)
251+
.graphicsLayer {
252+
rotationZ = rotationAngle
253+
}
254+
.size(if (switch) 42.dp else 32.dp)
255+
)
256+
}
257+
258+
}
216259
}

app/src/main/java/com/github/jing332/alistandroid/ui/nav/alist/ServerLogScreen.kt

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

33
import androidx.compose.foundation.layout.Column
4+
import androidx.compose.foundation.layout.Spacer
45
import androidx.compose.foundation.layout.fillMaxSize
56
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.foundation.layout.height
68
import androidx.compose.foundation.layout.padding
79
import androidx.compose.foundation.lazy.LazyColumn
810
import androidx.compose.foundation.lazy.items
@@ -90,6 +92,10 @@ fun ServerLogScreen(modifier: Modifier) {
9092
}
9193
}
9294

95+
item {
96+
Spacer(modifier = Modifier.height(60.dp))
97+
}
98+
9399
}
94100
}
95101
}

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@
3535
<string name="provider_root_summary">account</string>
3636
<string name="path_copied">路径已复制</string>
3737
<string name="check_update">检查更新</string>
38+
<string name="start">启动</string>
3839
</resources>

0 commit comments

Comments
 (0)