diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index aad32b118b8f1..f0ba5ff2ecf48 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1804,7 +1804,7 @@ Too bright. Try gentler lighting. - Try brighter lighting + Not enough light Move phone farther away diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index ec22c609b0b92..ae9ebbacea055 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -617,8 +617,9 @@ - 25 - 26 + 3 + 25 + 26 diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 47dc5c2a5513e..03d4390be2906 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar; import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED; import static android.app.admin.DevicePolicyResources.Strings.SystemUi.KEYGUARD_MANAGEMENT_DISCLOSURE; import static android.app.admin.DevicePolicyResources.Strings.SystemUi.KEYGUARD_NAMED_MANAGEMENT_DISCLOSURE; +import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK; import static android.hardware.biometrics.BiometricSourceType.FACE; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -178,7 +179,7 @@ public class KeyguardIndicationController { private boolean mBatteryPresent = true; private long mChargingTimeRemaining; private String mBiometricErrorMessageToShowOnScreenOn; - private final Set mCoExFaceHelpMsgIdsToShow; + private final Set mCoExFaceAcquisitionMsgIdsToShow; private boolean mInited; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; @@ -249,11 +250,11 @@ public class KeyguardIndicationController { mScreenLifecycle = screenLifecycle; mScreenLifecycle.addObserver(mScreenObserver); - mCoExFaceHelpMsgIdsToShow = new HashSet<>(); + mCoExFaceAcquisitionMsgIdsToShow = new HashSet<>(); int[] msgIds = context.getResources().getIntArray( com.android.systemui.R.array.config_face_help_msgs_when_fingerprint_enrolled); for (int msgId : msgIds) { - mCoExFaceHelpMsgIdsToShow.add(msgId); + mCoExFaceAcquisitionMsgIdsToShow.add(msgId); } mHandler = new Handler(mainLooper) { @@ -990,7 +991,7 @@ public class KeyguardIndicationController { mTopIndicationView == null ? null : mTopIndicationView.getText())); pw.println(" computePowerIndication(): " + computePowerIndication()); pw.println(" trustGrantedIndication: " + getTrustGrantedIndication()); - pw.println(" mCoExFaceHelpMsgIdsToShow=" + mCoExFaceHelpMsgIdsToShow); + pw.println(" mCoExFaceHelpMsgIdsToShow=" + mCoExFaceAcquisitionMsgIdsToShow); mRotateTextViewController.dump(pw, args); } @@ -1055,9 +1056,9 @@ public class KeyguardIndicationController { final boolean isUnlockWithFingerprintPossible = mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( getCurrentUser()); - if (faceAuthSoftError - && isUnlockWithFingerprintPossible - && !mCoExFaceHelpMsgIdsToShow.contains(msgId)) { + final boolean isCoExFaceAcquisitionMessage = + faceAuthSoftError && isUnlockWithFingerprintPossible; + if (isCoExFaceAcquisitionMessage && !mCoExFaceAcquisitionMsgIdsToShow.contains(msgId)) { if (DEBUG) { Log.d(TAG, "skip showing msgId=" + msgId + " helpString=" + helpString + ", due to co-ex logic"); @@ -1067,7 +1068,12 @@ public class KeyguardIndicationController { mStatusBarKeyguardViewManager.showBouncerMessage(helpString, mInitialTextColorState); } else if (mScreenLifecycle.getScreenState() == SCREEN_ON) { - if (faceAuthFailed && isUnlockWithFingerprintPossible) { + if (isCoExFaceAcquisitionMessage && msgId == FACE_ACQUIRED_TOO_DARK) { + showBiometricMessage( + helpString, + mContext.getString(R.string.keyguard_suggest_fingerprint) + ); + } else if (faceAuthFailed && isUnlockWithFingerprintPossible) { showBiometricMessage( mContext.getString(R.string.keyguard_face_failed), mContext.getString(R.string.keyguard_suggest_fingerprint) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index 798f47d2d6cbd..7623510f4bbc7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -667,7 +667,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { final String helpString = "helpString"; final int[] msgIds = new int[]{ BiometricFaceConstants.FACE_ACQUIRED_MOUTH_COVERING_DETECTED, - BiometricFaceConstants.FACE_ACQUIRED_DARK_GLASSES_DETECTED + BiometricFaceConstants.FACE_ACQUIRED_DARK_GLASSES_DETECTED, + BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK }; Set messages = new HashSet<>(); for (int msgId : msgIds) { @@ -698,8 +699,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { BiometricFaceConstants.FACE_ACQUIRED_TOO_LEFT, BiometricFaceConstants.FACE_ACQUIRED_TOO_HIGH, BiometricFaceConstants.FACE_ACQUIRED_TOO_LOW, - BiometricFaceConstants.FACE_ACQUIRED_TOO_BRIGHT, - BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK + BiometricFaceConstants.FACE_ACQUIRED_TOO_BRIGHT }; for (int msgId : msgIds) { mKeyguardUpdateMonitorCallback.onBiometricHelp( @@ -742,6 +742,28 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { verifyIndicationMessages(INDICATION_TYPE_BIOMETRIC_MESSAGE, helpStrings); } + @Test + public void sendTooDarkFaceHelpMessages_fingerprintEnrolled() { + createController(); + + // GIVEN fingerprint enrolled + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + 0)).thenReturn(true); + + // WHEN help message received + final String helpString = "helpMsg"; + mKeyguardUpdateMonitorCallback.onBiometricHelp( + BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK, + helpString, + BiometricSourceType.FACE + ); + + // THEN help message shown and try fingerprint message shown + verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, helpString); + verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP, + mContext.getString(R.string.keyguard_suggest_fingerprint)); + } + @Test public void updateMonitor_listenerUpdatesIndication() { createController();