Merge "Change to show two footer buttons in SUW lockscreen page."
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 32d4edf..35bc45e 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -408,9 +408,9 @@
             ViewGroup container = view.findViewById(R.id.password_container);
             container.setOpticalInsets(Insets.NONE);
 
-            mSkipButton = (Button) view.findViewById(R.id.skip_button);
+            mSkipButton = view.findViewById(R.id.skip_button);
             mSkipButton.setOnClickListener(this);
-            mNextButton = (Button) view.findViewById(R.id.next_button);
+            mNextButton = view.findViewById(R.id.next_button);
             mNextButton.setOnClickListener(this);
             mClearButton = view.findViewById(R.id.clear_button);
             mClearButton.setOnClickListener(this);
@@ -894,12 +894,13 @@
                 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.setEnabled(canInput && length > 0);
+                mClearButton.setVisibility(toVisibility(canInput && length > 0));
             }
             int message = mUiStage.getMessage(mIsAlphaMode, getStageType());
             if (message != 0) {
@@ -909,13 +910,11 @@
                 mMessage.setVisibility(View.INVISIBLE);
             }
 
-            mClearButton.setVisibility(toVisibility(mUiStage != Stage.Introduction));
-
             setNextText(mUiStage.buttonText);
             mPasswordEntryInputDisabler.setInputEnabled(canInput);
         }
 
-        private int toVisibility(boolean visibleOrGone) {
+        protected int toVisibility(boolean visibleOrGone) {
             return visibleOrGone ? View.VISIBLE : View.GONE;
         }
 
diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 8454cc5..2c443c2 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -135,9 +135,13 @@
         @Override
         protected void updateUi() {
             super.updateUi();
-
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
-            mSkipButton.setVisibility(View.VISIBLE);
+            if (mUiStage == Stage.Introduction) {
+                mSkipButton.setVisibility(View.VISIBLE);
+            } else {
+                mSkipButton.setVisibility(View.GONE);
+            }
+
             if (mOptionsButton != null) {
                 mOptionsButton.setVisibility(
                         mUiStage == Stage.Introduction ? View.VISIBLE : View.GONE);
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index b24936b..0a32468 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -59,6 +59,7 @@
 
         @Nullable
         private Button mOptionsButton;
+        private Button mSkipButton;
 
         @Override
         public View onCreateView(
@@ -71,9 +72,8 @@
                                 .show(getChildFragmentManager(), null));
             }
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
-            Button skipButton = view.findViewById(R.id.skip_button);
-            skipButton.setVisibility(View.VISIBLE);
-            skipButton.setOnClickListener(v -> {
+            mSkipButton = view.findViewById(R.id.skip_button);
+            mSkipButton.setOnClickListener(v -> {
                 SetupSkipDialog dialog = SetupSkipDialog.newInstance(
                         getActivity().getIntent()
                                 .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
@@ -100,6 +100,12 @@
                                 stage == Stage.ChoiceTooShort || stage == Stage.FirstChoiceValid)
                                 ? View.VISIBLE : View.INVISIBLE);
             }
+
+            if (stage.leftMode == LeftButtonMode.Gone && stage == Stage.Introduction) {
+                mSkipButton.setVisibility(View.VISIBLE);
+            } else {
+                mSkipButton.setVisibility(View.GONE);
+            }
         }
 
         @Override
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index 0a08319..bee66cc 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -29,10 +29,13 @@
 
 import com.android.settings.R;
 import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment;
+import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.Stage;
 import com.android.settings.password.ChooseLockPassword.IntentBuilder;
 import com.android.settings.password.SetupChooseLockPassword.SetupChooseLockPasswordFragment;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settings.widget.ScrollToParentEditText;
 
 import org.junit.After;
 import org.junit.Before;
@@ -51,7 +54,7 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {SettingsShadowResources.class, ShadowUtils.class})
+@Config(shadows = {SettingsShadowResources.class, ShadowUtils.class, ShadowAlertDialogCompat.class})
 public class SetupChooseLockPasswordTest {
 
     @Before
@@ -130,6 +133,42 @@
                 .isEqualTo("bar");
     }
 
+    @Test
+    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);
+
+        skipButton.performClick();
+        AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(chooserDialog).isNotNull();
+    }
+
+    @Test
+    public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeVisible() {
+        SetupChooseLockPassword activity = createSetupChooseLockPassword();
+
+        SetupChooseLockPasswordFragment fragment =
+            (SetupChooseLockPasswordFragment) activity.getSupportFragmentManager()
+                .findFragmentById(R.id.main_content);
+
+        ScrollToParentEditText passwordEntry = activity.findViewById(R.id.password_entry);
+        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);
+
+        passwordEntry.setText("1234");
+        fragment.updateUi();
+        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
+        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
+    }
+
     private SetupChooseLockPassword createSetupChooseLockPassword() {
         final Intent intent =
                 SetupChooseLockPassword.modifyIntentForSetup(
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 649a1ba..6b6c60e 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -164,6 +164,20 @@
         assertThat(findFragment(mActivity).mChosenPattern).isNull();
     }
 
+    @Test
+    public void createActivity_enterPattern_clearButtonShouldBeVisible() {
+        ChooseLockPatternFragment fragment = findFragment(mActivity);
+
+        Button skipButton = mActivity.findViewById(R.id.skip_button);
+        Button clearButton = mActivity.findViewById(R.id.footerLeftButton);
+        assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(clearButton.getVisibility()).isEqualTo(View.GONE);
+
+        enterPattern();
+        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
+        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
+    }
+
     private ChooseLockPatternFragment findFragment(FragmentActivity activity) {
         return (ChooseLockPatternFragment)
                 activity.getSupportFragmentManager().findFragmentById(R.id.main_content);