diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 63398c9bc..d67a772ca 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -210,4 +210,5 @@ --> + diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index d3cae5dfc..2a3da604c 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -143,7 +143,7 @@ class _LiveRoomPageState extends State void dispose() { videoPlayerServiceHandler?.onVideoDetailDispose(heroTag); WidgetsBinding.instance.removeObserver(this); - if (Utils.isMobile) { + if (Platform.isAndroid && !plPlayerController.setSystemBrightness) { ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); } PlPlayerController.setPlayCallBack(null); diff --git a/lib/pages/setting/models/play_settings.dart b/lib/pages/setting/models/play_settings.dart index 9cefdf95c..e692d476c 100644 --- a/lib/pages/setting/models/play_settings.dart +++ b/lib/pages/setting/models/play_settings.dart @@ -82,6 +82,14 @@ List get playSettings => [ setKey: SettingBoxKey.enableSlideVolumeBrightness, defaultVal: true, ), + if (Platform.isAndroid) + const SettingsModel( + settingsType: SettingsType.sw1tch, + title: '调节系统亮度', + leading: Icon(Icons.brightness_6_outlined), + setKey: SettingBoxKey.setSystemBrightness, + defaultVal: false, + ), const SettingsModel( settingsType: SettingsType.sw1tch, title: '中间滑动进入/退出全屏', diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index a112b9622..e06ba9bfe 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -110,6 +110,7 @@ class VideoDetailController extends GetxController PlPlayerController plPlayerController = PlPlayerController.getInstance() ..setCurrBrightness(-1.0); + bool get setSystemBrightness => plPlayerController.setSystemBrightness; late VideoItem firstVideo; late AudioItem firstAudio; diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index c2a8077ba..015eea1a2 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -326,7 +326,7 @@ class _VideoDetailPageVState extends State ); if (!Get.previousRoute.startsWith('/video')) { - if (Utils.isMobile) { + if (Platform.isAndroid && !videoDetailController.setSystemBrightness) { ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); } PlPlayerController.setPlayCallBack(null); @@ -371,7 +371,7 @@ class _VideoDetailPageVState extends State WidgetsBinding.instance.removeObserver(this); - if (Utils.isMobile) { + if (Platform.isAndroid && !videoDetailController.setSystemBrightness) { ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); } @@ -418,7 +418,9 @@ class _VideoDetailPageVState extends State introController.startTimer(); - if (Utils.isMobile && mounted) { + if (mounted && + Platform.isAndroid && + !videoDetailController.setSystemBrightness) { if (videoDetailController.brightness != null) { plPlayerController?.setCurrBrightness( videoDetailController.brightness!, diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index b2a47f802..ffcc471b3 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -98,6 +98,7 @@ class PlPlayerController { final RxDouble _currentVolume = RxDouble( Utils.isDesktop ? Pref.desktopVolume : 1.0, ); + final setSystemBrightness = Pref.setSystemBrightness; final RxDouble _currentBrightness = (-1.0).obs; final RxBool _showControls = false.obs; diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 04fd0a211..d80652cee 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -204,14 +204,22 @@ class _PLVideoPlayerState extends State try { _brightnessValue.value = await ScreenBrightnessPlatform.instance.application; - _listener = ScreenBrightnessPlatform - .instance - .onApplicationScreenBrightnessChanged - .listen((double value) { - if (mounted) { - _brightnessValue.value = value; - } - }); + + void listener(double value) { + if (mounted) { + _brightnessValue.value = value; + } + } + + _listener = Platform.isIOS || plPlayerController.setSystemBrightness + ? ScreenBrightnessPlatform + .instance + .onSystemScreenBrightnessChanged + .listen(listener) + : ScreenBrightnessPlatform + .instance + .onApplicationScreenBrightnessChanged + .listen(listener); } catch (_) {} }); } @@ -264,9 +272,15 @@ class _PLVideoPlayerState extends State Future setBrightness(double value) async { try { - await ScreenBrightnessPlatform.instance.setApplicationScreenBrightness( - value, - ); + if (Platform.isIOS || plPlayerController.setSystemBrightness) { + await ScreenBrightnessPlatform.instance.setSystemScreenBrightness( + value, + ); + } else { + await ScreenBrightnessPlatform.instance.setApplicationScreenBrightness( + value, + ); + } } catch (_) {} _brightnessIndicator.value = true; _brightnessTimer?.cancel(); diff --git a/lib/utils/storage_key.dart b/lib/utils/storage_key.dart index cfefad935..14f1eeedd 100644 --- a/lib/utils/storage_key.dart +++ b/lib/utils/storage_key.dart @@ -142,7 +142,8 @@ abstract class SettingBoxKey { silentDownImg = 'silentDownImg', showMemberShop = 'showMemberShop', enablePlayAll = 'enablePlayAll', - enableTapDm = 'enableTapDm'; + enableTapDm = 'enableTapDm', + setSystemBrightness = 'setSystemBrightness'; static const String minimizeOnExit = 'minimizeOnExit', windowSize = 'windowSize', diff --git a/lib/utils/storage_pref.dart b/lib/utils/storage_pref.dart index 642691dd0..43a29e79a 100644 --- a/lib/utils/storage_pref.dart +++ b/lib/utils/storage_pref.dart @@ -865,4 +865,7 @@ abstract class Pref { static bool get showTrayIcon => _setting.get(SettingBoxKey.showTrayIcon, defaultValue: true); + + static bool get setSystemBrightness => + _setting.get(SettingBoxKey.setSystemBrightness, defaultValue: false); }