From 9e2027ef45974daf67912ec41c9c986cc1c4f1b0 Mon Sep 17 00:00:00 2001 From: niuhuan Date: Wed, 13 Oct 2021 21:57:35 +0800 Subject: [PATCH] hidden other platforms settings --- .../kotlin/niuhuan/pikapi/MainActivity.kt | 8 ++++++ lib/basic/config/AndroidDisplayMode.dart | 23 ++++++++++++++-- lib/basic/config/AutoClean.dart | 10 ++++--- lib/basic/config/ChooserRoot.dart | 2 +- lib/basic/config/KeyboardController.dart | 20 ++++++++++++++ lib/basic/config/VolumeController.dart | 21 ++++++++++++++- lib/main.dart | 10 +++---- lib/screens/AboutScreen.dart | 3 --- lib/screens/SearchScreen.dart | 1 - lib/screens/SettingsScreen.dart | 27 +++---------------- lib/screens/components/ImageReader.dart | 1 - lib/screens/components/Images.dart | 9 ++++--- test/widget_test.dart | 2 +- 13 files changed, 92 insertions(+), 45 deletions(-) diff --git a/android/app/src/main/kotlin/niuhuan/pikapi/MainActivity.kt b/android/app/src/main/kotlin/niuhuan/pikapi/MainActivity.kt index 19dc8cb..3b22ab0 100644 --- a/android/app/src/main/kotlin/niuhuan/pikapi/MainActivity.kt +++ b/android/app/src/main/kotlin/niuhuan/pikapi/MainActivity.kt @@ -194,6 +194,14 @@ class MainActivity : FlutterActivity() { private fun setMode(string: String) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { mixDisplay()?.let { display -> + if (string == ""){ + uiThreadHandler.post { + window.attributes = window.attributes.also { attr -> + attr.preferredDisplayModeId = 0 + } + } + return + } return display.supportedModes.forEach { mode -> if (mode.toString() == string) { uiThreadHandler.post { diff --git a/lib/basic/config/AndroidDisplayMode.dart b/lib/basic/config/AndroidDisplayMode.dart index 2d01748..f9fca1e 100644 --- a/lib/basic/config/AndroidDisplayMode.dart +++ b/lib/basic/config/AndroidDisplayMode.dart @@ -1,4 +1,5 @@ -import 'dart:convert'; +// 显示模式, 仅安卓有效 + import 'dart:io'; import 'package:flutter/material.dart'; @@ -31,7 +32,7 @@ Future chooseAndroidDisplayMode(BuildContext context) async { if (Platform.isAndroid) { List list = [""]; list.addAll(modes); - String? result = await chooseListDialog(context, "安卓屏幕刷新率 \n(若为置空操作重启应用生效)", list); + String? result = await chooseListDialog(context, "安卓屏幕刷新率", list); if (result != null) { await method.saveProperty(_propertyName, "$result"); _androidDisplayMode = result; @@ -39,3 +40,21 @@ Future chooseAndroidDisplayMode(BuildContext context) async { } } } + +Widget androidDisplayModeSetting() { + if (Platform.isAndroid) { + return StatefulBuilder( + builder: (BuildContext context, void Function(void Function()) setState) { + return ListTile( + title: Text("屏幕刷新率(安卓)"), + subtitle: Text(androidDisplayModeName()), + onTap: () async { + await chooseAndroidDisplayMode(context); + setState(() {}); + }, + ); + }, + ); + } + return Container(); +} diff --git a/lib/basic/config/AutoClean.dart b/lib/basic/config/AutoClean.dart index cc1737f..8911e14 100644 --- a/lib/basic/config/AutoClean.dart +++ b/lib/basic/config/AutoClean.dart @@ -4,14 +4,18 @@ import 'package:pikapi/basic/Method.dart'; late String _autoCleanSec; Future autoClean() async { - _autoCleanSec = await method.loadProperty("autoCleanSec", "${3600 * 24 * 30}"); - await method.autoClean(_autoCleanSec); + _autoCleanSec = + await method.loadProperty("autoCleanSec", "${3600 * 24 * 30}"); + if ("0" != _autoCleanSec) { + await method.autoClean(_autoCleanSec); + } } var _autoCleanMap = { "一个月前": "${3600 * 24 * 30}", "一周前": "${3600 * 24 * 7}", "一天前": "${3600 * 24 * 1}", + "不自动清理": "${0}", }; String currentAutoCleanSec() { @@ -28,7 +32,7 @@ Future chooseAutoCleanSec(BuildContext context) async { context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text('选择分流'), + title: Text('选择自动清理周期'), children: [ ..._autoCleanMap.entries.map( (e) => SimpleDialogOption( diff --git a/lib/basic/config/ChooserRoot.dart b/lib/basic/config/ChooserRoot.dart index a5e300c..9846c8f 100644 --- a/lib/basic/config/ChooserRoot.dart +++ b/lib/basic/config/ChooserRoot.dart @@ -23,7 +23,7 @@ String currentChooserRoot() { } else if (Platform.isLinux) { return '/'; } else if (Platform.isAndroid) { - return '/storage/emulated/0'; + return '/storage/emulated/0/Download'; } else { throw 'error'; } diff --git a/lib/basic/config/KeyboardController.dart b/lib/basic/config/KeyboardController.dart index b53d7ae..a24c077 100644 --- a/lib/basic/config/KeyboardController.dart +++ b/lib/basic/config/KeyboardController.dart @@ -1,5 +1,7 @@ /// 上下键翻页 +import 'dart:io'; + import 'package:flutter/material.dart'; import '../Common.dart'; @@ -27,3 +29,21 @@ Future chooseKeyboardController(BuildContext context) async { keyboardController = target; } } + +Widget keyboardControllerSetting() { + if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) { + return StatefulBuilder( + builder: (BuildContext context, void Function(void Function()) setState) { + return ListTile( + title: Text("阅读器键盘翻页(仅PC)"), + subtitle: Text(keyboardControllerName()), + onTap: () async { + await chooseKeyboardController(context); + setState(() {}); + }, + ); + }, + ); + } + return Container(); +} diff --git a/lib/basic/config/VolumeController.dart b/lib/basic/config/VolumeController.dart index 8e27ef3..9ab81c4 100644 --- a/lib/basic/config/VolumeController.dart +++ b/lib/basic/config/VolumeController.dart @@ -1,5 +1,7 @@ /// 音量键翻页 +import 'dart:io'; + import 'package:flutter/material.dart'; import '../Common.dart'; @@ -10,7 +12,8 @@ const propertyName = "volumeController"; late bool volumeController; Future initVolumeController() async { - volumeController = (await method.loadProperty(propertyName, "false")) == "true"; + volumeController = + (await method.loadProperty(propertyName, "false")) == "true"; } String volumeControllerName() { @@ -26,3 +29,19 @@ Future chooseVolumeController(BuildContext context) async { volumeController = target; } } + +Widget volumeControllerSetting() { + if (Platform.isAndroid) { + return StatefulBuilder(builder: + (BuildContext context, void Function(void Function()) setState) { + return ListTile( + title: Text("阅读器音量键翻页(仅安卓)"), + subtitle: Text(volumeControllerName()), + onTap: () async { + await chooseVolumeController(context); + setState(() {}); + }); + }); + } + return Container(); +} diff --git a/lib/main.dart b/lib/main.dart index f2915cb..b1644fb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,17 +6,17 @@ import 'package:pikapi/basic/Navigatior.dart'; import 'basic/config/Themes.dart'; void main() { - runApp(PikachuApp()); + runApp(PikapiApp()); } -class PikachuApp extends StatefulWidget { - const PikachuApp({Key? key}) : super(key: key); +class PikapiApp extends StatefulWidget { + const PikapiApp({Key? key}) : super(key: key); @override - State createState() => _PikachuAppState(); + State createState() => _PikapiAppState(); } -class _PikachuAppState extends State { +class _PikapiAppState extends State { @override void initState() { themeEvent.subscribe(_onChangeTheme); diff --git a/lib/screens/AboutScreen.dart b/lib/screens/AboutScreen.dart index 209c334..cdc4a36 100644 --- a/lib/screens/AboutScreen.dart +++ b/lib/screens/AboutScreen.dart @@ -1,12 +1,9 @@ -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:pikapi/basic/Cross.dart'; class AboutScreen extends StatelessWidget { @override Widget build(BuildContext context) { - var theme = Theme.of(context); var size = MediaQuery.of(context).size; var min = size.width < size.height ? size.width : size.height; diff --git a/lib/screens/SearchScreen.dart b/lib/screens/SearchScreen.dart index ab0a66e..ad7e932 100644 --- a/lib/screens/SearchScreen.dart +++ b/lib/screens/SearchScreen.dart @@ -1,4 +1,3 @@ -import 'package:event/event.dart'; import 'package:flutter/material.dart'; import 'package:flutter_search_bar/flutter_search_bar.dart'; import 'package:pikapi/basic/Common.dart'; diff --git a/lib/screens/SettingsScreen.dart b/lib/screens/SettingsScreen.dart index d8aa637..16dbf4d 100644 --- a/lib/screens/SettingsScreen.dart +++ b/lib/screens/SettingsScreen.dart @@ -73,22 +73,8 @@ class _SettingsScreenState extends State { setState(() {}); }, ), - ListTile( - title: Text("阅读器音量键翻页(仅安卓)"), - subtitle: Text(volumeControllerName()), - onTap: () async { - await chooseVolumeController(context); - setState(() {}); - }, - ), - ListTile( - title: Text("阅读器键盘翻页(仅PC)"), - subtitle: Text(keyboardControllerName()), - onTap: () async { - await chooseKeyboardController(context); - setState(() {}); - }, - ), + volumeControllerSetting(), + keyboardControllerSetting(), Divider(), ListTile( title: Text("封印"), @@ -141,14 +127,7 @@ class _SettingsScreenState extends State { title: Text('清除缓存'), ), Divider(), - ListTile( - title: Text("屏幕刷新率(安卓)"), - subtitle: Text(androidDisplayModeName()), - onTap: () async { - await chooseAndroidDisplayMode(context); - setState(() {}); - }, - ), + androidDisplayModeSetting(), Divider(), ListTile( title: Text("文件夹选择器默认路径"), diff --git a/lib/screens/components/ImageReader.dart b/lib/screens/components/ImageReader.dart index 0cc2971..9905306 100644 --- a/lib/screens/components/ImageReader.dart +++ b/lib/screens/components/ImageReader.dart @@ -6,7 +6,6 @@ import 'package:event/event.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:photo_view/photo_view_gallery.dart'; -import 'package:pikapi/basic/Channels.dart'; import 'package:pikapi/basic/Common.dart'; import 'package:pikapi/basic/Cross.dart'; import 'package:pikapi/basic/Entities.dart'; diff --git a/lib/screens/components/Images.dart b/lib/screens/components/Images.dart index 7b7f330..5f3a4a8 100644 --- a/lib/screens/components/Images.dart +++ b/lib/screens/components/Images.dart @@ -197,8 +197,7 @@ class _RemoteImageState extends State { @override void initState() { - _mock = - widget.fileServer == "" || widget.fileServer.contains(".xyz/"); + _mock = widget.fileServer == "" || widget.fileServer.contains(".xyz/"); if (!_mock) { _future = method .remoteImageData(widget.fileServer, widget.path) @@ -261,13 +260,17 @@ Widget buildError(double? width, double? height) { } Widget buildLoading(double? width, double? height) { + double? size; + if (width != null && height != null) { + size = width < height ? width : height; + } return Container( width: width, height: height, child: Center( child: Icon( Icons.downloading, - size: width, + size: size, color: Colors.black12, ), ), diff --git a/test/widget_test.dart b/test/widget_test.dart index 367dc2b..bf1bbb7 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:pikapi/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(PikachuApp()); + await tester.pumpWidget(PikapiApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);