From 9e1649273f4ed6e1876446e7e5c9a5edcb0787d3 Mon Sep 17 00:00:00 2001 From: Diya Bera Date: Thu, 20 Oct 2022 23:06:23 +0000 Subject: [PATCH] Remove flicker during fingerprint enrollment Test: m RunSettingsRoboTests -j30 ROBOTEST_FILTER=FingerprintEnrollEnrollingTest Bug: 247581748 Change-Id: I7e456670fa0a8527f47bd8057fb755c0c2c1eeeb --- res/values/arrays.xml | 5 ++ .../fingerprint/FingerprintEnrollSidecar.java | 19 ++++++- .../FingerprintEnrollEnrollingTest.java | 49 ++++++++++++++++--- 3 files changed, 64 insertions(+), 9 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 0632f72eb09..a8bd35cd793 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1650,4 +1650,9 @@ [CHAR LIMIT=NONE] --> + + + + diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java index d8ecd206bd3..d1e512e37b8 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java @@ -21,9 +21,14 @@ import android.hardware.fingerprint.FingerprintManager; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.biometrics.BiometricEnrollSidecar; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + /** * Sidecar fragment to handle the state around fingerprint enrollment. */ @@ -32,11 +37,19 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { private FingerprintUpdater mFingerprintUpdater; private @FingerprintManager.EnrollReason int mEnrollReason; + private Set mHelpIgnore; @Override public void onAttach(Activity activity) { super.onAttach(activity); mFingerprintUpdater = new FingerprintUpdater(activity); + final int[] ignoreAcquiredInfo = getResources().getIntArray( + R.array.fingerprint_acquired_ignore_list); + mHelpIgnore = new HashSet<>(); + for (int acquiredInfo: ignoreAcquiredInfo) { + mHelpIgnore.add(acquiredInfo); + } + mHelpIgnore = Collections.unmodifiableSet(mHelpIgnore); } @Override @@ -49,7 +62,6 @@ protected void startEnrollment() { getString(R.string.fingerprint_intro_error_unknown)); return; } - mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback, mEnrollReason); } @@ -58,7 +70,7 @@ public void setEnrollReason(@FingerprintManager.EnrollReason int enrollReason) { mEnrollReason = enrollReason; } - private FingerprintManager.EnrollmentCallback mEnrollmentCallback + @VisibleForTesting FingerprintManager.EnrollmentCallback mEnrollmentCallback = new FingerprintManager.EnrollmentCallback() { @Override @@ -68,6 +80,9 @@ public void onEnrollmentProgress(int remaining) { @Override public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { + if (mHelpIgnore.contains(helpMsgId)) { + return; + } FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString); } diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java index a9f41822346..b049b7bfb14 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java @@ -18,6 +18,7 @@ import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON; import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL; +import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UNKNOWN; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_PREVIOUS_ROTATION; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_NO_ANIMATION; @@ -35,6 +36,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.mock; + import android.content.Context; import android.content.res.ColorStateList; @@ -52,6 +55,8 @@ import android.view.Surface; import android.widget.TextView; +import androidx.annotation.Nullable; + import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.widget.RingProgressBar; @@ -59,7 +64,6 @@ import com.airbnb.lottie.LottieAnimationView; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -100,16 +104,39 @@ public void setUp() { } @Test - @Ignore public void fingerprintEnrollHelp_shouldShowHelpText() { - EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback(); + initializeActivityFor(TYPE_UNKNOWN); + TestFingerprintEnrollSidecar sidecar = new TestFingerprintEnrollSidecar(); + Resources resources = mock(Resources.class); + doReturn(resources).when(mContext).getResources(); + when(resources.getIntArray(R.array.fingerprint_acquired_ignore_list)) + .thenReturn(new int[]{3}); + + sidecar.setListener(mActivity); + sidecar.onAttach(mActivity); + sidecar.mEnrollmentCallback.onEnrollmentHelp(5, + "Help message should be displayed."); - enrollmentCallback.onEnrollmentProgress(123); - enrollmentCallback.onEnrollmentHelp( - FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS, "test enrollment help"); + TextView errorText = mActivity.findViewById(R.id.error_text); + assertThat(errorText.getText()).isEqualTo("Help message should be displayed."); + } + + @Test + public void fingerprintEnrollHelp_shouldNotShowHelpText() { + initializeActivityFor(TYPE_UNKNOWN); + TestFingerprintEnrollSidecar sidecar = new TestFingerprintEnrollSidecar(); + Resources resources = mock(Resources.class); + doReturn(resources).when(mContext).getResources(); + when(resources.getIntArray(R.array.fingerprint_acquired_ignore_list)) + .thenReturn(new int[]{3}); + + sidecar.setListener(mActivity); + sidecar.onAttach(mActivity); + sidecar.mEnrollmentCallback.onEnrollmentHelp(3, + "Help message should not be displayed."); TextView errorText = mActivity.findViewById(R.id.error_text); - assertThat(errorText.getText()).isEqualTo("test enrollment help"); + assertThat(errorText.getText()).isEqualTo(""); } @Test @@ -319,4 +346,12 @@ private EnrollmentCallback verifyAndCaptureEnrollmentCallback() { return callbackCaptor.getValue(); } + + private class TestFingerprintEnrollSidecar extends FingerprintEnrollSidecar { + @Nullable + @Override + public Context getContext() { + return mContext; + } + } } \ No newline at end of file