Skip to content

Commit

Permalink
Auto start at boot
Browse files Browse the repository at this point in the history
  • Loading branch information
jing332 committed Jan 15, 2024
1 parent a2a5baa commit 2197f4d
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 15 deletions.
9 changes: 9 additions & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,14 @@
android:name=".AListService"
android:exported="true"
tools:ignore="ExportedService" />

<receiver
android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.github.jing332.alistflutter

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.github.jing332.alistflutter.config.AppConfig

class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED && AppConfig.isStartAtBootEnabled) {
context.startService(Intent(context, AListService::class.java))
}
}
}
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'dart:async';

import 'package:alist_flutter/generated_api.dart';
import 'package:alist_flutter/pages/alist.dart';
import 'package:alist_flutter/pages/settings.dart';
import 'package:alist_flutter/pages/settings/settings.dart';
import 'package:alist_flutter/pages/web.dart';
import 'package:alist_flutter/router.dart';
import 'package:flutter/material.dart';
Expand Down
13 changes: 0 additions & 13 deletions lib/pages/settings.dart

This file was deleted.

82 changes: 82 additions & 0 deletions lib/pages/settings/preference_widgets.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import 'package:flutter/material.dart';

class DividerPreference extends StatelessWidget {
const DividerPreference({super.key, required this.title});

final String title;

@override
Widget build(BuildContext context) {
return Column(children: [
const Divider(
height: 1,
),
Container(
alignment: Alignment.center,
padding: const EdgeInsets.fromLTRB(16, 8, 16, 8),
child: Text(
title,
style: Theme.of(context).textTheme.titleMedium?.copyWith(color: Theme.of(context).primaryColor),
),
),
]);
}
}

class BasicPreference extends StatelessWidget {
final String title;
final String subtitle;
final Widget? leading;
final Widget? trailing;
final GestureTapCallback? onTap;

const BasicPreference({
super.key,
required this.title,
required this.subtitle,
this.onTap,
this.leading,
this.trailing,
});

@override
Widget build(BuildContext context) {
return ListTile(
title: Text(title),
subtitle: Text(subtitle),
leading: leading,
trailing: trailing,
onTap: onTap,
);
}
}

class SwitchPreference extends StatelessWidget {
const SwitchPreference({
super.key,
required this.title,
required this.subtitle,
this.icon,
required this.value,
required this.onChanged,
});

final String title;
final String subtitle;
final Widget? icon;
final bool value;
final ValueChanged<bool> onChanged;

@override
Widget build(BuildContext context) {
return BasicPreference(
title: title,
subtitle: subtitle,
leading: icon,
trailing: Switch(value: value, onChanged: onChanged),
onTap: () {
onChanged(!value);
},
);
}
}
84 changes: 84 additions & 0 deletions lib/pages/settings/settings.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import 'package:alist_flutter/generated_api.dart';
import 'package:alist_flutter/pages/settings/preference_widgets.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class SettingsScreen extends StatelessWidget {
const SettingsScreen({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
final controller = Get.put(SettingsController());
return Scaffold(
body: Obx(
() => ListView(
children: [
// SizedBox(height: MediaQuery.of(context).padding.top),

const DividerPreference(title: '通用'),

SwitchPreference(
title: '自动检查更新',
subtitle: '打开主界面时自动从Github检查更新。',
icon: const Icon(Icons.system_update),
value: controller.autoUpdate,
onChanged: (value) {
controller.autoUpdate = value;
},
),
SwitchPreference(
title: '唤醒锁',
subtitle: '开启防止锁屏后CPU休眠,保持进程在后台运行。(部分系统可能导致杀后台)',
icon: const Icon(Icons.screen_lock_portrait),
value: controller.wakeLock,
onChanged: (value) {
controller.wakeLock = value;
},
),
SwitchPreference(
title: '开机自启动服务',
subtitle: '在开机后自动启动AList服务。(请确保授予自启动权限)',
icon: const Icon(Icons.power_settings_new),
value: controller.startAtBoot,
onChanged: (value) {
controller.startAtBoot = value;
},
),
],
),
));
}
}

class SettingsController extends GetxController {
final _autoUpdate = true.obs;

set autoUpdate(value) =>
{_autoUpdate.value = value, AppConfig().setAutoCheckUpdateEnabled(value)};

get autoUpdate => _autoUpdate.value;

final _wakeLock = true.obs;

set wakeLock(value) =>
{_wakeLock.value = value, AppConfig().setWakeLockEnabled(value)};

get wakeLock => _wakeLock.value;

final _autoStart = true.obs;

set startAtBoot(value) =>
{_autoStart.value = value, AppConfig().setStartAtBootEnabled(value)};

get startAtBoot => _autoStart.value;

@override
void onInit() {
final cfg = AppConfig();
cfg.isAutoCheckUpdateEnabled().then((value) => autoUpdate = value);
cfg.isWakeLockEnabled().then((value) => wakeLock = value);
cfg.isStartAtBootEnabled().then((value) => startAtBoot = value);

super.onInit();
}
}
2 changes: 1 addition & 1 deletion lib/router.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:alist_flutter/pages/alist.dart';
import 'package:alist_flutter/pages/settings.dart';
import 'package:alist_flutter/pages/settings/settings.dart';
import 'package:alist_flutter/pages/web.dart';
import 'package:flutter/material.dart';

Expand Down

0 comments on commit 2197f4d

Please sign in to comment.