From ff168dc49db48078f242d8c93210746b291cfbb9 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Mon, 16 Sep 2019 16:04:38 -0700 Subject: [PATCH] 12/n: Add LockPatternView for setDeviceCredentialAllowed(true) Includes lock icon, title, subtitle, description, lock pattern view. Corner radius and padding animates nicely from !=0 --> 0. Support for password/pin will come in a subsequent CL. Unit tests for AuthCredentialView will be added when password/pin are implemented. Support for persisting across configuration changes and landscape view will also be added in a subsequent change. Test: BiometricPromptDemo with the following: 1) Confirm pattern, callback received 2) Rejected, error string shown 3) Lockout (5 attempts), countdown string shown, pattern view disabled until countdown is over 4) Cancel pattern auth, callback received Test: atest BiometricServiceTest Test: atest com.android.systemui.biometrics Change-Id: Idc01e33be0074a6c8a43f60b172a4391bfbe5e8a --- .../hardware/biometrics/BiometricPrompt.java | 11 +- .../IBiometricServiceReceiverInternal.aidl | 2 + .../res/drawable/auth_dialog_lock.xml | 27 ++ .../res/layout/auth_container_view.xml | 2 +- .../res/layout/auth_credential_view.xml | 98 +++++++ packages/SystemUI/res/values/dimens.xml | 5 + packages/SystemUI/res/values/strings.xml | 8 + packages/SystemUI/res/values/styles.xml | 6 + .../biometrics/AuthBiometricView.java | 80 +++--- .../biometrics/AuthContainerView.java | 58 +++- .../systemui/biometrics/AuthController.java | 20 +- .../biometrics/AuthCredentialView.java | 261 ++++++++++++++++++ .../systemui/biometrics/AuthDialog.java | 25 +- .../biometrics/AuthDialogCallback.java | 14 +- .../biometrics/AuthPanelController.java | 55 ++-- .../biometrics/AuthBiometricViewTest.java | 7 +- .../biometrics/AuthContainerViewTest.java | 14 +- .../biometrics/AuthControllerTest.java | 17 +- .../server/biometrics/BiometricService.java | 43 ++- .../biometrics/BiometricServiceTest.java | 29 +- 20 files changed, 696 insertions(+), 86 deletions(-) create mode 100644 packages/SystemUI/res/drawable/auth_dialog_lock.xml create mode 100644 packages/SystemUI/res/layout/auth_credential_view.xml create mode 100644 packages/SystemUI/src/com/android/systemui/biometrics/AuthCredentialView.java diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java index 301856d5676ae..342743da9c352 100644 --- a/core/java/android/hardware/biometrics/BiometricPrompt.java +++ b/core/java/android/hardware/biometrics/BiometricPrompt.java @@ -95,7 +95,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan /** * @hide */ - public static final int DISMISSED_REASON_CONFIRMED = 1; + public static final int DISMISSED_REASON_BIOMETRIC_CONFIRMED = 1; /** * Dialog is done animating away after user clicked on the button set via @@ -114,7 +114,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * Authenticated, confirmation not required. Dialog animated away. * @hide */ - public static final int DISMISSED_REASON_CONFIRM_NOT_REQUIRED = 4; + public static final int DISMISSED_REASON_BIOMETRIC_CONFIRM_NOT_REQUIRED = 4; /** * Error message shown on SystemUI. When BiometricService receives this, the UI is already @@ -129,6 +129,11 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan */ public static final int DISMISSED_REASON_SERVER_REQUESTED = 6; + /** + * @hide + */ + public static final int DISMISSED_REASON_CREDENTIAL_CONFIRMED = 7; + private static class ButtonInfo { Executor executor; DialogInterface.OnClickListener listener; @@ -368,7 +373,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan @Override public void onDialogDismissed(int reason) throws RemoteException { // Check the reason and invoke OnClickListener(s) if necessary - if (reason == DISMISSED_REASON_CONFIRMED) { + if (reason == DISMISSED_REASON_BIOMETRIC_CONFIRMED) { mPositiveButtonInfo.executor.execute(() -> { mPositiveButtonInfo.listener.onClick(null, DialogInterface.BUTTON_POSITIVE); }); diff --git a/core/java/android/hardware/biometrics/IBiometricServiceReceiverInternal.aidl b/core/java/android/hardware/biometrics/IBiometricServiceReceiverInternal.aidl index ca6114e4d8429..66b6e896fc136 100644 --- a/core/java/android/hardware/biometrics/IBiometricServiceReceiverInternal.aidl +++ b/core/java/android/hardware/biometrics/IBiometricServiceReceiverInternal.aidl @@ -38,4 +38,6 @@ oneway interface IBiometricServiceReceiverInternal { void onDialogDismissed(int reason); // Notifies that the user has pressed the "try again" button on SystemUI void onTryAgainPressed(); + // Notifies that the user has pressed the "use password" button on SystemUI + void onDeviceCredentialPressed(); } diff --git a/packages/SystemUI/res/drawable/auth_dialog_lock.xml b/packages/SystemUI/res/drawable/auth_dialog_lock.xml new file mode 100644 index 0000000000000..8146c16e4aaf4 --- /dev/null +++ b/packages/SystemUI/res/drawable/auth_dialog_lock.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/SystemUI/res/layout/auth_container_view.xml b/packages/SystemUI/res/layout/auth_container_view.xml index 23199aacc0931..3db01a4e7f3aa 100644 --- a/packages/SystemUI/res/layout/auth_container_view.xml +++ b/packages/SystemUI/res/layout/auth_container_view.xml @@ -34,7 +34,7 @@ android:elevation="@dimen/biometric_dialog_elevation"/> + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 1079206c81ced..d722d618e416b 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1009,10 +1009,15 @@ 64dp 4dp + 350dp 4dp 1dp 16dp + + 100dp + + 60dp 0dp diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 85d2e1ab9ef83..8335c116c95ff 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -317,6 +317,14 @@ Use pattern Use password + + Wrong PIN + + Wrong pattern + + Wrong password + + Too many incorrect attempts.\nTry again in %d seconds. Touch the fingerprint sensor diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 6374191c4d7bb..96fbcbba6e8b4 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -314,6 +314,12 @@ ?android:attr/colorError + +