Loading res/values/arrays.xml +5 −0 Original line number Diff line number Diff line Loading @@ -1650,4 +1650,9 @@ [CHAR LIMIT=NONE] --> <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false"> </string-array> <!-- Array containing help message codes that should not be displayed during fingerprint enrollment. --> <integer-array name="fingerprint_acquired_ignore_list"> </integer-array> </resources> src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java +17 −2 Original line number Diff line number Diff line Loading @@ -21,9 +21,14 @@ import android.app.settings.SettingsEnums; 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. */ Loading @@ -32,11 +37,19 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { private FingerprintUpdater mFingerprintUpdater; private @FingerprintManager.EnrollReason int mEnrollReason; private Set<Integer> 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 Loading @@ -49,7 +62,6 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { getString(R.string.fingerprint_intro_error_unknown)); return; } mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback, mEnrollReason); } Loading @@ -58,7 +70,7 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { mEnrollReason = enrollReason; } private FingerprintManager.EnrollmentCallback mEnrollmentCallback @VisibleForTesting FingerprintManager.EnrollmentCallback mEnrollmentCallback = new FingerprintManager.EnrollmentCallback() { @Override Loading @@ -68,6 +80,9 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { @Override public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { if (mHelpIgnore.contains(helpMsgId)) { return; } FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString); } Loading tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +42 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.biometrics.fingerprint; 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; Loading @@ -35,6 +36,8 @@ import static org.mockito.Mockito.spy; 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; Loading @@ -52,6 +55,8 @@ import android.view.Display; 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; Loading @@ -59,7 +64,6 @@ import com.android.settings.widget.RingProgressBar; 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; Loading Loading @@ -100,16 +104,39 @@ public class FingerprintEnrollEnrollingTest { } @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 Loading Loading @@ -319,4 +346,12 @@ public class FingerprintEnrollEnrollingTest { return callbackCaptor.getValue(); } private class TestFingerprintEnrollSidecar extends FingerprintEnrollSidecar { @Nullable @Override public Context getContext() { return mContext; } } } No newline at end of file Loading
res/values/arrays.xml +5 −0 Original line number Diff line number Diff line Loading @@ -1650,4 +1650,9 @@ [CHAR LIMIT=NONE] --> <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false"> </string-array> <!-- Array containing help message codes that should not be displayed during fingerprint enrollment. --> <integer-array name="fingerprint_acquired_ignore_list"> </integer-array> </resources>
src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java +17 −2 Original line number Diff line number Diff line Loading @@ -21,9 +21,14 @@ import android.app.settings.SettingsEnums; 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. */ Loading @@ -32,11 +37,19 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { private FingerprintUpdater mFingerprintUpdater; private @FingerprintManager.EnrollReason int mEnrollReason; private Set<Integer> 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 Loading @@ -49,7 +62,6 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { getString(R.string.fingerprint_intro_error_unknown)); return; } mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback, mEnrollReason); } Loading @@ -58,7 +70,7 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { mEnrollReason = enrollReason; } private FingerprintManager.EnrollmentCallback mEnrollmentCallback @VisibleForTesting FingerprintManager.EnrollmentCallback mEnrollmentCallback = new FingerprintManager.EnrollmentCallback() { @Override Loading @@ -68,6 +80,9 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar { @Override public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { if (mHelpIgnore.contains(helpMsgId)) { return; } FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString); } Loading
tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +42 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.biometrics.fingerprint; 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; Loading @@ -35,6 +36,8 @@ import static org.mockito.Mockito.spy; 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; Loading @@ -52,6 +55,8 @@ import android.view.Display; 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; Loading @@ -59,7 +64,6 @@ import com.android.settings.widget.RingProgressBar; 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; Loading Loading @@ -100,16 +104,39 @@ public class FingerprintEnrollEnrollingTest { } @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 Loading Loading @@ -319,4 +346,12 @@ public class FingerprintEnrollEnrollingTest { return callbackCaptor.getValue(); } private class TestFingerprintEnrollSidecar extends FingerprintEnrollSidecar { @Nullable @Override public Context getContext() { return mContext; } } } No newline at end of file