Fix face/fingerprint consent primary footer button logic

Currently, the primary footer button on the face and fingerprint enroll
consent pages reads "I agree" even before the user has scrolled to the
bottom of the screen. This commit fixes the issue so that "More" is
displayed until the user scrolls to the bottom. The remaining logic is
left intact.

Test: Manual:
1. Start face or fingerprint enrollment
2. Confirm primary button shows "More" and secondary button is hidden
3. Press the "More" button or scroll to the bottom of the screen
4. Ensure primary button shows "I agree" and secondary shows "No thanks"

Fixes: 189268868
Change-Id: I02fa47d1de83bd5b5d82c733495ae579cbd2d6c6
This commit is contained in:
Curtis Belmonte
2021-06-10 16:34:01 -07:00
parent ad84b3dd39
commit e301d59536
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.Nullable;
import androidx.annotation.StringRes;
import com.android.internal.widget.LockPatternUtils;
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.ChooseLockSettingsHelper;
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.span.LinkSpan;
import com.google.android.setupdesign.template.RequireScrollMixin;
import com.google.android.setupdesign.template.RequireScrollMixin.OnRequireScrollStateChangedListener;
import com.google.android.setupdesign.util.DynamicColorPalette;
/**
@@ -183,32 +185,26 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
}
}
FooterButton primaryButton = getPrimaryFooterButton();
FooterButton secondaryButton = getSecondaryFooterButton();
if (primaryButton == null) {
Log.d(TAG, "getPrimaryFooterButton() was null");
return;
}
final GlifLayout layout = getLayout();
mFooterBarMixin = layout.getMixin(FooterBarMixin.class);
mFooterBarMixin.setPrimaryButton(getPrimaryFooterButton());
mFooterBarMixin.setSecondaryButton(getSecondaryFooterButton(), true /* usePrimaryStyle */);
mFooterBarMixin.getSecondaryButton().setVisibility(View.INVISIBLE);
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);
final RequireScrollMixin requireScrollMixin = layout.getMixin(RequireScrollMixin.class);
requireScrollMixin.requireScrollWithButton(this, getPrimaryFooterButton(),
getMoreButtonTextRes(), this::onNextButtonClick);
requireScrollMixin.setOnRequireScrollStateChangedListener(
new OnRequireScrollStateChangedListener() {
@Override
public void onRequireScrollStateChanged(boolean scrollNeeded) {
if (!scrollNeeded && secondaryButton.getVisibility() == View.INVISIBLE) {
secondaryButton.setVisibility(View.VISIBLE);
}
scrollNeeded -> {
// Update text of primary button from "More" to "Agree".
final int primaryButtonTextRes = scrollNeeded
? getMoreButtonTextRes()
: 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;
}
@Nullable
protected FooterButton getPrimaryFooterButton() {
return null;
}
@NonNull
protected abstract FooterButton getPrimaryFooterButton();
@Nullable
protected FooterButton getSecondaryFooterButton() {
return null;
}
@NonNull
protected abstract FooterButton getSecondaryFooterButton();
protected int getScrollCompletedText() {
return R.string.security_settings_face_enroll_introduction_more;
}
@StringRes
protected abstract int getAgreeButtonTextRes();
@StringRes
protected abstract int getMoreButtonTextRes();
}