diff --git a/android/app/src/main/java/com/example/piliplus/AndroidHelper.java b/android/app/src/main/java/com/example/piliplus/AndroidHelper.java index df209cdac..c9217f57a 100644 --- a/android/app/src/main/java/com/example/piliplus/AndroidHelper.java +++ b/android/app/src/main/java/com/example/piliplus/AndroidHelper.java @@ -18,6 +18,8 @@ import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.util.Rational; +import android.view.Window; +import android.view.WindowManager; import androidx.annotation.DrawableRes; import androidx.annotation.Keep; @@ -150,4 +152,13 @@ public final class AndroidHelper { Objects.requireNonNull(MediaHelper.buildMediaButtonPendingIntent(activity, mbrComponent, action)) ); } + + public static void setPreferredDisplayMode(long engineId, int mode) { + Activity activity = JniFlutterPlugin.getActivity(engineId); + assert activity != null; + final Window window = activity.getWindow(); + final WindowManager.LayoutParams params = window.getAttributes(); + params.preferredDisplayModeId = mode; + window.setAttributes(params); + } } diff --git a/lib/main.dart b/lib/main.dart index f07434a4a..f22abc8fc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,6 +15,7 @@ import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/services/download/download_service.dart'; import 'package:PiliPlus/services/logger.dart'; import 'package:PiliPlus/services/service_locator.dart'; +import 'package:PiliPlus/utils/android/bindings.g.dart'; import 'package:PiliPlus/utils/cache_manager.dart'; import 'package:PiliPlus/utils/calc_window_position.dart'; import 'package:PiliPlus/utils/date_utils.dart'; @@ -30,7 +31,7 @@ import 'package:PiliPlus/utils/theme_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:catcher_2/catcher_2.dart'; import 'package:dynamic_color/dynamic_color.dart'; -import 'package:flutter/foundation.dart' show kDebugMode; +import 'package:flutter/foundation.dart' show PlatformDispatcher, kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; @@ -139,7 +140,12 @@ void main() async { systemNavigationBarContrastEnforced: false, ), ); - if (Platform.isIOS) { + if (Platform.isAndroid) { + AndroidHelper.setPreferredDisplayMode( + PlatformDispatcher.instance.engineId!, + 0, + ); + } else { ScreenBrightnessPlatform.instance.setAutoReset(false); } } else if (PlatformUtils.isDesktop) { diff --git a/lib/utils/android/bindings.g.dart b/lib/utils/android/bindings.g.dart index d1b325196..502e7f30f 100644 --- a/lib/utils/android/bindings.g.dart +++ b/lib/utils/android/bindings.g.dart @@ -449,6 +449,44 @@ extension type AndroidHelper._(jni$_.JObject _$this) implements jni$_.JObject { isPlaying ? 1 : 0, ).check(); } + + static final _id_setPreferredDisplayMode = _class.staticMethodId( + r'setPreferredDisplayMode', + r'(JI)V', + ); + + static final _setPreferredDisplayMode = + jni$_.ProtectedJniExtensions.lookup< + jni$_.NativeFunction< + jni$_.JThrowablePtr Function( + jni$_.Pointer, + jni$_.JMethodIDPtr, + jni$_.VarArgs<(jni$_.Int64, jni$_.Int32)>, + ) + > + >('globalEnv_CallStaticVoidMethod') + .asFunction< + jni$_.JThrowablePtr Function( + jni$_.Pointer, + jni$_.JMethodIDPtr, + core$_.int, + core$_.int, + ) + >(); + + /// from: `static public void setPreferredDisplayMode(long engineId, int mode)` + static void setPreferredDisplayMode( + core$_.int engineId, + core$_.int mode, + ) { + final _$$classRef = _class.reference; + _setPreferredDisplayMode( + _$$classRef.pointer, + _id_setPreferredDisplayMode.pointer, + engineId, + mode, + ).check(); + } } final class $AndroidHelper$Type$ extends jni$_.JType {