Move face and fingerprint error handling into separate methods.

Other changes:
 - Fix a few linter issues

Bug: 247688462
Test: atest KeyguardIndicationControllerTest
Change-Id: I3f0c6a4efcd6337ccc36cb2cf0739e60587b7362
This commit is contained in:
Chandru
2022-11-03 12:00:41 +00:00
parent ad23a83ccf
commit dd84f60d96

View File

@@ -21,6 +21,7 @@ import static android.app.admin.DevicePolicyResources.Strings.SystemUi.KEYGUARD_
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.hardware.biometrics.BiometricSourceType.FINGERPRINT;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@@ -74,7 +75,6 @@ import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.IBatteryStats;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.ViewClippingUtil;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.Utils;
@@ -188,14 +188,7 @@ public class KeyguardIndicationController {
private KeyguardUpdateMonitorCallback mUpdateMonitorCallback;
private boolean mDozing;
private final ViewClippingUtil.ClippingParameters mClippingParams =
new ViewClippingUtil.ClippingParameters() {
@Override
public boolean shouldFinish(View view) {
return view == mIndicationArea;
}
};
private ScreenLifecycle mScreenLifecycle;
private final ScreenLifecycle mScreenLifecycle;
private final ScreenLifecycle.Observer mScreenObserver =
new ScreenLifecycle.Observer() {
@Override
@@ -619,7 +612,6 @@ public class KeyguardIndicationController {
if (mFalsingManager.isFalseTap(LOW_PENALTY)) {
return;
}
int currentUserId = getCurrentUser();
mDevicePolicyManager.logoutUser();
})
.build(),
@@ -676,7 +668,7 @@ public class KeyguardIndicationController {
hideTransientIndication();
}
updateDeviceEntryIndication(false);
} else if (!visible) {
} else {
// If we unlock and return to keyguard quickly, previous error should not be shown
hideTransientIndication();
}
@@ -1078,11 +1070,8 @@ public class KeyguardIndicationController {
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");
}
return;
debugLog("skip showing msgId=" + msgId + " helpString=" + helpString
+ ", due to co-ex logic");
} else if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
mStatusBarKeyguardViewManager.setKeyguardMessage(helpString,
mInitialTextColorState);
@@ -1122,23 +1111,23 @@ public class KeyguardIndicationController {
@Override
public void onBiometricError(int msgId, String errString,
BiometricSourceType biometricSourceType) {
CharSequence deferredFaceMessage = null;
if (biometricSourceType == FACE) {
if (msgId == BiometricFaceConstants.FACE_ERROR_TIMEOUT) {
deferredFaceMessage = mFaceAcquiredMessageDeferral.getDeferredMessage();
if (DEBUG) {
Log.d(TAG, "showDeferredFaceMessage msgId=" + deferredFaceMessage);
}
}
mFaceAcquiredMessageDeferral.reset();
onFaceAuthError(msgId, errString);
} else if (biometricSourceType == FINGERPRINT) {
onFingerprintAuthError(msgId, errString);
}
}
if (shouldSuppressBiometricError(msgId, biometricSourceType, mKeyguardUpdateMonitor)) {
if (DEBUG) {
Log.d(TAG, "suppressingBiometricError msgId=" + msgId
+ " source=" + biometricSourceType);
}
} else if (biometricSourceType == FACE && msgId == FaceManager.FACE_ERROR_TIMEOUT) {
private void onFaceAuthError(int msgId, String errString) {
CharSequence deferredFaceMessage = null;
if (msgId == BiometricFaceConstants.FACE_ERROR_TIMEOUT) {
deferredFaceMessage = mFaceAcquiredMessageDeferral.getDeferredMessage();
debugLog("showDeferredFaceMessage msgId=" + deferredFaceMessage);
}
mFaceAcquiredMessageDeferral.reset();
if (shouldSuppressFaceError(msgId, mKeyguardUpdateMonitor)) {
debugLog("suppressingFaceError msgId=" + msgId + " errString= " + errString);
} else if (msgId == FaceManager.FACE_ERROR_TIMEOUT) {
// Co-ex: show deferred message OR nothing
if (mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
KeyguardUpdateMonitor.getCurrentUser())) {
@@ -1153,9 +1142,7 @@ public class KeyguardIndicationController {
}
// otherwise, don't show any message
if (DEBUG) {
Log.d(TAG, "skip showing FACE_ERROR_TIMEOUT due to co-ex logic");
}
debugLog("skip showing FACE_ERROR_TIMEOUT due to co-ex logic");
return;
}
@@ -1170,24 +1157,18 @@ public class KeyguardIndicationController {
// suggest swiping up to unlock (try face auth again or swipe up to bouncer)
showActionToUnlock();
}
} else if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
mStatusBarKeyguardViewManager.setKeyguardMessage(errString, mInitialTextColorState);
} else if (mScreenLifecycle.getScreenState() == SCREEN_ON) {
showBiometricMessage(errString);
} else {
mBiometricErrorMessageToShowOnScreenOn = errString;
handleGenericBiometricError(errString);
}
}
private boolean shouldSuppressBiometricError(int msgId,
BiometricSourceType biometricSourceType, KeyguardUpdateMonitor updateMonitor) {
if (biometricSourceType == BiometricSourceType.FINGERPRINT) {
return shouldSuppressFingerprintError(msgId, updateMonitor);
private void onFingerprintAuthError(int msgId, String errString) {
if (shouldSuppressFingerprintError(msgId, mKeyguardUpdateMonitor)) {
debugLog("suppressingFingerprintError msgId=" + msgId
+ " errString= " + errString);
} else {
handleGenericBiometricError(errString);
}
if (biometricSourceType == FACE) {
return shouldSuppressFaceError(msgId, updateMonitor);
}
return false;
}
private boolean shouldSuppressFingerprintError(int msgId,
@@ -1286,7 +1267,23 @@ public class KeyguardIndicationController {
}
}
private StatusBarStateController.StateListener mStatusBarStateListener =
private void debugLog(String logMsg) {
if (DEBUG) {
Log.d(TAG, logMsg);
}
}
private void handleGenericBiometricError(String errString) {
if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
mStatusBarKeyguardViewManager.setKeyguardMessage(errString, mInitialTextColorState);
} else if (mScreenLifecycle.getScreenState() == SCREEN_ON) {
showBiometricMessage(errString);
} else {
mBiometricErrorMessageToShowOnScreenOn = errString;
}
}
private final StatusBarStateController.StateListener mStatusBarStateListener =
new StatusBarStateController.StateListener() {
@Override
public void onStateChanged(int newState) {
@@ -1307,7 +1304,7 @@ public class KeyguardIndicationController {
}
};
private KeyguardStateController.Callback mKeyguardStateCallback =
private final KeyguardStateController.Callback mKeyguardStateCallback =
new KeyguardStateController.Callback() {
@Override
public void onUnlockedChanged() {