From d8bcccb21f8e9db010aa18ae4a4488fe98bedf1f Mon Sep 17 00:00:00 2001 From: Curtis Belmonte Date: Wed, 21 Apr 2021 15:31:36 -0700 Subject: [PATCH] Fix BiometricPrompt for face + non-UDFPS fingerprint Currently, the dual-sensor config for BiometricPrompt requires a face sensor and under-display fingerprint sensor. This commit loosens the restriction to also accept non-UDFPS fingerprint sensors. The fallback logic in this case is the same as for face + UDFPS. Test: Manually verified that BiometricPrompt no longer crashes Fixes: 185301549 Change-Id: I8d90e8e10ae64adb29f7d3c7ce51004aa7a6f1b8 --- ...th_biometric_face_to_fingerprint_view.xml} | 4 +-- ...> AuthBiometricFaceToFingerprintView.java} | 29 ++++++++++--------- .../biometrics/AuthContainerView.java | 14 ++++----- 3 files changed, 25 insertions(+), 22 deletions(-) rename packages/SystemUI/res/layout/{auth_biometric_face_to_udfps_view.xml => auth_biometric_face_to_fingerprint_view.xml} (86%) rename packages/SystemUI/src/com/android/systemui/biometrics/{AuthBiometricFaceToUdfpsView.java => AuthBiometricFaceToFingerprintView.java} (83%) diff --git a/packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml b/packages/SystemUI/res/layout/auth_biometric_face_to_fingerprint_view.xml similarity index 86% rename from packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml rename to packages/SystemUI/res/layout/auth_biometric_face_to_fingerprint_view.xml index 87affde5c04b7..7cf1789961d3f 100644 --- a/packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml +++ b/packages/SystemUI/res/layout/auth_biometric_face_to_fingerprint_view.xml @@ -14,7 +14,7 @@ ~ limitations under the License. --> - - \ No newline at end of file + \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintView.java similarity index 83% rename from packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java rename to packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintView.java index 197f35ba3e86b..71260decf47a2 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintView.java @@ -32,12 +32,12 @@ import android.widget.TextView; import com.android.systemui.R; /** - * Manages the layout of an auth dialog for devices with a face sensor and an under-display - * fingerprint sensor (UDFPS). Face authentication is attempted first, followed by fingerprint if - * the initial attempt is unsuccessful. + * Manages the layout of an auth dialog for devices with both a face sensor and a fingerprint + * sensor. Face authentication is attempted first, followed by fingerprint if the initial attempt is + * unsuccessful. */ -public class AuthBiometricFaceToUdfpsView extends AuthBiometricFaceView { - private static final String TAG = "BiometricPrompt/AuthBiometricFaceToUdfpsView"; +public class AuthBiometricFaceToFingerprintView extends AuthBiometricFaceView { + private static final String TAG = "BiometricPrompt/AuthBiometricFaceToFingerprintView"; protected static class UdfpsIconController extends IconController { protected UdfpsIconController( @@ -87,20 +87,23 @@ public class AuthBiometricFaceToUdfpsView extends AuthBiometricFaceView { @BiometricAuthenticator.Modality private int mActiveSensorType = TYPE_FACE; - @Nullable UdfpsDialogMeasureAdapter mMeasureAdapter; - @Nullable private UdfpsIconController mUdfpsIconController; + @Nullable UdfpsDialogMeasureAdapter mUdfpsMeasureAdapter; - public AuthBiometricFaceToUdfpsView(Context context) { + public AuthBiometricFaceToFingerprintView(Context context) { super(context); } - public AuthBiometricFaceToUdfpsView(Context context, AttributeSet attrs) { + public AuthBiometricFaceToFingerprintView(Context context, AttributeSet attrs) { super(context, attrs); } void setFingerprintSensorProps(@NonNull FingerprintSensorPropertiesInternal sensorProps) { - if (mMeasureAdapter == null || mMeasureAdapter.getSensorProps() != sensorProps) { - mMeasureAdapter = new UdfpsDialogMeasureAdapter(this, sensorProps); + if (!sensorProps.isAnyUdfpsType()) { + return; + } + + if (mUdfpsMeasureAdapter == null || mUdfpsMeasureAdapter.getSensorProps() != sensorProps) { + mUdfpsMeasureAdapter = new UdfpsDialogMeasureAdapter(this, sensorProps); } } @@ -140,8 +143,8 @@ public class AuthBiometricFaceToUdfpsView extends AuthBiometricFaceView { @NonNull AuthDialog.LayoutParams onMeasureInternal(int width, int height) { final AuthDialog.LayoutParams layoutParams = super.onMeasureInternal(width, height); - return mMeasureAdapter != null - ? mMeasureAdapter.onMeasureInternal(width, height, layoutParams) + return mUdfpsMeasureAdapter != null + ? mUdfpsMeasureAdapter.onMeasureInternal(width, height, layoutParams) : layoutParams; } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index 72db6cd5cc091..9e72310ede313 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -348,14 +348,14 @@ public class AuthContainerView extends LinearLayout } } - if (fingerprintSensorProps != null && fingerprintSensorProps.isAnyUdfpsType()) { - final AuthBiometricFaceToUdfpsView faceToUdfpsView = - (AuthBiometricFaceToUdfpsView) factory.inflate( - R.layout.auth_biometric_face_to_udfps_view, null, false); - faceToUdfpsView.setFingerprintSensorProps(fingerprintSensorProps); - mBiometricView = faceToUdfpsView; + if (fingerprintSensorProps != null) { + final AuthBiometricFaceToFingerprintView faceToFingerprintView = + (AuthBiometricFaceToFingerprintView) factory.inflate( + R.layout.auth_biometric_face_to_fingerprint_view, null, false); + faceToFingerprintView.setFingerprintSensorProps(fingerprintSensorProps); + mBiometricView = faceToFingerprintView; } else { - Log.e(TAG, "Fingerprint must be UDFPS for dual-sensor config"); + Log.e(TAG, "Fingerprint props not found for sensor ID: " + fingerprintSensorId); mBiometricView = null; mBackgroundView = null; mBiometricScrollView = null;