Migrating to new footer button for ChooseLockPassword page

Bug: 120805516
Test: RunSettingsRoboTests
Change-Id: I1fb4588d0c2cf04bca88ec470d59945c2fcab01c
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
index 68583b5..b779526 100644
--- a/res/layout/choose_lock_password.xml
+++ b/res/layout/choose_lock_password.xml
@@ -17,11 +17,11 @@
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:icon="@drawable/ic_lock"
     android:importantForAutofill="noExcludeDescendants"
-    settings:sucFooter="@layout/choose_lock_password_footer"
     settings:sucHeaderText="@string/lockpassword_choose_your_screen_lock_header">
 
     <LinearLayout
diff --git a/res/layout/choose_lock_password_footer.xml b/res/layout/choose_lock_password_footer.xml
deleted file mode 100644
index 58d80cf..0000000
--- a/res/layout/choose_lock_password_footer.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2017 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License")
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/SudGlifButtonBar"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <!-- left : skip -->
-    <Button android:id="@+id/skip_button"
-        style="@style/SudGlifButton.Secondary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/skip_label"
-        android:visibility="gone" />
-
-
-    <!-- left : clear -->
-    <Button android:id="@+id/clear_button"
-        style="@style/SudGlifButton.Secondary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:visibility="gone"
-        android:text="@string/lockpassword_clear_label" />
-
-    <Space
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-
-    <!-- right : continue -->
-    <Button android:id="@+id/next_button"
-        style="@style/SudGlifButton.Primary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/next_label" />
-
-</LinearLayout>
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 6ff93f3..0ae664c 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -47,7 +47,6 @@
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
-import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
@@ -69,6 +68,8 @@
 import com.android.settings.notification.RedactionInterstitial;
 import com.android.settings.widget.ImeAwareEditText;
 
+import com.google.android.setupcompat.item.FooterButton;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
 import com.google.android.setupdesign.GlifLayout;
 
 import java.util.ArrayList;
@@ -168,8 +169,7 @@
     }
 
     public static class ChooseLockPasswordFragment extends InstrumentedFragment
-            implements OnClickListener, OnEditorActionListener, TextWatcher,
-            SaveAndFinishWorker.Listener {
+            implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
         private static final String KEY_FIRST_PIN = "first_pin";
         private static final String KEY_UI_STAGE = "ui_stage";
         private static final String KEY_CURRENT_PASSWORD = "current_password";
@@ -210,9 +210,8 @@
         private String mFirstPin;
         private RecyclerView mPasswordRestrictionView;
         protected boolean mIsAlphaMode;
-        protected Button mSkipButton;
-        private Button mClearButton;
-        private Button mNextButton;
+        protected FooterButton mSkipOrClearButton;
+        private FooterButton mNextButton;
         private TextView mMessage;
 
         private TextChangedHandler mTextChangedHandler;
@@ -408,13 +407,25 @@
             ViewGroup container = view.findViewById(R.id.password_container);
             container.setOpticalInsets(Insets.NONE);
 
-            mSkipButton = view.findViewById(R.id.skip_button);
-            mSkipButton.setOnClickListener(this);
-            mNextButton = view.findViewById(R.id.next_button);
-            mNextButton.setOnClickListener(this);
-            mClearButton = view.findViewById(R.id.clear_button);
-            mClearButton.setOnClickListener(this);
-
+            final ButtonFooterMixin mixin = mLayout.getMixin(ButtonFooterMixin.class);
+            mixin.setSecondaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.lockpassword_clear_label)
+                            .setListener(this::onSkipOrClearButtonClick)
+                            .setButtonType(FooterButton.ButtonType.SKIP)
+                            .setTheme(R.style.SudGlifButton_Secondary)
+                            .build()
+            );
+            mixin.setPrimaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.next_label)
+                            .setListener(this::onNextButtonClick)
+                            .setButtonType(FooterButton.ButtonType.NEXT)
+                            .setTheme(R.style.SudGlifButton_Primary)
+                            .build()
+            );
+            mSkipOrClearButton = mixin.getSecondaryButton();
+            mNextButton = mixin.getPrimaryButton();
 
             mMessage = view.findViewById(R.id.message);
             if (mForFingerprint) {
@@ -777,19 +788,15 @@
         }
 
         protected void setNextText(int text) {
-            mNextButton.setText(text);
+            mNextButton.setText(getActivity(), text);
         }
 
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case R.id.next_button:
-                    handleNext();
-                    break;
+        protected void onSkipOrClearButtonClick(View view) {
+            mPasswordEntry.setText("");
+        }
 
-                case R.id.clear_button:
-                    mPasswordEntry.setText("");
-                    break;
-            }
+        protected void onNextButtonClick(View view) {
+            handleNext();
         }
 
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
@@ -894,13 +901,12 @@
                 mPasswordRequirementAdapter.setRequirements(messages);
                 // Enable/Disable the next button accordingly.
                 setNextEnabled(errorCode == NO_ERROR);
-                mClearButton.setVisibility(View.GONE);
             } else {
                 // Hide password requirement view when we are just asking user to confirm the pw.
                 mPasswordRestrictionView.setVisibility(View.GONE);
                 setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType())));
                 setNextEnabled(canInput && length >= mPasswordMinLength);
-                mClearButton.setVisibility(toVisibility(canInput && length > 0));
+                mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
             }
             int message = mUiStage.getMessage(mIsAlphaMode, getStageType());
             if (message != 0) {
diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 2c443c2..213351b 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -72,8 +72,11 @@
     public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment
             implements OnLockTypeSelectedListener {
 
+        private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
+
         @Nullable
         private Button mOptionsButton;
+        private boolean mLeftButtonIsSkip;
 
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
@@ -92,26 +95,22 @@
             if (showOptionsButton && anyOptionsShown) {
                 mOptionsButton = view.findViewById(R.id.screen_lock_options);
                 mOptionsButton.setVisibility(View.VISIBLE);
-                mOptionsButton.setOnClickListener(this);
+                mOptionsButton.setOnClickListener((btn) ->
+                        ChooseLockTypeDialogFragment.newInstance(mUserId)
+                                .show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
             }
         }
 
         @Override
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case R.id.screen_lock_options:
-                    ChooseLockTypeDialogFragment.newInstance(mUserId)
-                            .show(getChildFragmentManager(), null);
-                    break;
-                case R.id.skip_button:
-                    SetupSkipDialog dialog = SetupSkipDialog.newInstance(
-                            getActivity().getIntent()
-                                    .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
-                    dialog.show(getFragmentManager());
-                    break;
-                default:
-                    super.onClick(v);
+        protected void onSkipOrClearButtonClick(View view) {
+            if (mLeftButtonIsSkip) {
+                SetupSkipDialog dialog = SetupSkipDialog.newInstance(
+                        getActivity().getIntent()
+                                .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
+                dialog.show(getFragmentManager());
+                return;
             }
+            super.onSkipOrClearButtonClick(view);
         }
 
         @Override
@@ -137,9 +136,11 @@
             super.updateUi();
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
             if (mUiStage == Stage.Introduction) {
-                mSkipButton.setVisibility(View.VISIBLE);
+                mSkipOrClearButton.setText(getActivity(), R.string.skip_label);
+                mLeftButtonIsSkip = true;
             } else {
-                mSkipButton.setVisibility(View.GONE);
+                mSkipOrClearButton.setText(getActivity(), R.string.lockpassword_clear_label);
+                mLeftButtonIsSkip = false;
             }
 
             if (mOptionsButton != null) {
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 736cd00..3a69844 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -57,6 +57,8 @@
     public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment
             implements ChooseLockTypeDialogFragment.OnLockTypeSelectedListener {
 
+        private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
+
         @Nullable
         private Button mOptionsButton;
         private boolean mLeftButtonIsSkip;
@@ -69,7 +71,7 @@
                 mOptionsButton = view.findViewById(R.id.screen_lock_options);
                 mOptionsButton.setOnClickListener((btn) ->
                         ChooseLockTypeDialogFragment.newInstance(mUserId)
-                                .show(getChildFragmentManager(), null));
+                                .show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
             }
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
             mSkipOrClearButton.setOnClickListener(this::onSkipOrClearButtonClick);
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index bee66cc..946ab69 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -37,6 +37,9 @@
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settings.widget.ScrollToParentEditText;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -137,17 +140,19 @@
     public void createActivity_skipButtonInIntroductionStage_shouldBeVisible() {
         SetupChooseLockPassword activity = createSetupChooseLockPassword();
 
-        Button skipButton = activity.findViewById(R.id.skip_button);
-        assertThat(skipButton).isNotNull();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton).isNotNull();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
 
-        skipButton.performClick();
-        AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        skipOrClearButton.performClick();
+        final AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(chooserDialog).isNotNull();
     }
 
     @Test
-    public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeVisible() {
+    public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeShown() {
         SetupChooseLockPassword activity = createSetupChooseLockPassword();
 
         SetupChooseLockPasswordFragment fragment =
@@ -158,15 +163,17 @@
         passwordEntry.setText("");
         fragment.updateStage(Stage.NeedToConfirm);
 
-        Button skipButton = activity.findViewById(R.id.skip_button);
-        Button clearButton = activity.findViewById(R.id.clear_button);
-        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.GONE);
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton.isEnabled()).isTrue();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.GONE);
 
         passwordEntry.setText("1234");
         fragment.updateUi();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getText())
+                .isEqualTo(application.getString(R.string.lockpassword_clear_label));
     }
 
     private SetupChooseLockPassword createSetupChooseLockPassword() {
diff --git a/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
index 57a4965..269be26 100644
--- a/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -24,12 +24,16 @@
 import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.hamcrest.CoreMatchers.not;
 
+import android.app.Activity;
 import android.app.Instrumentation;
 import android.content.Context;
 import android.content.Intent;
 import android.view.KeyEvent;
+import android.view.View;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.espresso.action.ViewActions;
@@ -38,6 +42,9 @@
 
 import com.android.settings.R;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,28 +61,41 @@
     }
 
     @Test
-    public void clearNotVisible_when_activityLaunchedInitially() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
-        onView(withId(R.id.clear_button)).check(matches(
-                withEffectiveVisibility(ViewMatchers.Visibility.GONE)));
+    public void clearIsNotShown_when_activityLaunchedInitially() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearNotEnabled_when_nothingEntered() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+    public void clearIsNotShown_when_nothingEntered() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER));
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()))
-            .check(matches(not(isEnabled())));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearEnabled_when_somethingEnteredToConfirm() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+    public void clearIsShown_when_somethingEnteredToConfirm() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER))
                 .perform(ViewActions.typeText("1"));
         // clear should be present if text field contains content
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()));
+        assertThat(layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getText())
+                .isEqualTo(mContext.getString(R.string.lockpassword_clear_label));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.VISIBLE);
     }
 }
diff --git a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
index 1b12c54..67c5cce 100644
--- a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
+++ b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
@@ -30,8 +30,12 @@
 
 import static org.hamcrest.CoreMatchers.not;
 
+import android.content.Context;
 import android.view.KeyEvent;
+import android.view.View;
+import android.widget.Button;
 
+import androidx.test.InstrumentationRegistry;
 import androidx.test.espresso.action.ViewActions;
 import androidx.test.espresso.matcher.ViewMatchers;
 import androidx.test.filters.MediumTest;
@@ -40,6 +44,10 @@
 
 import com.android.settings.R;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,6 +56,8 @@
 @MediumTest
 public class SetupChooseLockPasswordAppTest {
 
+    private Context mContext;
+
     @Rule
     public ActivityTestRule<SetupChooseLockPassword> mActivityTestRule =
             new ActivityTestRule<>(
@@ -55,42 +65,56 @@
                     true /* enable touch at launch */,
                     false /* don't launch at every test */);
 
+    @Before
+    public void setUp() {
+        mContext = InstrumentationRegistry.getTargetContext();
+    }
+
     @Test
     public void testSkipDialogIsShown() throws Throwable {
         SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
 
-        onView(withId(R.id.cancel_button))
-                .check(matches(withText(R.string.skip_label)))
-                .check(matches(isDisplayed()))
-                .perform(click());
-        onView(withId(android.R.id.button1)).check(matches(isDisplayed())).perform(click());
-
+        assertThat(skipOrClearButton.getText()).isEqualTo(mContext.getString(R.string.skip_label));
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        skipOrClearButton.performClick();
         assertThat(activity.isFinishing()).named("Is finishing").isTrue();
     }
 
     @Test
-    public void clearNotVisible_when_activityLaunchedInitially() {
-        mActivityTestRule.launchActivity(null);
-        onView(withId(R.id.clear_button)).check(matches(
-                withEffectiveVisibility(ViewMatchers.Visibility.GONE)));
+    public void clearIsNotShown_when_activityLaunchedInitially() {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getText())
+                .isEqualTo(mContext.getString(R.string.lockpassword_clear_label));
     }
 
     @Test
-    public void clearNotEnabled_when_nothingEntered() throws Throwable {
-        mActivityTestRule.launchActivity(null);
+    public void clearIsNotShown_when_nothingEntered() throws Throwable {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER));
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()))
-                .check(matches(not(isEnabled())));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearEnabled_when_somethingEnteredToConfirm() {
+    public void clearIsShown_when_somethingEnteredToConfirm() {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
+               .perform(pressKey(KeyEvent.KEYCODE_ENTER));
         mActivityTestRule.launchActivity(null);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER))
                 .perform(ViewActions.typeText("1"));
         // clear should be present if text field contains content
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.VISIBLE);
     }
 }