From 733ac4b7bc4dfd8a1797d61228f170f68e6cde03 Mon Sep 17 00:00:00 2001 From: boydaihungst <38396158+boydaihungst@users.noreply.github.com> Date: Thu, 25 Dec 2025 14:11:22 +0700 Subject: [PATCH] Fix nubia red magic 6 series udfps HBM This patch will enable for nubia red magic 6 series HBM (High Brightness Mode), so the fingerprint sensor can scan correctly. Without this, when the display brightness is at low, it can't scan user's fingerprint. --- .../systemui/biometrics/UdfpsController.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index d05447a661ecb..19646635f399e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -127,6 +127,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import javax.inject.Inject; import vendor.nubia.ifaa.V1_0.IIfaa; @@ -191,6 +193,8 @@ public class UdfpsController implements DozeReceiver, Dumpable { @NonNull private final InputManager mInputManager; @NonNull private final SelectedUserInteractor mSelectedUserInteractor; @NonNull private final ColorDisplayManager mColorDisplayManager; + private static final String nubiaHbmState = "/sys/kernel/lcd_enhance/hbm_state"; + private boolean hasNubiaHbm = false; private boolean mIgnoreExtraDim; private final boolean mIgnoreRefreshRate; private final KeyguardTransitionInteractor mKeyguardTransitionInteractor; @@ -829,6 +833,9 @@ public UdfpsController(@NonNull @Main Context context, udfpsHapticsSimulator.setUdfpsController(this); udfpsShell.setUdfpsOverlayController(mUdfpsOverlayController); + if (SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { + hasNubiaHbm = new File(nubiaHbmState).exists(); + } } /** @@ -1134,7 +1141,14 @@ private void onFingerDown( mUdfpsDisplayMode.enable(() -> dispatchOnUiReady(requestId)); } } - if(SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { + if (SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { + if (hasNubiaHbm) { + try { + Files.write(Paths.get(nubiaHbmState), "4095".getBytes()); + } catch (IOException e) { + Log.e(TAG, "Failed to write to " + nubiaHbmState, e); + } + } processCmd(13, 0, 0, new byte[0], 0); } @@ -1143,7 +1157,7 @@ private void onFingerDown( cb.onFingerDown(); } } - if(SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { + if (SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { processCmd(14, 0, 0, new byte[0], 0); } @@ -1188,6 +1202,14 @@ private void onFingerUp( y, minor, major, orientation, time, gestureStart, isAod); if(SystemProperties.get("ro.vendor.build.fingerprint").contains("nubia/NX669")) { processCmd(15, 0, 0, new byte[0], 0); + if (hasNubiaHbm) { + try { + String brightness = new String(Files.readAllBytes(Paths.get("/sys/class/backlight/panel0-backlight/brightness"))).trim(); + Files.write(Paths.get(nubiaHbmState), brightness.getBytes()); + } catch (IOException e) { + Log.e(TAG, "Failed to write to " + nubiaHbmState, e); + } + } } if (isOptical()) {