diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java index 32d4edf78dd..35bc45e84d7 100644 --- a/src/com/android/settings/password/ChooseLockPassword.java +++ b/src/com/android/settings/password/ChooseLockPassword.java @@ -408,9 +408,9 @@ public class ChooseLockPassword extends SettingsActivity { 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 @@ public class ChooseLockPassword extends SettingsActivity { 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 @@ public class ChooseLockPassword extends SettingsActivity { 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 8454cc54049..2c443c21323 100644 --- a/src/com/android/settings/password/SetupChooseLockPassword.java +++ b/src/com/android/settings/password/SetupChooseLockPassword.java @@ -135,9 +135,13 @@ public class SetupChooseLockPassword extends ChooseLockPassword { @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 b24936b4822..0a324684a27 100644 --- a/src/com/android/settings/password/SetupChooseLockPattern.java +++ b/src/com/android/settings/password/SetupChooseLockPattern.java @@ -59,6 +59,7 @@ public class SetupChooseLockPattern extends ChooseLockPattern { @Nullable private Button mOptionsButton; + private Button mSkipButton; @Override public View onCreateView( @@ -71,9 +72,8 @@ public class SetupChooseLockPattern extends ChooseLockPattern { .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 @@ public class SetupChooseLockPattern extends ChooseLockPattern { 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 0a08319e085..bee66ccc6b6 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 androidx.appcompat.app.AlertDialog; 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.Collections; 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 @@ public class SetupChooseLockPasswordTest { .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 649a1ba7eb5..6b6c60eb405 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 @@ public class SetupChooseLockPatternTest { 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);