Merge "Fix face/fingerprint consent primary footer button logic" into sc-dev am: cd6c64a5c7

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/14941211

Change-Id: I44d170baf79a4418fba5c3ec30fe628131c177c7
This commit is contained in:
TreeHugger Robot
2021-06-12 23:44:33 +00:00
committed by Automerger Merge Worker
3 changed files with 78 additions and 71 deletions

View File

@@ -29,6 +29,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R; import com.android.settings.R;
@@ -36,11 +37,12 @@ import com.android.settings.SetupWizardUtils;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.GlifLayout;
import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.span.LinkSpan;
import com.google.android.setupdesign.template.RequireScrollMixin; import com.google.android.setupdesign.template.RequireScrollMixin;
import com.google.android.setupdesign.template.RequireScrollMixin.OnRequireScrollStateChangedListener;
import com.google.android.setupdesign.util.DynamicColorPalette; import com.google.android.setupdesign.util.DynamicColorPalette;
/** /**
@@ -183,32 +185,26 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
} }
} }
FooterButton primaryButton = getPrimaryFooterButton(); final GlifLayout layout = getLayout();
FooterButton secondaryButton = getSecondaryFooterButton(); mFooterBarMixin = layout.getMixin(FooterBarMixin.class);
if (primaryButton == null) { mFooterBarMixin.setPrimaryButton(getPrimaryFooterButton());
Log.d(TAG, "getPrimaryFooterButton() was null"); mFooterBarMixin.setSecondaryButton(getSecondaryFooterButton(), true /* usePrimaryStyle */);
return; mFooterBarMixin.getSecondaryButton().setVisibility(View.INVISIBLE);
}
if (secondaryButton == null) { final RequireScrollMixin requireScrollMixin = layout.getMixin(RequireScrollMixin.class);
Log.d(TAG, "getSecondaryFooterButton() was null"); requireScrollMixin.requireScrollWithButton(this, getPrimaryFooterButton(),
return; getMoreButtonTextRes(), this::onNextButtonClick);
}
// Setup scroll mixin
final RequireScrollMixin requireScrollMixin = getLayout().getMixin(
RequireScrollMixin.class);
requireScrollMixin.requireScrollWithButton(this, primaryButton, getScrollCompletedText(),
this::onNextButtonClick);
secondaryButton.setVisibility(View.INVISIBLE);
requireScrollMixin.setOnRequireScrollStateChangedListener( requireScrollMixin.setOnRequireScrollStateChangedListener(
new OnRequireScrollStateChangedListener() { scrollNeeded -> {
@Override // Update text of primary button from "More" to "Agree".
public void onRequireScrollStateChanged(boolean scrollNeeded) { final int primaryButtonTextRes = scrollNeeded
if (!scrollNeeded && secondaryButton.getVisibility() == View.INVISIBLE) { ? getMoreButtonTextRes()
secondaryButton.setVisibility(View.VISIBLE); : getAgreeButtonTextRes();
} getPrimaryFooterButton().setText(this, primaryButtonTextRes);
// Show secondary button once scroll is completed.
if (!scrollNeeded) {
getSecondaryFooterButton().setVisibility(View.VISIBLE);
} }
}); });
} }
@@ -367,17 +363,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
return mIconColorFilter; return mIconColorFilter;
} }
@Nullable @NonNull
protected FooterButton getPrimaryFooterButton() { protected abstract FooterButton getPrimaryFooterButton();
return null;
}
@Nullable @NonNull
protected FooterButton getSecondaryFooterButton() { protected abstract FooterButton getSecondaryFooterButton();
return null;
}
protected int getScrollCompletedText() { @StringRes
return R.string.security_settings_face_enroll_introduction_more; protected abstract int getAgreeButtonTextRes();
}
@StringRes
protected abstract int getMoreButtonTextRes();
} }

View File

@@ -26,6 +26,10 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollIntroduction; import com.android.settings.biometrics.BiometricEnrollIntroduction;
@@ -34,7 +38,6 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.span.LinkSpan;
@@ -50,6 +53,8 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
private FaceManager mFaceManager; private FaceManager mFaceManager;
private FaceFeatureProvider mFaceFeatureProvider; private FaceFeatureProvider mFaceFeatureProvider;
@Nullable private FooterButton mPrimaryFooterButton;
@Nullable private FooterButton mSecondaryFooterButton;
@Override @Override
protected void onCancelButtonClick(View view) { protected void onCancelButtonClick(View view) {
@@ -207,38 +212,42 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
} }
@Override @Override
@NonNull
protected FooterButton getPrimaryFooterButton() { protected FooterButton getPrimaryFooterButton() {
if (mFooterBarMixin == null) { if (mPrimaryFooterButton == null) {
mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mPrimaryFooterButton = new FooterButton.Builder(this)
}
if (mFooterBarMixin.getPrimaryButton() == null) {
final FooterButton nextButtonBuilder = new FooterButton.Builder(this)
.setText(R.string.security_settings_face_enroll_introduction_agree) .setText(R.string.security_settings_face_enroll_introduction_agree)
.setButtonType(FooterButton.ButtonType.OPT_IN) .setButtonType(FooterButton.ButtonType.OPT_IN)
.setListener(this::onNextButtonClick) .setListener(this::onNextButtonClick)
.setTheme(R.style.SudGlifButton_Primary) .setTheme(R.style.SudGlifButton_Primary)
.build(); .build();
mFooterBarMixin.setPrimaryButton(nextButtonBuilder);
} }
return mFooterBarMixin.getPrimaryButton(); return mPrimaryFooterButton;
} }
@Override @Override
@NonNull
protected FooterButton getSecondaryFooterButton() { protected FooterButton getSecondaryFooterButton() {
if (mFooterBarMixin == null) { if (mSecondaryFooterButton == null) {
mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mSecondaryFooterButton = new FooterButton.Builder(this)
}
if (mFooterBarMixin.getSecondaryButton() == null) {
final FooterButton noThanksButton = new FooterButton.Builder(this)
.setText(R.string.security_settings_face_enroll_introduction_no_thanks) .setText(R.string.security_settings_face_enroll_introduction_no_thanks)
.setListener(this::onSkipButtonClick) .setListener(this::onSkipButtonClick)
.setButtonType(FooterButton.ButtonType.NEXT) .setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(R.style.SudGlifButton_Primary) .setTheme(R.style.SudGlifButton_Primary)
.build(); .build();
mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */);
} }
return mFooterBarMixin.getSecondaryButton(); return mSecondaryFooterButton;
}
@Override
@StringRes
protected int getAgreeButtonTextRes() {
return R.string.security_settings_fingerprint_enroll_introduction_agree;
}
@Override
@StringRes
protected int getMoreButtonTextRes() {
return R.string.security_settings_face_enroll_introduction_more;
} }
} }

View File

@@ -27,6 +27,10 @@ import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollIntroduction; import com.android.settings.biometrics.BiometricEnrollIntroduction;
@@ -35,7 +39,6 @@ import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.HelpUtils; import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.span.LinkSpan; import com.google.android.setupdesign.span.LinkSpan;
@@ -46,6 +49,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
private static final String TAG = "FingerprintIntro"; private static final String TAG = "FingerprintIntro";
private FingerprintManager mFingerprintManager; private FingerprintManager mFingerprintManager;
@Nullable private FooterButton mPrimaryFooterButton;
@Nullable private FooterButton mSecondaryFooterButton;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -194,43 +199,42 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
} }
@Override @Override
@NonNull
protected FooterButton getPrimaryFooterButton() { protected FooterButton getPrimaryFooterButton() {
if (mFooterBarMixin == null) { if (mPrimaryFooterButton == null) {
mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mPrimaryFooterButton = new FooterButton.Builder(this)
}
if (mFooterBarMixin.getPrimaryButton() == null) {
final FooterButton nextButtonBuilder = new FooterButton.Builder(this)
.setText(R.string.security_settings_fingerprint_enroll_introduction_agree) .setText(R.string.security_settings_fingerprint_enroll_introduction_agree)
.setListener(this::onNextButtonClick) .setListener(this::onNextButtonClick)
.setButtonType(FooterButton.ButtonType.OPT_IN) .setButtonType(FooterButton.ButtonType.OPT_IN)
.setTheme(R.style.SudGlifButton_Primary) .setTheme(R.style.SudGlifButton_Primary)
.build(); .build();
mFooterBarMixin.setPrimaryButton(nextButtonBuilder);
} }
return mFooterBarMixin.getPrimaryButton(); return mPrimaryFooterButton;
} }
@Override @Override
@NonNull
protected FooterButton getSecondaryFooterButton() { protected FooterButton getSecondaryFooterButton() {
if (mFooterBarMixin == null) { if (mSecondaryFooterButton == null) {
mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class); mSecondaryFooterButton = new FooterButton.Builder(this)
}
if (mFooterBarMixin.getSecondaryButton() == null) {
final FooterButton noThanksButton = new FooterButton.Builder(this)
.setText(getNegativeButtonTextId()) .setText(getNegativeButtonTextId())
.setListener(this::onSkipButtonClick) .setListener(this::onSkipButtonClick)
.setButtonType(FooterButton.ButtonType.NEXT) .setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(R.style.SudGlifButton_Primary) .setTheme(R.style.SudGlifButton_Primary)
.build(); .build();
mFooterBarMixin.setSecondaryButton(noThanksButton, true /* usePrimaryStyle */);
} }
return mFooterBarMixin.getSecondaryButton(); return mSecondaryFooterButton;
} }
@Override @Override
protected int getScrollCompletedText() { @StringRes
protected int getAgreeButtonTextRes() {
return R.string.security_settings_fingerprint_enroll_introduction_agree;
}
@Override
@StringRes
protected int getMoreButtonTextRes() {
return R.string.security_settings_face_enroll_introduction_more; return R.string.security_settings_face_enroll_introduction_more;
} }
} }