diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index de85067..580c753 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -29,6 +29,7 @@
 
 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.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 @@
             }
         }
 
-        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 @@
         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();
 }
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index b29e284..8e733b4 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -26,6 +26,10 @@
 import android.widget.ImageView;
 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.Utils;
 import com.android.settings.biometrics.BiometricEnrollIntroduction;
@@ -34,7 +38,6 @@
 import com.android.settings.password.ChooseLockSettingsHelper;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 
-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;
@@ -50,6 +53,8 @@
 
     private FaceManager mFaceManager;
     private FaceFeatureProvider mFaceFeatureProvider;
+    @Nullable private FooterButton mPrimaryFooterButton;
+    @Nullable private FooterButton mSecondaryFooterButton;
 
     @Override
     protected void onCancelButtonClick(View view) {
@@ -207,38 +212,42 @@
     }
 
     @Override
+    @NonNull
     protected FooterButton getPrimaryFooterButton() {
-        if (mFooterBarMixin == null) {
-            mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
-        }
-
-        if (mFooterBarMixin.getPrimaryButton() == null) {
-            final FooterButton nextButtonBuilder = new FooterButton.Builder(this)
+        if (mPrimaryFooterButton == null) {
+            mPrimaryFooterButton = 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();
+        return mPrimaryFooterButton;
     }
 
     @Override
+    @NonNull
     protected FooterButton getSecondaryFooterButton() {
-        if (mFooterBarMixin == null) {
-            mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
-        }
-
-        if (mFooterBarMixin.getSecondaryButton() == null) {
-            final FooterButton noThanksButton = new FooterButton.Builder(this)
+        if (mSecondaryFooterButton == null) {
+            mSecondaryFooterButton = 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();
+        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;
     }
 }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index 8a070ab..5142e21 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -27,6 +27,10 @@
 import android.widget.ImageView;
 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.Utils;
 import com.android.settings.biometrics.BiometricEnrollIntroduction;
@@ -35,7 +39,6 @@
 import com.android.settingslib.HelpUtils;
 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;
 
@@ -46,6 +49,8 @@
     private static final String TAG = "FingerprintIntro";
 
     private FingerprintManager mFingerprintManager;
+    @Nullable private FooterButton mPrimaryFooterButton;
+    @Nullable private FooterButton mSecondaryFooterButton;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -194,43 +199,42 @@
     }
 
     @Override
+    @NonNull
     protected FooterButton getPrimaryFooterButton() {
-        if (mFooterBarMixin == null) {
-            mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
-        }
-
-        if (mFooterBarMixin.getPrimaryButton() == null) {
-            final FooterButton nextButtonBuilder = new FooterButton.Builder(this)
+        if (mPrimaryFooterButton == null) {
+            mPrimaryFooterButton = 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();
+        return mPrimaryFooterButton;
     }
 
     @Override
+    @NonNull
     protected FooterButton getSecondaryFooterButton() {
-        if (mFooterBarMixin == null) {
-            mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
-        }
-
-        if (mFooterBarMixin.getSecondaryButton() == null) {
-            final FooterButton noThanksButton = new FooterButton.Builder(this)
+        if (mSecondaryFooterButton == null) {
+            mSecondaryFooterButton = 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();
+        return mSecondaryFooterButton;
     }
 
     @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;
     }
 }
