set android display mode

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-06-22 11:49:41 +08:00
parent 8bc6d51811
commit c8187ad3a1
3 changed files with 57 additions and 2 deletions

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<(jni$_.Int64, jni$_.Int32)>,
)
>
>('globalEnv_CallStaticVoidMethod')
.asFunction<
jni$_.JThrowablePtr Function(
jni$_.Pointer<jni$_.Void>,
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<AndroidHelper> {