Skip to content

Commit 91a7691

Browse files
authored
fix(keepalive):Add manual stop flag to prevent service auto-restart after user shutdown (#4)
- Add manual stop flag to prevent service auto-restart after user shutdown - Update package name from openlist_flutter to openlist_mobile in pubspec.yaml - Update Pigeon channel names from openlist_flutter to openlist_mobile - Update import statements throughout codebase to use new package name - Update GitHub repository references from OpenListFlutter to OpenList-Mobile - Update app display name to "OpenList Mobile" in Android strings and iOS Info.plist - Update artifact names in CI/CD workflows to use "OpenList-Mobile" prefix - Update shortcut ID from openlist_flutter_switch to openlist_mobile_switch
1 parent c5931ea commit 91a7691

File tree

23 files changed

+157
-112
lines changed

23 files changed

+157
-112
lines changed

.github/workflows/build.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,21 +94,21 @@ jobs:
9494
if: success () || failure ()
9595
uses: actions/upload-artifact@v4
9696
with:
97-
name: "OpenListFlutter-v${{ env.ver_name }}_arm64-v8a"
97+
name: "OpenList-Mobile-v${{ env.ver_name }}_arm64-v8a"
9898
path: "${{ env.output }}/*-v8a.apk"
9999

100100
- name: Upload App To Artifact arm-v7a
101101
if: success () || failure ()
102102
uses: actions/upload-artifact@v4
103103
with:
104-
name: "OpenListFlutter-v${{ env.ver_name }}_arm-v7a"
104+
name: "OpenList-Mobile-v${{ env.ver_name }}_arm-v7a"
105105
path: "${{ env.output }}/*-v7a.apk"
106106

107107
- name: Upload App To Artifact x86
108108
if: success () || failure ()
109109
uses: actions/upload-artifact@v4
110110
with:
111-
name: "OpenListFlutter-v${{ env.ver_name }}_x86_64"
111+
name: "OpenList-Mobile-v${{ env.ver_name }}_x86_64"
112112
path: "${{ env.output }}/*64.apk"
113113

114114
ios:
@@ -182,7 +182,7 @@ jobs:
182182
cd build/ios/iphoneos
183183
mkdir Payload
184184
cp -r Runner.app Payload/
185-
zip -r ${{ env.output }}/OpenListFlutter.ipa Payload/
185+
zip -r ${{ env.output }}/OpenList-Mobile.ipa Payload/
186186
187187
- name: Get App Version
188188
run: |
@@ -197,5 +197,5 @@ jobs:
197197
if: success() || failure()
198198
uses: actions/upload-artifact@v4
199199
with:
200-
name: "OpenListFlutter-iOS-${{ env.ver_name }}"
201-
path: "${{ env.output }}/OpenListFlutter.ipa"
200+
name: "OpenList-Mobile-iOS-${{ env.ver_name }}"
201+
path: "${{ env.output }}/OpenList-Mobile.ipa"

.github/workflows/release.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ jobs:
165165
# cd build/ios/iphoneos
166166
# mkdir Payload
167167
# cp -r Runner.app Payload/
168-
# zip -r ${{ env.output }}/OpenListFlutter.ipa Payload/
168+
# zip -r ${{ env.output }}/OpenList-Mobile.ipa Payload/
169169

170170
# - name: Get App Version
171171
# run: |
@@ -180,7 +180,7 @@ jobs:
180180
# uses: actions/upload-artifact@v4
181181
# with:
182182
# name: "ios-release-files"
183-
# path: "${{ env.output }}/OpenListFlutter.ipa"
183+
# path: "${{ env.output }}/OpenList-Mobile.ipa"
184184

185185
release:
186186
needs: [android]

android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ androidComponents {
129129
}
130130
}
131131
}
132-
output.outputFileName.set("OpenListF-v${versionName}${abi}.apk")
132+
output.outputFileName.set("OpenList-Mobile-v${versionName}${abi}.apk")
133133
}
134134
}
135135
}

android/app/src/main/java/com/openlist/pigeon/GeneratedApi.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
128128
{
129129
BasicMessageChannel<Object> channel =
130130
new BasicMessageChannel<>(
131-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.isWakeLockEnabled", getCodec());
131+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.isWakeLockEnabled", getCodec());
132132
if (api != null) {
133133
channel.setMessageHandler(
134134
(message, reply) -> {
@@ -150,7 +150,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
150150
{
151151
BasicMessageChannel<Object> channel =
152152
new BasicMessageChannel<>(
153-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setWakeLockEnabled", getCodec());
153+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setWakeLockEnabled", getCodec());
154154
if (api != null) {
155155
channel.setMessageHandler(
156156
(message, reply) -> {
@@ -174,7 +174,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
174174
{
175175
BasicMessageChannel<Object> channel =
176176
new BasicMessageChannel<>(
177-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.isStartAtBootEnabled", getCodec());
177+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.isStartAtBootEnabled", getCodec());
178178
if (api != null) {
179179
channel.setMessageHandler(
180180
(message, reply) -> {
@@ -196,7 +196,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
196196
{
197197
BasicMessageChannel<Object> channel =
198198
new BasicMessageChannel<>(
199-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setStartAtBootEnabled", getCodec());
199+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setStartAtBootEnabled", getCodec());
200200
if (api != null) {
201201
channel.setMessageHandler(
202202
(message, reply) -> {
@@ -220,7 +220,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
220220
{
221221
BasicMessageChannel<Object> channel =
222222
new BasicMessageChannel<>(
223-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.isAutoCheckUpdateEnabled", getCodec());
223+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.isAutoCheckUpdateEnabled", getCodec());
224224
if (api != null) {
225225
channel.setMessageHandler(
226226
(message, reply) -> {
@@ -242,7 +242,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
242242
{
243243
BasicMessageChannel<Object> channel =
244244
new BasicMessageChannel<>(
245-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setAutoCheckUpdateEnabled", getCodec());
245+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setAutoCheckUpdateEnabled", getCodec());
246246
if (api != null) {
247247
channel.setMessageHandler(
248248
(message, reply) -> {
@@ -266,7 +266,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
266266
{
267267
BasicMessageChannel<Object> channel =
268268
new BasicMessageChannel<>(
269-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.isAutoOpenWebPageEnabled", getCodec());
269+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.isAutoOpenWebPageEnabled", getCodec());
270270
if (api != null) {
271271
channel.setMessageHandler(
272272
(message, reply) -> {
@@ -288,7 +288,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
288288
{
289289
BasicMessageChannel<Object> channel =
290290
new BasicMessageChannel<>(
291-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setAutoOpenWebPageEnabled", getCodec());
291+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setAutoOpenWebPageEnabled", getCodec());
292292
if (api != null) {
293293
channel.setMessageHandler(
294294
(message, reply) -> {
@@ -312,7 +312,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
312312
{
313313
BasicMessageChannel<Object> channel =
314314
new BasicMessageChannel<>(
315-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.getDataDir", getCodec());
315+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.getDataDir", getCodec());
316316
if (api != null) {
317317
channel.setMessageHandler(
318318
(message, reply) -> {
@@ -334,7 +334,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
334334
{
335335
BasicMessageChannel<Object> channel =
336336
new BasicMessageChannel<>(
337-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setDataDir", getCodec());
337+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setDataDir", getCodec());
338338
if (api != null) {
339339
channel.setMessageHandler(
340340
(message, reply) -> {
@@ -358,7 +358,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
358358
{
359359
BasicMessageChannel<Object> channel =
360360
new BasicMessageChannel<>(
361-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.isSilentJumpAppEnabled", getCodec());
361+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.isSilentJumpAppEnabled", getCodec());
362362
if (api != null) {
363363
channel.setMessageHandler(
364364
(message, reply) -> {
@@ -380,7 +380,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig
380380
{
381381
BasicMessageChannel<Object> channel =
382382
new BasicMessageChannel<>(
383-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.AppConfig.setSilentJumpAppEnabled", getCodec());
383+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.AppConfig.setSilentJumpAppEnabled", getCodec());
384384
if (api != null) {
385385
channel.setMessageHandler(
386386
(message, reply) -> {
@@ -434,7 +434,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
434434
{
435435
BasicMessageChannel<Object> channel =
436436
new BasicMessageChannel<>(
437-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.startActivityFromUri", getCodec());
437+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.startActivityFromUri", getCodec());
438438
if (api != null) {
439439
channel.setMessageHandler(
440440
(message, reply) -> {
@@ -458,7 +458,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
458458
{
459459
BasicMessageChannel<Object> channel =
460460
new BasicMessageChannel<>(
461-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.getDeviceSdkInt", getCodec());
461+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.getDeviceSdkInt", getCodec());
462462
if (api != null) {
463463
channel.setMessageHandler(
464464
(message, reply) -> {
@@ -480,7 +480,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
480480
{
481481
BasicMessageChannel<Object> channel =
482482
new BasicMessageChannel<>(
483-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.getDeviceCPUABI", getCodec());
483+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.getDeviceCPUABI", getCodec());
484484
if (api != null) {
485485
channel.setMessageHandler(
486486
(message, reply) -> {
@@ -502,7 +502,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
502502
{
503503
BasicMessageChannel<Object> channel =
504504
new BasicMessageChannel<>(
505-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.getVersionName", getCodec());
505+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.getVersionName", getCodec());
506506
if (api != null) {
507507
channel.setMessageHandler(
508508
(message, reply) -> {
@@ -524,7 +524,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
524524
{
525525
BasicMessageChannel<Object> channel =
526526
new BasicMessageChannel<>(
527-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.getVersionCode", getCodec());
527+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.getVersionCode", getCodec());
528528
if (api != null) {
529529
channel.setMessageHandler(
530530
(message, reply) -> {
@@ -546,7 +546,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
546546
{
547547
BasicMessageChannel<Object> channel =
548548
new BasicMessageChannel<>(
549-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.toast", getCodec());
549+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.toast", getCodec());
550550
if (api != null) {
551551
channel.setMessageHandler(
552552
(message, reply) -> {
@@ -570,7 +570,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable NativeComm
570570
{
571571
BasicMessageChannel<Object> channel =
572572
new BasicMessageChannel<>(
573-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.NativeCommon.longToast", getCodec());
573+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.NativeCommon.longToast", getCodec());
574574
if (api != null) {
575575
channel.setMessageHandler(
576576
(message, reply) -> {
@@ -620,7 +620,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
620620
{
621621
BasicMessageChannel<Object> channel =
622622
new BasicMessageChannel<>(
623-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.addShortcut", getCodec());
623+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.addShortcut", getCodec());
624624
if (api != null) {
625625
channel.setMessageHandler(
626626
(message, reply) -> {
@@ -642,7 +642,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
642642
{
643643
BasicMessageChannel<Object> channel =
644644
new BasicMessageChannel<>(
645-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.startService", getCodec());
645+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.startService", getCodec());
646646
if (api != null) {
647647
channel.setMessageHandler(
648648
(message, reply) -> {
@@ -664,7 +664,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
664664
{
665665
BasicMessageChannel<Object> channel =
666666
new BasicMessageChannel<>(
667-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.setAdminPwd", getCodec());
667+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.setAdminPwd", getCodec());
668668
if (api != null) {
669669
channel.setMessageHandler(
670670
(message, reply) -> {
@@ -688,7 +688,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
688688
{
689689
BasicMessageChannel<Object> channel =
690690
new BasicMessageChannel<>(
691-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.getOpenListHttpPort", getCodec());
691+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.getOpenListHttpPort", getCodec());
692692
if (api != null) {
693693
channel.setMessageHandler(
694694
(message, reply) -> {
@@ -710,7 +710,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
710710
{
711711
BasicMessageChannel<Object> channel =
712712
new BasicMessageChannel<>(
713-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.isRunning", getCodec());
713+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.isRunning", getCodec());
714714
if (api != null) {
715715
channel.setMessageHandler(
716716
(message, reply) -> {
@@ -732,7 +732,7 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable Android ap
732732
{
733733
BasicMessageChannel<Object> channel =
734734
new BasicMessageChannel<>(
735-
binaryMessenger, "dev.flutter.pigeon.openlist_flutter.Android.getOpenListVersion", getCodec());
735+
binaryMessenger, "dev.flutter.pigeon.openlist_mobile.Android.getOpenListVersion", getCodec());
736736
if (api != null) {
737737
channel.setMessageHandler(
738738
(message, reply) -> {
@@ -767,7 +767,7 @@ public Event(@NonNull BinaryMessenger argBinaryMessenger) {
767767
return new StandardMessageCodec();
768768
}
769769
public void onServiceStatusChanged(@NonNull Boolean isRunningArg, @NonNull VoidResult result) {
770-
final String channelName = "dev.flutter.pigeon.openlist_flutter.Event.onServiceStatusChanged";
770+
final String channelName = "dev.flutter.pigeon.openlist_mobile.Event.onServiceStatusChanged";
771771
BasicMessageChannel<Object> channel =
772772
new BasicMessageChannel<>(
773773
binaryMessenger, channelName, getCodec());
@@ -787,7 +787,7 @@ public void onServiceStatusChanged(@NonNull Boolean isRunningArg, @NonNull VoidR
787787
});
788788
}
789789
public void onServerLog(@NonNull Long levelArg, @NonNull String timeArg, @NonNull String logArg, @NonNull VoidResult result) {
790-
final String channelName = "dev.flutter.pigeon.openlist_flutter.Event.onServerLog";
790+
final String channelName = "dev.flutter.pigeon.openlist_mobile.Event.onServerLog";
791791
BasicMessageChannel<Object> channel =
792792
new BasicMessageChannel<>(
793793
binaryMessenger, channelName, getCodec());

android/app/src/main/kotlin/com/openlist/mobile/App.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ class App : FlutterApplication() {
3030

3131
// 尝试重启服务(保活机制)
3232
try {
33-
if (com.openlist.mobile.config.AppConfig.isStartAtBootEnabled) {
33+
// 检查是否被用户手动停止
34+
if (com.openlist.mobile.config.AppConfig.isManuallyStoppedByUser) {
35+
android.util.Log.d("App", "Service was manually stopped by user, skipping restart after crash")
36+
} else if (com.openlist.mobile.config.AppConfig.isStartAtBootEnabled) {
3437
val intent = android.content.Intent(this, OpenListService::class.java)
3538
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
3639
startForegroundService(intent)
@@ -60,6 +63,12 @@ class App : FlutterApplication() {
6063
// 初始化WorkManager任务
6164
com.openlist.mobile.utils.WorkManagerHelper.initialize(this)
6265

66+
// 检查是否被用户手动停止
67+
if (com.openlist.mobile.config.AppConfig.isManuallyStoppedByUser) {
68+
android.util.Log.d("App", "Service was manually stopped by user, skipping keep alive initialization")
69+
return
70+
}
71+
6372
// 如果启用了开机启动,则启动保活服务
6473
if (com.openlist.mobile.config.AppConfig.isStartAtBootEnabled) {
6574
val keepAliveIntent = android.content.Intent(this, KeepAliveService::class.java)

android/app/src/main/kotlin/com/openlist/mobile/OpenListService.kt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,19 @@ class OpenListService : Service(), OpenList.Listener {
136136
// 添加OpenList监听器
137137
OpenList.addListener(this)
138138

139-
// 启动保活服务
140-
startKeepAliveService()
139+
// 检查是否被用户手动停止
140+
if (!AppConfig.isManuallyStoppedByUser) {
141+
// 启动保活服务
142+
startKeepAliveService()
141143

142-
// 启动网络监听
143-
startNetworkMonitoring()
144+
// 启动网络监听
145+
startNetworkMonitoring()
144146

145-
// 启动心跳检测
146-
startHeartbeat()
147+
// 启动心跳检测
148+
startHeartbeat()
149+
} else {
150+
Log.d(TAG, "Service was manually stopped by user, skipping keep alive initialization")
151+
}
147152
}
148153

149154
@Suppress("DEPRECATION")
@@ -271,6 +276,12 @@ class OpenListService : Service(), OpenList.Listener {
271276
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
272277
Log.d(TAG, "onStartCommand called")
273278

279+
// 检查是否被用户手动停止
280+
if (AppConfig.isManuallyStoppedByUser) {
281+
Log.d(TAG, "Service was manually stopped by user, not auto-starting OpenList")
282+
return START_STICKY
283+
}
284+
274285
// 如果还没有启动,则启动OpenList
275286
if (!isRunning) {
276287
startOrShutdown()

0 commit comments

Comments
 (0)