Migrating to new footer button for ChooseLockPassword page

Bug: 120805516
Test: RunSettingsRoboTests
Change-Id: I1fb4588d0c2cf04bca88ec470d59945c2fcab01c
This commit is contained in:
pastychang
2019-01-18 14:28:27 +08:00
parent 32d561653c
commit 76ad11c179
8 changed files with 143 additions and 136 deletions

View File

@@ -17,11 +17,11 @@
<com.google.android.setupdesign.GlifLayout <com.google.android.setupdesign.GlifLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto" xmlns:settings="http://schemas.android.com/apk/res-auto"
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:icon="@drawable/ic_lock" android:icon="@drawable/ic_lock"
android:importantForAutofill="noExcludeDescendants" android:importantForAutofill="noExcludeDescendants"
settings:sucFooter="@layout/choose_lock_password_footer"
settings:sucHeaderText="@string/lockpassword_choose_your_screen_lock_header"> settings:sucHeaderText="@string/lockpassword_choose_your_screen_lock_header">
<LinearLayout <LinearLayout

View File

@@ -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>

View File

@@ -47,7 +47,6 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
@@ -69,6 +68,8 @@ import com.android.settings.core.InstrumentedFragment;
import com.android.settings.notification.RedactionInterstitial; import com.android.settings.notification.RedactionInterstitial;
import com.android.settings.widget.ImeAwareEditText; 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 com.google.android.setupdesign.GlifLayout;
import java.util.ArrayList; import java.util.ArrayList;
@@ -168,8 +169,7 @@ public class ChooseLockPassword extends SettingsActivity {
} }
public static class ChooseLockPasswordFragment extends InstrumentedFragment public static class ChooseLockPasswordFragment extends InstrumentedFragment
implements OnClickListener, OnEditorActionListener, TextWatcher, implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
SaveAndFinishWorker.Listener {
private static final String KEY_FIRST_PIN = "first_pin"; private static final String KEY_FIRST_PIN = "first_pin";
private static final String KEY_UI_STAGE = "ui_stage"; private static final String KEY_UI_STAGE = "ui_stage";
private static final String KEY_CURRENT_PASSWORD = "current_password"; private static final String KEY_CURRENT_PASSWORD = "current_password";
@@ -210,9 +210,8 @@ public class ChooseLockPassword extends SettingsActivity {
private String mFirstPin; private String mFirstPin;
private RecyclerView mPasswordRestrictionView; private RecyclerView mPasswordRestrictionView;
protected boolean mIsAlphaMode; protected boolean mIsAlphaMode;
protected Button mSkipButton; protected FooterButton mSkipOrClearButton;
private Button mClearButton; private FooterButton mNextButton;
private Button mNextButton;
private TextView mMessage; private TextView mMessage;
private TextChangedHandler mTextChangedHandler; private TextChangedHandler mTextChangedHandler;
@@ -408,13 +407,25 @@ public class ChooseLockPassword extends SettingsActivity {
ViewGroup container = view.findViewById(R.id.password_container); ViewGroup container = view.findViewById(R.id.password_container);
container.setOpticalInsets(Insets.NONE); container.setOpticalInsets(Insets.NONE);
mSkipButton = view.findViewById(R.id.skip_button); final ButtonFooterMixin mixin = mLayout.getMixin(ButtonFooterMixin.class);
mSkipButton.setOnClickListener(this); mixin.setSecondaryButton(
mNextButton = view.findViewById(R.id.next_button); new FooterButton.Builder(getActivity())
mNextButton.setOnClickListener(this); .setText(R.string.lockpassword_clear_label)
mClearButton = view.findViewById(R.id.clear_button); .setListener(this::onSkipOrClearButtonClick)
mClearButton.setOnClickListener(this); .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); mMessage = view.findViewById(R.id.message);
if (mForFingerprint) { if (mForFingerprint) {
@@ -777,19 +788,15 @@ public class ChooseLockPassword extends SettingsActivity {
} }
protected void setNextText(int text) { protected void setNextText(int text) {
mNextButton.setText(text); mNextButton.setText(getActivity(), text);
} }
public void onClick(View v) { protected void onSkipOrClearButtonClick(View view) {
switch (v.getId()) { mPasswordEntry.setText("");
case R.id.next_button: }
handleNext();
break;
case R.id.clear_button: protected void onNextButtonClick(View view) {
mPasswordEntry.setText(""); handleNext();
break;
}
} }
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
@@ -894,13 +901,12 @@ public class ChooseLockPassword extends SettingsActivity {
mPasswordRequirementAdapter.setRequirements(messages); mPasswordRequirementAdapter.setRequirements(messages);
// Enable/Disable the next button accordingly. // Enable/Disable the next button accordingly.
setNextEnabled(errorCode == NO_ERROR); setNextEnabled(errorCode == NO_ERROR);
mClearButton.setVisibility(View.GONE);
} else { } else {
// Hide password requirement view when we are just asking user to confirm the pw. // Hide password requirement view when we are just asking user to confirm the pw.
mPasswordRestrictionView.setVisibility(View.GONE); mPasswordRestrictionView.setVisibility(View.GONE);
setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType()))); setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType())));
setNextEnabled(canInput && length >= mPasswordMinLength); setNextEnabled(canInput && length >= mPasswordMinLength);
mClearButton.setVisibility(toVisibility(canInput && length > 0)); mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
} }
int message = mUiStage.getMessage(mIsAlphaMode, getStageType()); int message = mUiStage.getMessage(mIsAlphaMode, getStageType());
if (message != 0) { if (message != 0) {

View File

@@ -72,8 +72,11 @@ public class SetupChooseLockPassword extends ChooseLockPassword {
public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment
implements OnLockTypeSelectedListener { implements OnLockTypeSelectedListener {
private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
@Nullable @Nullable
private Button mOptionsButton; private Button mOptionsButton;
private boolean mLeftButtonIsSkip;
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
@@ -92,26 +95,22 @@ public class SetupChooseLockPassword extends ChooseLockPassword {
if (showOptionsButton && anyOptionsShown) { if (showOptionsButton && anyOptionsShown) {
mOptionsButton = view.findViewById(R.id.screen_lock_options); mOptionsButton = view.findViewById(R.id.screen_lock_options);
mOptionsButton.setVisibility(View.VISIBLE); mOptionsButton.setVisibility(View.VISIBLE);
mOptionsButton.setOnClickListener(this); mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId)
.show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
} }
} }
@Override @Override
public void onClick(View v) { protected void onSkipOrClearButtonClick(View view) {
switch (v.getId()) { if (mLeftButtonIsSkip) {
case R.id.screen_lock_options: SetupSkipDialog dialog = SetupSkipDialog.newInstance(
ChooseLockTypeDialogFragment.newInstance(mUserId) getActivity().getIntent()
.show(getChildFragmentManager(), null); .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
break; dialog.show(getFragmentManager());
case R.id.skip_button: return;
SetupSkipDialog dialog = SetupSkipDialog.newInstance(
getActivity().getIntent()
.getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
dialog.show(getFragmentManager());
break;
default:
super.onClick(v);
} }
super.onSkipOrClearButtonClick(view);
} }
@Override @Override
@@ -137,9 +136,11 @@ public class SetupChooseLockPassword extends ChooseLockPassword {
super.updateUi(); super.updateUi();
// Show the skip button during SUW but not during Settings > Biometric Enrollment // Show the skip button during SUW but not during Settings > Biometric Enrollment
if (mUiStage == Stage.Introduction) { if (mUiStage == Stage.Introduction) {
mSkipButton.setVisibility(View.VISIBLE); mSkipOrClearButton.setText(getActivity(), R.string.skip_label);
mLeftButtonIsSkip = true;
} else { } else {
mSkipButton.setVisibility(View.GONE); mSkipOrClearButton.setText(getActivity(), R.string.lockpassword_clear_label);
mLeftButtonIsSkip = false;
} }
if (mOptionsButton != null) { if (mOptionsButton != null) {

View File

@@ -57,6 +57,8 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment
implements ChooseLockTypeDialogFragment.OnLockTypeSelectedListener { implements ChooseLockTypeDialogFragment.OnLockTypeSelectedListener {
private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
@Nullable @Nullable
private Button mOptionsButton; private Button mOptionsButton;
private boolean mLeftButtonIsSkip; private boolean mLeftButtonIsSkip;
@@ -69,7 +71,7 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
mOptionsButton = view.findViewById(R.id.screen_lock_options); mOptionsButton = view.findViewById(R.id.screen_lock_options);
mOptionsButton.setOnClickListener((btn) -> mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId) 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 // Show the skip button during SUW but not during Settings > Biometric Enrollment
mSkipOrClearButton.setOnClickListener(this::onSkipOrClearButtonClick); mSkipOrClearButton.setOnClickListener(this::onSkipOrClearButtonClick);

View File

@@ -37,6 +37,9 @@ import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.ScrollToParentEditText; 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.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -137,17 +140,19 @@ public class SetupChooseLockPasswordTest {
public void createActivity_skipButtonInIntroductionStage_shouldBeVisible() { public void createActivity_skipButtonInIntroductionStage_shouldBeVisible() {
SetupChooseLockPassword activity = createSetupChooseLockPassword(); SetupChooseLockPassword activity = createSetupChooseLockPassword();
Button skipButton = activity.findViewById(R.id.skip_button); final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
assertThat(skipButton).isNotNull(); final Button skipOrClearButton =
assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE); layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
assertThat(skipOrClearButton).isNotNull();
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
skipButton.performClick(); skipOrClearButton.performClick();
AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(chooserDialog).isNotNull(); assertThat(chooserDialog).isNotNull();
} }
@Test @Test
public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeVisible() { public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeShown() {
SetupChooseLockPassword activity = createSetupChooseLockPassword(); SetupChooseLockPassword activity = createSetupChooseLockPassword();
SetupChooseLockPasswordFragment fragment = SetupChooseLockPasswordFragment fragment =
@@ -158,15 +163,17 @@ public class SetupChooseLockPasswordTest {
passwordEntry.setText(""); passwordEntry.setText("");
fragment.updateStage(Stage.NeedToConfirm); fragment.updateStage(Stage.NeedToConfirm);
Button skipButton = activity.findViewById(R.id.skip_button); final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
Button clearButton = activity.findViewById(R.id.clear_button); final Button skipOrClearButton =
assertThat(skipButton.getVisibility()).isEqualTo(View.GONE); layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
assertThat(clearButton.getVisibility()).isEqualTo(View.GONE); assertThat(skipOrClearButton.isEnabled()).isTrue();
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.GONE);
passwordEntry.setText("1234"); passwordEntry.setText("1234");
fragment.updateUi(); fragment.updateUi();
assertThat(skipButton.getVisibility()).isEqualTo(View.GONE); assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE); assertThat(skipOrClearButton.getText())
.isEqualTo(application.getString(R.string.lockpassword_clear_label));
} }
private SetupChooseLockPassword createSetupChooseLockPassword() { private SetupChooseLockPassword createSetupChooseLockPassword() {

View File

@@ -24,12 +24,16 @@ import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static com.google.common.truth.Truth.assertThat;
import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.not;
import android.app.Activity;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View;
import androidx.test.InstrumentationRegistry; import androidx.test.InstrumentationRegistry;
import androidx.test.espresso.action.ViewActions; import androidx.test.espresso.action.ViewActions;
@@ -38,6 +42,9 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.settings.R; 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.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -54,28 +61,41 @@ public class ChooseLockPasswordTest {
} }
@Test @Test
public void clearNotVisible_when_activityLaunchedInitially() { public void clearIsNotShown_when_activityLaunchedInitially() {
mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)); final Activity activity =
onView(withId(R.id.clear_button)).check(matches( mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)
withEffectiveVisibility(ViewMatchers.Visibility.GONE))); .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 @Test
public void clearNotEnabled_when_nothingEntered() { public void clearIsNotShown_when_nothingEntered() {
mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)); 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")) onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
.perform(pressKey(KeyEvent.KEYCODE_ENTER)); .perform(pressKey(KeyEvent.KEYCODE_ENTER));
onView(withId(R.id.clear_button)).check(matches(isDisplayed())) assertThat(
.check(matches(not(isEnabled()))); layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
.isEqualTo(View.GONE);
} }
@Test @Test
public void clearEnabled_when_somethingEnteredToConfirm() { public void clearIsShown_when_somethingEnteredToConfirm() {
mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)); 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")) onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
.perform(pressKey(KeyEvent.KEYCODE_ENTER)) .perform(pressKey(KeyEvent.KEYCODE_ENTER))
.perform(ViewActions.typeText("1")); .perform(ViewActions.typeText("1"));
// clear should be present if text field contains content // 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);
} }
} }

View File

@@ -30,8 +30,12 @@ import static com.google.common.truth.Truth.assertThat;
import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.not;
import android.content.Context;
import android.view.KeyEvent; 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.action.ViewActions;
import androidx.test.espresso.matcher.ViewMatchers; import androidx.test.espresso.matcher.ViewMatchers;
import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest;
@@ -40,6 +44,10 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.settings.R; 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.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -48,6 +56,8 @@ import org.junit.runner.RunWith;
@MediumTest @MediumTest
public class SetupChooseLockPasswordAppTest { public class SetupChooseLockPasswordAppTest {
private Context mContext;
@Rule @Rule
public ActivityTestRule<SetupChooseLockPassword> mActivityTestRule = public ActivityTestRule<SetupChooseLockPassword> mActivityTestRule =
new ActivityTestRule<>( new ActivityTestRule<>(
@@ -55,42 +65,56 @@ public class SetupChooseLockPasswordAppTest {
true /* enable touch at launch */, true /* enable touch at launch */,
false /* don't launch at every test */); false /* don't launch at every test */);
@Before
public void setUp() {
mContext = InstrumentationRegistry.getTargetContext();
}
@Test @Test
public void testSkipDialogIsShown() throws Throwable { public void testSkipDialogIsShown() throws Throwable {
SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null); 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)) assertThat(skipOrClearButton.getText()).isEqualTo(mContext.getString(R.string.skip_label));
.check(matches(withText(R.string.skip_label))) assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
.check(matches(isDisplayed())) skipOrClearButton.performClick();
.perform(click());
onView(withId(android.R.id.button1)).check(matches(isDisplayed())).perform(click());
assertThat(activity.isFinishing()).named("Is finishing").isTrue(); assertThat(activity.isFinishing()).named("Is finishing").isTrue();
} }
@Test @Test
public void clearNotVisible_when_activityLaunchedInitially() { public void clearIsNotShown_when_activityLaunchedInitially() {
mActivityTestRule.launchActivity(null); SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
onView(withId(R.id.clear_button)).check(matches( PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
withEffectiveVisibility(ViewMatchers.Visibility.GONE))); assertThat(layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getText())
.isEqualTo(mContext.getString(R.string.lockpassword_clear_label));
} }
@Test @Test
public void clearNotEnabled_when_nothingEntered() throws Throwable { public void clearIsNotShown_when_nothingEntered() throws Throwable {
mActivityTestRule.launchActivity(null); SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234")) onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
.perform(pressKey(KeyEvent.KEYCODE_ENTER)); .perform(pressKey(KeyEvent.KEYCODE_ENTER));
onView(withId(R.id.clear_button)).check(matches(isDisplayed())) assertThat(
.check(matches(not(isEnabled()))); layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
.isEqualTo(View.GONE);
} }
@Test @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); mActivityTestRule.launchActivity(null);
onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234")) onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
.perform(pressKey(KeyEvent.KEYCODE_ENTER)) .perform(pressKey(KeyEvent.KEYCODE_ENTER))
.perform(ViewActions.typeText("1")); .perform(ViewActions.typeText("1"));
// clear should be present if text field contains content // 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);
} }
} }