Loading src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +45 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ import com.android.settings.password.ChooseLockSettingsHelper; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import com.google.android.setupdesign.template.RequireScrollMixin.OnRequireScrollStateChangedListener; import com.google.android.setupdesign.util.DynamicColorPalette; /** Loading Loading @@ -180,6 +182,35 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase launchConfirmLock(getConfirmLockTitleResId()); } } FooterButton primaryButton = getPrimaryFooterButton(); FooterButton secondaryButton = getSecondaryFooterButton(); if (primaryButton == null) { Log.d(TAG, "getPrimaryFooterButton() was null"); return; } if (secondaryButton == null) { Log.d(TAG, "getSecondaryFooterButton() was null"); return; } // Setup scroll mixin final RequireScrollMixin requireScrollMixin = getLayout().getMixin( RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, primaryButton, getScrollCompletedText(), this::onNextButtonClick); secondaryButton.setVisibility(View.INVISIBLE); requireScrollMixin.setOnRequireScrollStateChangedListener( new OnRequireScrollStateChangedListener() { @Override public void onRequireScrollStateChanged(boolean scrollNeeded) { if (!scrollNeeded && secondaryButton.getVisibility() == View.INVISIBLE) { secondaryButton.setVisibility(View.VISIBLE); } } }); } @Override Loading Loading @@ -335,4 +366,18 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } return mIconColorFilter; } @Nullable protected FooterButton getPrimaryFooterButton() { return null; } @Nullable protected FooterButton getSecondaryFooterButton() { return null; } protected int getScrollCompletedText() { return R.string.security_settings_face_enroll_introduction_more; } } src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +36 −27 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ 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.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import java.util.List; Loading Loading @@ -81,32 +80,6 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { mFaceFeatureProvider = FeatureFactory.getFactory(getApplicationContext()) .getFaceFeatureProvider(); mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mFooterBarMixin.setSecondaryButton( new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_no_thanks) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(), true /* usePrimaryStyle */); FooterButton.Builder nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_agree) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary); if (maxFacesEnrolled()) { nextButtonBuilder.setListener(this::onNextButtonClick); mFooterBarMixin.setPrimaryButton(nextButtonBuilder.build()); } else { final FooterButton agreeButton = nextButtonBuilder.build(); mFooterBarMixin.setPrimaryButton(agreeButton); final RequireScrollMixin requireScrollMixin = getLayout().getMixin( RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, agreeButton, R.string.security_settings_face_enroll_introduction_more, this::onNextButtonClick); } // This path is an entry point for SetNewPasswordController, e.g. // adb shell am start -a android.app.action.SET_NEW_PASSWORD Loading Loading @@ -232,4 +205,40 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { public void onClick(LinkSpan span) { // TODO(b/110906762) } @Override protected FooterButton getPrimaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getPrimaryButton() == null) { final FooterButton nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_agree) .setButtonType(FooterButton.ButtonType.OPT_IN) .setListener(this::onNextButtonClick) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButtonBuilder); } return mFooterBarMixin.getPrimaryButton(); } @Override protected FooterButton getSecondaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getSecondaryButton() == null) { final FooterButton noThanksButton = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_no_thanks) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */); } return mFooterBarMixin.getSecondaryButton(); } } src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java +41 −24 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import java.util.List; Loading Loading @@ -69,29 +68,6 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { iconDelete.getDrawable().setColorFilter(getIconColorFilter()); iconInfo.getDrawable().setColorFilter(getIconColorFilter()); iconLink.getDrawable().setColorFilter(getIconColorFilter()); mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mFooterBarMixin.setSecondaryButton( new FooterButton.Builder(this) .setText(getNegativeButtonTextId()) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(), true /* usePrimaryStyle */); final FooterButton nextButton = new FooterButton.Builder(this) .setText(R.string.security_settings_fingerprint_enroll_introduction_agree) .setListener(this::onNextButtonClick) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButton); final RequireScrollMixin requireScrollMixin = getLayout().getMixin(RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, nextButton, R.string.security_settings_face_enroll_introduction_more, this::onNextButtonClick); } int getNegativeButtonTextId() { Loading Loading @@ -216,4 +192,45 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { } } } @Override protected FooterButton getPrimaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getPrimaryButton() == null) { final FooterButton nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_fingerprint_enroll_introduction_agree) .setListener(this::onNextButtonClick) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButtonBuilder); } return mFooterBarMixin.getPrimaryButton(); } @Override protected FooterButton getSecondaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getSecondaryButton() == null) { final FooterButton noThanksButton = new FooterButton.Builder(this) .setText(getNegativeButtonTextId()) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */); } return mFooterBarMixin.getSecondaryButton(); } @Override protected int getScrollCompletedText() { return R.string.security_settings_face_enroll_introduction_more; } } Loading
src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +45 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ import com.android.settings.password.ChooseLockSettingsHelper; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import com.google.android.setupdesign.template.RequireScrollMixin.OnRequireScrollStateChangedListener; import com.google.android.setupdesign.util.DynamicColorPalette; /** Loading Loading @@ -180,6 +182,35 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase launchConfirmLock(getConfirmLockTitleResId()); } } FooterButton primaryButton = getPrimaryFooterButton(); FooterButton secondaryButton = getSecondaryFooterButton(); if (primaryButton == null) { Log.d(TAG, "getPrimaryFooterButton() was null"); return; } if (secondaryButton == null) { Log.d(TAG, "getSecondaryFooterButton() was null"); return; } // Setup scroll mixin final RequireScrollMixin requireScrollMixin = getLayout().getMixin( RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, primaryButton, getScrollCompletedText(), this::onNextButtonClick); secondaryButton.setVisibility(View.INVISIBLE); requireScrollMixin.setOnRequireScrollStateChangedListener( new OnRequireScrollStateChangedListener() { @Override public void onRequireScrollStateChanged(boolean scrollNeeded) { if (!scrollNeeded && secondaryButton.getVisibility() == View.INVISIBLE) { secondaryButton.setVisibility(View.VISIBLE); } } }); } @Override Loading Loading @@ -335,4 +366,18 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } return mIconColorFilter; } @Nullable protected FooterButton getPrimaryFooterButton() { return null; } @Nullable protected FooterButton getSecondaryFooterButton() { return null; } protected int getScrollCompletedText() { return R.string.security_settings_face_enroll_introduction_more; } }
src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +36 −27 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ 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.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import java.util.List; Loading Loading @@ -81,32 +80,6 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { mFaceFeatureProvider = FeatureFactory.getFactory(getApplicationContext()) .getFaceFeatureProvider(); mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mFooterBarMixin.setSecondaryButton( new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_no_thanks) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(), true /* usePrimaryStyle */); FooterButton.Builder nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_agree) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary); if (maxFacesEnrolled()) { nextButtonBuilder.setListener(this::onNextButtonClick); mFooterBarMixin.setPrimaryButton(nextButtonBuilder.build()); } else { final FooterButton agreeButton = nextButtonBuilder.build(); mFooterBarMixin.setPrimaryButton(agreeButton); final RequireScrollMixin requireScrollMixin = getLayout().getMixin( RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, agreeButton, R.string.security_settings_face_enroll_introduction_more, this::onNextButtonClick); } // This path is an entry point for SetNewPasswordController, e.g. // adb shell am start -a android.app.action.SET_NEW_PASSWORD Loading Loading @@ -232,4 +205,40 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { public void onClick(LinkSpan span) { // TODO(b/110906762) } @Override protected FooterButton getPrimaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getPrimaryButton() == null) { final FooterButton nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_agree) .setButtonType(FooterButton.ButtonType.OPT_IN) .setListener(this::onNextButtonClick) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButtonBuilder); } return mFooterBarMixin.getPrimaryButton(); } @Override protected FooterButton getSecondaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getSecondaryButton() == null) { final FooterButton noThanksButton = new FooterButton.Builder(this) .setText(R.string.security_settings_face_enroll_introduction_no_thanks) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */); } return mFooterBarMixin.getSecondaryButton(); } }
src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java +41 −24 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.template.RequireScrollMixin; import java.util.List; Loading Loading @@ -69,29 +68,6 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { iconDelete.getDrawable().setColorFilter(getIconColorFilter()); iconInfo.getDrawable().setColorFilter(getIconColorFilter()); iconLink.getDrawable().setColorFilter(getIconColorFilter()); mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mFooterBarMixin.setSecondaryButton( new FooterButton.Builder(this) .setText(getNegativeButtonTextId()) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(), true /* usePrimaryStyle */); final FooterButton nextButton = new FooterButton.Builder(this) .setText(R.string.security_settings_fingerprint_enroll_introduction_agree) .setListener(this::onNextButtonClick) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButton); final RequireScrollMixin requireScrollMixin = getLayout().getMixin(RequireScrollMixin.class); requireScrollMixin.requireScrollWithButton(this, nextButton, R.string.security_settings_face_enroll_introduction_more, this::onNextButtonClick); } int getNegativeButtonTextId() { Loading Loading @@ -216,4 +192,45 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { } } } @Override protected FooterButton getPrimaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getPrimaryButton() == null) { final FooterButton nextButtonBuilder = new FooterButton.Builder(this) .setText(R.string.security_settings_fingerprint_enroll_introduction_agree) .setListener(this::onNextButtonClick) .setButtonType(FooterButton.ButtonType.OPT_IN) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setPrimaryButton(nextButtonBuilder); } return mFooterBarMixin.getPrimaryButton(); } @Override protected FooterButton getSecondaryFooterButton() { if (mFooterBarMixin == null) { mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); } if (mFooterBarMixin.getSecondaryButton() == null) { final FooterButton noThanksButton = new FooterButton.Builder(this) .setText(getNegativeButtonTextId()) .setListener(this::onSkipButtonClick) .setButtonType(FooterButton.ButtonType.NEXT) .setTheme(R.style.SudGlifButton_Primary) .build(); mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */); } return mFooterBarMixin.getSecondaryButton(); } @Override protected int getScrollCompletedText() { return R.string.security_settings_face_enroll_introduction_more; } }