From 8b4d3a1552a3a2e6f05f597a549ff76fd2d90aa0 Mon Sep 17 00:00:00 2001 From: Jing <42014615+jing332@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:57:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BD=91=E9=A1=B5=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/jing332/pigeon/GeneratedApi.java | 51 +++++++++++++++++++ .../alistflutter/bridge/AppConfigBridge.kt | 5 ++ .../jing332/alistflutter/config/AppConfig.kt | 5 ++ lib/generated/intl/messages_en.dart | 3 ++ lib/generated/intl/messages_zh.dart | 3 ++ lib/generated/l10n.dart | 20 ++++++++ lib/generated_api.dart | 49 ++++++++++++++++++ lib/l10n/intl_en.arb | 4 +- lib/l10n/intl_zh.arb | 4 +- lib/main.dart | 17 ++----- lib/pages/settings/settings.dart | 20 ++++++++ pigeons/pigeon.dart | 4 ++ 12 files changed, 171 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/java/com/github/jing332/pigeon/GeneratedApi.java b/android/app/src/main/java/com/github/jing332/pigeon/GeneratedApi.java index 46264e4..a34038a 100644 --- a/android/app/src/main/java/com/github/jing332/pigeon/GeneratedApi.java +++ b/android/app/src/main/java/com/github/jing332/pigeon/GeneratedApi.java @@ -104,6 +104,11 @@ public interface AppConfig { void setAutoCheckUpdateEnabled(@NonNull Boolean enabled); + @NonNull + Boolean isAutoOpenWebPageEnabled(); + + void setAutoOpenWebPageEnabled(@NonNull Boolean enabled); + /** The codec used by AppConfig. */ static @NonNull MessageCodec getCodec() { return new StandardMessageCodec(); @@ -238,6 +243,52 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable AppConfig api.setAutoCheckUpdateEnabled(enabledArg); wrapped.add(0, null); } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.alist_flutter.AppConfig.isAutoOpenWebPageEnabled", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + try { + Boolean output = api.isAutoOpenWebPageEnabled(); + wrapped.add(0, output); + } + catch (Throwable exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.alist_flutter.AppConfig.setAutoOpenWebPageEnabled", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList(); + ArrayList args = (ArrayList) message; + Boolean enabledArg = (Boolean) args.get(0); + try { + api.setAutoOpenWebPageEnabled(enabledArg); + wrapped.add(0, null); + } catch (Throwable exception) { ArrayList wrappedError = wrapError(exception); wrapped = wrappedError; diff --git a/android/app/src/main/kotlin/com/github/jing332/alistflutter/bridge/AppConfigBridge.kt b/android/app/src/main/kotlin/com/github/jing332/alistflutter/bridge/AppConfigBridge.kt index 23bd389..d39edf5 100644 --- a/android/app/src/main/kotlin/com/github/jing332/alistflutter/bridge/AppConfigBridge.kt +++ b/android/app/src/main/kotlin/com/github/jing332/alistflutter/bridge/AppConfigBridge.kt @@ -10,6 +10,11 @@ object AppConfigBridge : GeneratedApi.AppConfig { override fun isStartAtBootEnabled() = AppConfig.isStartAtBootEnabled override fun isAutoCheckUpdateEnabled() = AppConfig.isAutoCheckUpdateEnabled + override fun isAutoOpenWebPageEnabled() = AppConfig.isAutoOpenWebPageEnabled + + override fun setAutoOpenWebPageEnabled(enabled: Boolean) { + AppConfig.isAutoOpenWebPageEnabled = enabled + } override fun setAutoCheckUpdateEnabled(enabled: Boolean) { AppConfig.isAutoCheckUpdateEnabled = enabled diff --git a/android/app/src/main/kotlin/com/github/jing332/alistflutter/config/AppConfig.kt b/android/app/src/main/kotlin/com/github/jing332/alistflutter/config/AppConfig.kt index 1baad24..6db413a 100644 --- a/android/app/src/main/kotlin/com/github/jing332/alistflutter/config/AppConfig.kt +++ b/android/app/src/main/kotlin/com/github/jing332/alistflutter/config/AppConfig.kt @@ -15,4 +15,9 @@ object AppConfig { fallback = false ) + var isAutoOpenWebPageEnabled: Boolean by prefs.dynamic( + "isAutoOpenWebPageEnabled", + fallback = false + ) + } \ No newline at end of file diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 2a6d8fc..4d2728a 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -28,6 +28,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Auto check for updates"), "autoCheckForUpdatesDesc": MessageLookupByLibrary.simpleMessage( "Check for updates when app starts"), + "autoStartWebPage": MessageLookupByLibrary.simpleMessage("将网页设置为打开首页"), + "autoStartWebPageDesc": + MessageLookupByLibrary.simpleMessage("打开主界面时的首页"), "bootAutoStartService": MessageLookupByLibrary.simpleMessage("Boot auto-start service"), "bootAutoStartServiceDesc": MessageLookupByLibrary.simpleMessage( diff --git a/lib/generated/intl/messages_zh.dart b/lib/generated/intl/messages_zh.dart index 10d0f29..fa7c5df 100644 --- a/lib/generated/intl/messages_zh.dart +++ b/lib/generated/intl/messages_zh.dart @@ -27,6 +27,9 @@ class MessageLookup extends MessageLookupByLibrary { "autoCheckForUpdates": MessageLookupByLibrary.simpleMessage("自动检查更新"), "autoCheckForUpdatesDesc": MessageLookupByLibrary.simpleMessage("启动时自动检查更新"), + "autoStartWebPage": MessageLookupByLibrary.simpleMessage("将网页设置为打开首页"), + "autoStartWebPageDesc": + MessageLookupByLibrary.simpleMessage("打开主界面时的首页"), "bootAutoStartService": MessageLookupByLibrary.simpleMessage("开机自启动服务"), "bootAutoStartServiceDesc": MessageLookupByLibrary.simpleMessage( "在开机后自动启动AList服务。(请确保授予自启动权限)"), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 8c2bec2..a906b88 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -359,6 +359,26 @@ class S { args: [], ); } + + /// `将网页设置为打开首页` + String get autoStartWebPage { + return Intl.message( + '将网页设置为打开首页', + name: 'autoStartWebPage', + desc: '', + args: [], + ); + } + + /// `打开主界面时的首页` + String get autoStartWebPageDesc { + return Intl.message( + '打开主界面时的首页', + name: 'autoStartWebPageDesc', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/generated_api.dart b/lib/generated_api.dart index 389722e..0f8ee18 100644 --- a/lib/generated_api.dart +++ b/lib/generated_api.dart @@ -181,6 +181,55 @@ class AppConfig { return; } } + + Future isAutoOpenWebPageEnabled() async { + const String __pigeon_channelName = 'dev.flutter.pigeon.alist_flutter.AppConfig.isAutoOpenWebPageEnabled'; + final BasicMessageChannel __pigeon_channel = BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send(null) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as bool?)!; + } + } + + Future setAutoOpenWebPageEnabled(bool enabled) async { + const String __pigeon_channelName = 'dev.flutter.pigeon.alist_flutter.AppConfig.setAutoOpenWebPageEnabled'; + final BasicMessageChannel __pigeon_channel = BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([enabled]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } } class Android { diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index cf33fd9..8108eb8 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -30,5 +30,7 @@ "grantStoragePermissionDesc": "Mounting local storage is a must, otherwise no permission to read and write files", "grantStoragePermission": "Grant 【external storage】 permission", "grantNotificationPermission": "Grant 【Notification】 permission", - "grantNotificationPermissionDesc": "Used for foreground service keep alive" + "grantNotificationPermissionDesc": "Used for foreground service keep alive", + "autoStartWebPage": "将网页设置为打开首页", + "autoStartWebPageDesc": "打开主界面时的首页" } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index e3d8d0b..bd5d218 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -29,5 +29,7 @@ "grantStoragePermissionDesc": "挂载本地存储时必须授予,否则无权限读写文件", "grantStoragePermission": "申请【读写外置存储权限】", "grantNotificationPermission": "申请【通知权限】", - "grantNotificationPermissionDesc": "用于前台服务保活" + "grantNotificationPermissionDesc": "用于前台服务保活", + "autoStartWebPage": "将网页设置为打开首页", + "autoStartWebPageDesc": "打开主界面时的首页" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index ad23bcf..22d14cb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -72,14 +72,17 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { - int _selectedIndex = 0; + int _selectedIndex = 1; final PageController _pageController = PageController(); - @override void initState() { super.initState(); + AppConfig().isAutoOpenWebPageEnabled().then((value) => setState(() { + _selectedIndex = 1; + })); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { if (await AppConfig().isAutoCheckUpdateEnabled()) { AppUpdateDialog.checkUpdateAndShowDialog(context, null); @@ -146,13 +149,3 @@ class _MyHomePageState extends State { ); } } - -class NavigationBarController extends GetxController { - final _selectedIndex = 0.obs; - - int get selectedIndex => _selectedIndex.value; - - void setIndex(int index) { - _selectedIndex.value = index; - } -} diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index efd2473..df5114b 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -109,6 +109,16 @@ class _SettingsScreenState extends State { controller.startAtBoot = value; }, ), + // AutoStartWebPage + SwitchPreference( + title: S.of(context).autoStartWebPage, + subtitle: S.of(context).autoStartWebPageDesc, + icon: const Icon(Icons.open_in_browser), + value: controller._autoStartWebPage.value, + onChanged: (value) { + controller.autoStartWebPage = value; + }, + ), ], ), )); @@ -140,6 +150,15 @@ class SettingsController extends GetxController { get startAtBoot => _autoStart.value; + + final _autoStartWebPage = false.obs; + + set autoStartWebPage(value) => + {_autoStartWebPage.value = value, AppConfig().setAutoOpenWebPageEnabled(value)}; + + get autoStartWebPage => _autoStartWebPage.value; + + @override void onInit() async { log("onInit"); @@ -153,6 +172,7 @@ class SettingsController extends GetxController { cfg.isAutoCheckUpdateEnabled().then((value) => autoUpdate = value); cfg.isWakeLockEnabled().then((value) => wakeLock = value); cfg.isStartAtBootEnabled().then((value) => startAtBoot = value); + cfg.isAutoOpenWebPageEnabled().then((value) => autoStartWebPage = value); final sdk = await Android().getDeviceSdkInt(); // A11 diff --git a/pigeons/pigeon.dart b/pigeons/pigeon.dart index 3858d56..fcccd6f 100644 --- a/pigeons/pigeon.dart +++ b/pigeons/pigeon.dart @@ -13,6 +13,10 @@ abstract class AppConfig { bool isAutoCheckUpdateEnabled(); void setAutoCheckUpdateEnabled(bool enabled); + + bool isAutoOpenWebPageEnabled(); + + void setAutoOpenWebPageEnabled(bool enabled); } @HostApi()