diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index 1b9a70f5d46..5ebe9c7e515 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -229,13 +229,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } // Show secondary button once scroll is completed. - if (!scrollNeeded) { - if (!enrollmentCompleted) { - getSecondaryFooterButton().setVisibility(View.VISIBLE); - } - mHasScrolledToBottom = true; - } + getSecondaryFooterButton().setVisibility( + !scrollNeeded && !enrollmentCompleted ? View.VISIBLE : View.INVISIBLE); + mHasScrolledToBottom = !scrollNeeded; }); + + final boolean isScrollNeeded = requireScrollMixin.isScrollingRequired(); + final boolean enrollmentCompleted = checkMaxEnrolled() != 0; + getSecondaryFooterButton().setVisibility( + !isScrollNeeded && !enrollmentCompleted ? View.VISIBLE : View.INVISIBLE); } @Override diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java index a56c34cacdf..81a72694592 100644 --- a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java @@ -78,6 +78,7 @@ import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.GlifLayout; +import com.google.android.setupdesign.template.RequireScrollMixin; import com.google.android.setupdesign.view.BottomScrollView; import org.junit.After; @@ -137,6 +138,11 @@ public class FaceEnrollIntroductionTest { return mRecreateCount; } + @Override + protected void onResume() { + super.onResume(); + } + @Override public void recreate() { mRecreateCount++; @@ -424,11 +430,39 @@ public class FaceEnrollIntroductionTest { } @Test - public void testFaceEnrollIntroduction_notShowFooterSecondaryButton() { + public void testFaceEnrollIntroduction_footerSecondaryButtonWhenCanEnroll() { setupActivity(); FooterBarMixin footer = getGlifLayout(mActivity).getMixin(FooterBarMixin.class); FooterButton footerButton = footer.getSecondaryButton(); + final RequireScrollMixin requireScrollMixin = getGlifLayout(mActivity).getMixin( + RequireScrollMixin.class); + assertThat(footerButton.getVisibility()).isEqualTo( + requireScrollMixin.isScrollingRequired() ? View.INVISIBLE : View.VISIBLE); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + assertThat(footerButton.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void testFaceEnrollIntroduction_footerSecondaryButtonWhenMaxEnroll() { + setFaceManagerToHave(1 /* numEnrollments */); + final Intent intent = new Intent(); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]); + mController = Robolectric.buildActivity(TestFaceEnrollIntroduction.class, intent); + mActivity = (TestFaceEnrollIntroduction) mController.get(); + + mController.create(); + + FooterBarMixin footer = getGlifLayout(mActivity).getMixin(FooterBarMixin.class); + FooterButton footerButton = footer.getSecondaryButton(); + final RequireScrollMixin requireScrollMixin = getGlifLayout(mActivity).getMixin( + RequireScrollMixin.class); + assertThat(footerButton.getVisibility()).isEqualTo(View.INVISIBLE); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); assertThat(footerButton.getVisibility()).isEqualTo(View.INVISIBLE); } diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java index 6df8b8ef4b9..edd50a6e6f6 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java @@ -183,14 +183,6 @@ public class FingerprintEnrollIntroductionTest { int result = mFingerprintEnrollIntroduction.checkMaxEnrolled(); assertThat(result).isEqualTo(0); - - final RequireScrollMixin requireScrollMixin = - ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( - R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); - requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( - false); - Assert.assertEquals(View.VISIBLE, - mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); } @Test @@ -206,14 +198,6 @@ public class FingerprintEnrollIntroductionTest { int result = mFingerprintEnrollIntroduction.checkMaxEnrolled(); assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max); - - final RequireScrollMixin requireScrollMixin = - ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( - R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); - requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( - false); - Assert.assertEquals(View.INVISIBLE, - mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); } @Test @@ -321,6 +305,57 @@ public class FingerprintEnrollIntroductionTest { .isEqualTo(FingerprintEnrollOptions.ENROLL_REASON_SETTINGS); } + @Test + public void intro_CheckNoThanksButtonWhenCanEnroll() { + // This code path should depend on suw_max_fingerprints_enrollable versus + // FingerprintManager.getSensorProperties...maxEnrollmentsPerUser() + Resources resources = mock(Resources.class); + when(resources.getInteger(anyInt())).thenReturn(5); + when(mContext.getResources()).thenReturn(resources); + + setupFingerprintEnrollIntroWith(newFirstSuwIntent()); + setFingerprintManagerToHave(0 /* numEnrollments */); + + final RequireScrollMixin requireScrollMixin = + ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( + R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); + + Assert.assertEquals( + requireScrollMixin.isScrollingRequired() ? View.INVISIBLE : View.VISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + Assert.assertEquals(View.VISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + } + + @Test + public void intro_CheckNoThanksButtonWhenMaxEnroll() { + // This code path should depend on suw_max_fingerprints_enrollable versus + // FingerprintManager.getSensorProperties...maxEnrollmentsPerUser() + Resources resources = mock(Resources.class); + when(mContext.getResources()).thenReturn(resources); + when(resources.getInteger(anyInt())).thenReturn(1); + + setupFingerprintEnrollIntroWith(newFirstSuwIntent()); + setFingerprintManagerToHave(1 /* numEnrollments */); + + final RequireScrollMixin requireScrollMixin = + ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( + R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); + + mFingerprintEnrollIntroduction.onResume(); + Assert.assertEquals(View.INVISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + Assert.assertEquals(View.INVISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + } + private Intent newTokenOnlyIntent() { return new Intent() .putExtra(EXTRA_KEY_CHALLENGE_TOKEN, new byte[] { 1 }); @@ -365,6 +400,11 @@ public class FingerprintEnrollIntroductionTest { public int mNewSensorId; public long mNewChallenge; + @Override + protected void onResume() { + super.onResume(); + } + @Nullable public byte[] getTokenField() { return mToken;