Merge "5/ Refine SetupChooseLockPattern layout by design" into tm-qpr-dev am: 66e23eb89c
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20877556 Change-Id: I1c14caa62062f58fa43ed0861d8f527ddcade3d0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -33,30 +33,29 @@
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="0dp"
|
||||
android:paddingLeft="0dp"
|
||||
android:paddingRight="0dp">
|
||||
android:paddingRight="0dp"
|
||||
android:paddingBottom="0dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/headerText"
|
||||
style="@style/SudDescription.Glif"
|
||||
android:layout_width="match_parent"
|
||||
<!-- TODO b/249974175 Move into Glif header mixin -->
|
||||
<Button
|
||||
android:id="@+id/screen_lock_options"
|
||||
style="@style/SudGlifButton.Tertiary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minLines="2"
|
||||
android:gravity="center"
|
||||
android:paddingStart="?attr/sudMarginStart"
|
||||
android:paddingEnd="?attr/sudMarginEnd"
|
||||
android:fontFamily="@*android:string/config_headlineFontFamily" />
|
||||
android:text="@string/setup_lock_settings_options_button_label"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<com.google.android.setupdesign.view.FillContentLayout
|
||||
style="@style/LockPatternContainerStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.android.internal.widget.LockPatternView
|
||||
android:id="@+id/lockPattern"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_height="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_gravity="center"/>
|
||||
|
||||
</com.google.android.setupdesign.view.FillContentLayout>
|
||||
@@ -69,13 +68,6 @@
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/screen_lock_options"
|
||||
style="@style/SudGlifButton.Tertiary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/setup_lock_settings_options_button_label"
|
||||
android:visibility="gone"/>
|
||||
</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
|
||||
|
||||
</com.google.android.setupdesign.GlifLayout>
|
||||
|
@@ -36,16 +36,13 @@
|
||||
android:paddingLeft="0dp"
|
||||
android:paddingRight="0dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/headerText"
|
||||
style="@style/SudDescription.Glif"
|
||||
android:layout_width="match_parent"
|
||||
<Button
|
||||
android:id="@+id/screen_lock_options"
|
||||
style="@style/LockPatternButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minLines="2"
|
||||
android:gravity="center"
|
||||
android:paddingStart="?attr/sudMarginStart"
|
||||
android:paddingEnd="?attr/sudMarginEnd"
|
||||
android:fontFamily="@*android:string/config_headlineFontFamily" />
|
||||
android:text="@string/setup_lock_settings_options_button_label"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<com.google.android.setupdesign.view.FillContentLayout
|
||||
style="@style/LockPatternContainerStyle"
|
||||
@@ -69,13 +66,6 @@
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/screen_lock_options"
|
||||
style="@style/SudGlifButton.Tertiary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/setup_lock_settings_options_button_label"
|
||||
android:visibility="gone"/>
|
||||
</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
|
||||
|
||||
</com.google.android.setupdesign.GlifLayout>
|
||||
|
0
res/values-land/dimens.xml
Executable file → Normal file
0
res/values-land/dimens.xml
Executable file → Normal file
@@ -21,6 +21,7 @@
|
||||
<item name="android:minHeight">@dimen/biometric_auth_pattern_view_size</item>
|
||||
<item name="android:minWidth">@dimen/biometric_auth_pattern_view_size</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:layout_gravity">bottom</item>
|
||||
<item name="android:paddingBottom">0dp</item>
|
||||
<item name="android:paddingHorizontal">0dp</item>
|
||||
<item name="android:paddingTop">0dp</item>
|
||||
|
@@ -449,6 +449,12 @@
|
||||
<item name="*android:dotColor">?android:attr/textColorSecondary</item>
|
||||
</style>
|
||||
|
||||
<style name="LockPatternButtonStyle" parent="@style/SudGlifButton.Tertiary">
|
||||
<item name="android:layout_marginStart">@dimen/sud_glif_button_margin_start</item>
|
||||
<item name="android:layout_marginEnd">@dimen/sud_glif_button_margin_end</item>
|
||||
<item name="android:layout_gravity">start|top</item>
|
||||
</style>
|
||||
|
||||
<style name="device_info_dialog_label">
|
||||
<item name="android:textAlignment">viewStart</item>
|
||||
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||
|
@@ -45,6 +45,7 @@ import com.android.settings.homepage.DeepLinkHomepageActivity;
|
||||
import com.android.settings.homepage.DeepLinkHomepageActivityInternal;
|
||||
import com.android.settings.homepage.SettingsHomepageActivity;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.password.ChooseLockPattern;
|
||||
import com.android.settingslib.users.AvatarPickerActivity;
|
||||
|
||||
import java.util.HashSet;
|
||||
@@ -232,6 +233,7 @@ public class ActivityEmbeddingRulesController {
|
||||
addActivityFilter(activityFilters, FaceEnrollIntroductionInternal.class);
|
||||
addActivityFilter(activityFilters, Settings.FaceSettingsInternalActivity.class);
|
||||
addActivityFilter(activityFilters, AvatarPickerActivity.class);
|
||||
addActivityFilter(activityFilters, ChooseLockPattern.class);
|
||||
mSplitController.registerRule(new ActivityRule(activityFilters, true /* alwaysExpand */));
|
||||
}
|
||||
|
||||
|
@@ -212,7 +212,7 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
protected LockPatternView mLockPatternView;
|
||||
protected TextView mFooterText;
|
||||
protected FooterButton mSkipOrClearButton;
|
||||
private FooterButton mNextButton;
|
||||
protected FooterButton mNextButton;
|
||||
@VisibleForTesting protected LockscreenCredential mChosenPattern;
|
||||
private ColorStateList mDefaultHeaderColorList;
|
||||
private View mSudContent;
|
||||
@@ -368,31 +368,34 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
|
||||
Introduction(
|
||||
R.string.lock_settings_picker_biometrics_added_security_message,
|
||||
R.string.lockpattern_recording_intro_header,
|
||||
R.string.lockpassword_choose_your_pattern_description,
|
||||
LeftButtonMode.Gone, RightButtonMode.ContinueDisabled,
|
||||
ID_EMPTY_MESSAGE, true),
|
||||
HelpScreen(
|
||||
ID_EMPTY_MESSAGE, R.string.lockpattern_settings_help_how_to_record,
|
||||
R.string.lockpattern_settings_help_how_to_record,
|
||||
R.string.lockpattern_settings_help_how_to_record,
|
||||
LeftButtonMode.Gone, RightButtonMode.Ok, ID_EMPTY_MESSAGE, false),
|
||||
ChoiceTooShort(
|
||||
R.string.lock_settings_picker_biometrics_added_security_message,
|
||||
R.string.lockpattern_recording_incorrect_too_short,
|
||||
R.string.lockpattern_recording_incorrect_too_short,
|
||||
LeftButtonMode.Retry, RightButtonMode.ContinueDisabled,
|
||||
ID_EMPTY_MESSAGE, true),
|
||||
FirstChoiceValid(
|
||||
R.string.lock_settings_picker_biometrics_added_security_message,
|
||||
R.string.lockpattern_pattern_entered_header,
|
||||
R.string.lockpattern_pattern_entered_header,
|
||||
LeftButtonMode.Retry, RightButtonMode.Continue, ID_EMPTY_MESSAGE, false),
|
||||
NeedToConfirm(
|
||||
ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_confirm,
|
||||
R.string.lockpattern_need_to_confirm, R.string.lockpattern_need_to_confirm,
|
||||
LeftButtonMode.Gone, RightButtonMode.ConfirmDisabled,
|
||||
ID_EMPTY_MESSAGE, true),
|
||||
ConfirmWrong(
|
||||
ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_unlock_wrong,
|
||||
R.string.lockpattern_need_to_unlock_wrong,
|
||||
R.string.lockpattern_need_to_unlock_wrong,
|
||||
LeftButtonMode.Gone, RightButtonMode.ConfirmDisabled,
|
||||
ID_EMPTY_MESSAGE, true),
|
||||
ChoiceConfirmed(
|
||||
ID_EMPTY_MESSAGE, R.string.lockpattern_pattern_confirmed_header,
|
||||
R.string.lockpattern_pattern_confirmed_header,
|
||||
R.string.lockpattern_pattern_confirmed_header,
|
||||
LeftButtonMode.Gone, RightButtonMode.Confirm, ID_EMPTY_MESSAGE, false);
|
||||
|
||||
|
||||
@@ -549,7 +552,9 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
mHeaderText = (TextView) view.findViewById(R.id.headerText);
|
||||
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
|
||||
mHeaderText = layout.getDescriptionTextView();
|
||||
mHeaderText.setMinLines(2);
|
||||
mDefaultHeaderColorList = mHeaderText.getTextColors();
|
||||
mLockPatternView = (LockPatternView) view.findViewById(R.id.lockPattern);
|
||||
mLockPatternView.setOnPatternListener(mChooseNewLockPatternListener);
|
||||
@@ -724,30 +729,24 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
*/
|
||||
protected void updateStage(Stage stage) {
|
||||
final Stage previousStage = mUiStage;
|
||||
|
||||
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
|
||||
mUiStage = stage;
|
||||
|
||||
if (stage == Stage.Introduction) {
|
||||
layout.setDescriptionText(stage.headerMessage);
|
||||
}
|
||||
|
||||
// header text, footer text, visibility and
|
||||
// enabled state all known from the stage
|
||||
if (stage == Stage.ChoiceTooShort) {
|
||||
mHeaderText.setText(
|
||||
layout.setDescriptionText(
|
||||
getResources().getString(
|
||||
stage.headerMessage,
|
||||
LockPatternUtils.MIN_LOCK_PATTERN_SIZE));
|
||||
} else {
|
||||
mHeaderText.setText(stage.headerMessage);
|
||||
}
|
||||
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
|
||||
final boolean forAnyBiometric = mForFingerprint || mForFace || mForBiometrics;
|
||||
if (forAnyBiometric) {
|
||||
if (stage.messageForBiometrics == ID_EMPTY_MESSAGE) {
|
||||
layout.setDescriptionText("");
|
||||
} else {
|
||||
layout.setDescriptionText(stage.messageForBiometrics);
|
||||
}
|
||||
} else {
|
||||
layout.getDescriptionTextView().setVisibility(View.GONE);
|
||||
layout.setDescriptionText(stage.headerMessage);
|
||||
}
|
||||
|
||||
if (stage.footerMessage == ID_EMPTY_MESSAGE) {
|
||||
mFooterText.setText("");
|
||||
} else {
|
||||
@@ -765,8 +764,8 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
mHeaderText.setTextColor(mDefaultHeaderColorList);
|
||||
}
|
||||
|
||||
if (stage == Stage.NeedToConfirm && forAnyBiometric) {
|
||||
mHeaderText.setText("");
|
||||
if (stage == Stage.NeedToConfirm) {
|
||||
mHeaderText.setText(stage.headerMessage);
|
||||
layout.setHeaderText(R.string.lockpassword_draw_your_pattern_again_header);
|
||||
}
|
||||
}
|
||||
@@ -796,6 +795,7 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
mLockPatternView.setPattern(DisplayMode.Animate, mAnimatePattern);
|
||||
break;
|
||||
case ChoiceTooShort:
|
||||
case ConfirmWrong:
|
||||
mLockPatternView.setDisplayMode(DisplayMode.Wrong);
|
||||
postClearPatternRunnable();
|
||||
announceAlways = true;
|
||||
@@ -805,11 +805,6 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
case NeedToConfirm:
|
||||
mLockPatternView.clearPattern();
|
||||
break;
|
||||
case ConfirmWrong:
|
||||
mLockPatternView.setDisplayMode(DisplayMode.Wrong);
|
||||
postClearPatternRunnable();
|
||||
announceAlways = true;
|
||||
break;
|
||||
case ChoiceConfirmed:
|
||||
break;
|
||||
}
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.password;
|
||||
|
||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@@ -30,8 +32,6 @@ import androidx.fragment.app.Fragment;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SetupRedactionInterstitial;
|
||||
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
|
||||
/**
|
||||
* Setup Wizard's version of ChooseLockPattern screen. It inherits the logic and basic structure
|
||||
* from ChooseLockPattern class, and should remain similar to that behaviorally. This class should
|
||||
@@ -123,15 +123,25 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
|
||||
startChooseLockActivity(lock, getActivity());
|
||||
}
|
||||
|
||||
private boolean showMinimalUi() {
|
||||
return getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStage(Stage stage) {
|
||||
super.updateStage(stage);
|
||||
if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)
|
||||
&& mOptionsButton != null) {
|
||||
if (!showMinimalUi() && mOptionsButton != null) {
|
||||
// In landscape, keep view stub to avoid pattern view shifting, but in portrait the
|
||||
// header title and description could become multiple lines in confirm stage,
|
||||
// gone the button view to reserve more room for growth height of header.
|
||||
@View.Visibility
|
||||
final int hideOrGone =
|
||||
getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE
|
||||
? View.INVISIBLE : View.GONE;
|
||||
mOptionsButton.setVisibility(
|
||||
(stage == Stage.Introduction || stage == Stage.HelpScreen ||
|
||||
stage == Stage.ChoiceTooShort || stage == Stage.FirstChoiceValid)
|
||||
? View.VISIBLE : View.INVISIBLE);
|
||||
? View.VISIBLE : hideOrGone);
|
||||
}
|
||||
|
||||
if (stage.leftMode == LeftButtonMode.Gone && stage == Stage.Introduction) {
|
||||
@@ -141,10 +151,6 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
|
||||
} else {
|
||||
mLeftButtonIsSkip = false;
|
||||
}
|
||||
|
||||
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
|
||||
layout.setDescriptionText(
|
||||
getString(R.string.lockpassword_choose_your_pattern_description));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -24,7 +24,9 @@ import static org.robolectric.RuntimeEnvironment.application;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.UserHandle;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
@@ -32,6 +34,7 @@ import android.widget.TextView;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.internal.widget.LockPatternView;
|
||||
import com.android.internal.widget.LockPatternView.Cell;
|
||||
import com.android.internal.widget.LockPatternView.DisplayMode;
|
||||
@@ -45,6 +48,7 @@ import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
|
||||
import com.google.android.setupcompat.PartnerCustomizationLayout;
|
||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||
import com.google.android.setupcompat.template.FooterButton;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -94,11 +98,11 @@ public class SetupChooseLockPatternTest {
|
||||
|
||||
@Test
|
||||
public void optionsButton_whenPatternSelected_shouldBeVisible() {
|
||||
Button button = mActivity.findViewById(R.id.screen_lock_options);
|
||||
final Button button = mActivity.findViewById(R.id.screen_lock_options);
|
||||
assertThat(button).isNotNull();
|
||||
assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
LockPatternView lockPatternView = mActivity.findViewById(R.id.lockPattern);
|
||||
final LockPatternView lockPatternView = mActivity.findViewById(R.id.lockPattern);
|
||||
ReflectionHelpers.callInstanceMethod(lockPatternView, "notifyPatternDetected");
|
||||
|
||||
enterPattern();
|
||||
@@ -106,12 +110,12 @@ public class SetupChooseLockPatternTest {
|
||||
}
|
||||
|
||||
private void verifyScreenLockOptionsShown() {
|
||||
Button button = mActivity.findViewById(R.id.screen_lock_options);
|
||||
final Button button = mActivity.findViewById(R.id.screen_lock_options);
|
||||
assertThat(button).isNotNull();
|
||||
assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
button.performClick();
|
||||
AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
final AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(chooserDialog).isNotNull();
|
||||
int count = chooserDialog.getListView().getCount();
|
||||
assertWithMessage("List items shown").that(count).isEqualTo(3);
|
||||
@@ -149,9 +153,10 @@ public class SetupChooseLockPatternTest {
|
||||
|
||||
@Test
|
||||
public void skipButton_shouldBeVisible_duringNonFingerprintFlow() {
|
||||
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final Button skipOrClearButton =
|
||||
layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
|
||||
|
||||
assertThat(skipOrClearButton).isNotNull();
|
||||
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
@@ -164,29 +169,31 @@ public class SetupChooseLockPatternTest {
|
||||
public void clearButton_shouldBeVisible_duringRetryStage() {
|
||||
enterPattern();
|
||||
|
||||
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final Button skipOrClearButton =
|
||||
layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
|
||||
|
||||
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(skipOrClearButton.isEnabled()).isTrue();
|
||||
|
||||
skipOrClearButton.performClick();
|
||||
|
||||
assertThat(findFragment(mActivity).mChosenPattern).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createActivity_enterPattern_clearButtonShouldBeShown() {
|
||||
ChooseLockPatternFragment fragment = findFragment(mActivity);
|
||||
|
||||
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final Button skipOrClearButton =
|
||||
layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
|
||||
|
||||
assertThat(skipOrClearButton.isEnabled()).isTrue();
|
||||
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(skipOrClearButton.getText())
|
||||
.isEqualTo(application.getString(R.string.skip_label));
|
||||
|
||||
enterPattern();
|
||||
|
||||
assertThat(skipOrClearButton.isEnabled()).isTrue();
|
||||
assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(skipOrClearButton.getText())
|
||||
@@ -195,8 +202,7 @@ public class SetupChooseLockPatternTest {
|
||||
|
||||
@Test
|
||||
public void createActivity_patternDescription_shouldBeShown() {
|
||||
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView patternDescription =
|
||||
layout.findViewById(R.id.sud_layout_subtitle);
|
||||
|
||||
@@ -205,6 +211,140 @@ public class SetupChooseLockPatternTest {
|
||||
application.getString(R.string.lockpassword_choose_your_pattern_description));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inIntroductionStage_theHeaderHeight_shouldSetMinLinesTwoToPreventFlicker() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpassword_choose_your_pattern_description));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createActivity_enterPattern_shouldGoToFirstChoiceValidStage() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
enterPattern();
|
||||
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_pattern_entered_header));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createActivity_enterShortPattern_shouldGoToChoiceTooShortStage() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
|
||||
enterShortPattern();
|
||||
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getResources().getString(
|
||||
R.string.lockpattern_recording_incorrect_too_short,
|
||||
LockPatternUtils.MIN_LOCK_PATTERN_SIZE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inChoiceTooShortStage_theHeaderColor_shouldTintOnErrorColor() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
final TypedValue typedValue = new TypedValue();
|
||||
final Resources.Theme theme = mActivity.getTheme();
|
||||
theme.resolveAttribute(R.attr.colorError, typedValue, true);
|
||||
final int errorColor = typedValue.data;
|
||||
|
||||
enterShortPattern();
|
||||
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(headerView.getTextColors().getDefaultColor()).isEqualTo(errorColor);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inFirstChoiceValidStage_nextButtonState_shouldEnabled() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final FooterBarMixin footerBarMixin = layout.getMixin(FooterBarMixin.class);
|
||||
final FooterButton nextButton = footerBarMixin.getPrimaryButton();
|
||||
|
||||
assertThat(nextButton.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(nextButton.isEnabled()).isFalse();
|
||||
|
||||
enterPattern();
|
||||
|
||||
assertThat(nextButton.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inFirstChoiceValidStage_clickNextButton_shouldGoToNeedToConfirmStage() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
final FooterBarMixin footerBarMixin = layout.getMixin(FooterBarMixin.class);
|
||||
final Button nextButton = footerBarMixin.getPrimaryButtonView();
|
||||
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
enterPattern();
|
||||
nextButton.performClick();
|
||||
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_need_to_confirm));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inNeedToConfirmStage_enterWrongPattern_shouldGoToConfirmWrongStage() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
final FooterBarMixin footerBarMixin = layout.getMixin(FooterBarMixin.class);
|
||||
final Button nextButton = footerBarMixin.getPrimaryButtonView();
|
||||
// IntroductionStage
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
enterPattern();
|
||||
nextButton.performClick();
|
||||
|
||||
// NeedToConfirmStage
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_need_to_confirm));
|
||||
|
||||
enterShortPattern();
|
||||
|
||||
// ConfirmWrongStage
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_need_to_unlock_wrong));
|
||||
assertThat(nextButton.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_confirm_button_text));
|
||||
assertThat(nextButton.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inNeedToConfirmStage_enterCorrectPattern_shouldGoToChoiceConfirmedStage() {
|
||||
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
|
||||
final TextView headerView = layout.findViewById(R.id.sud_layout_subtitle);
|
||||
final FooterBarMixin footerBarMixin = layout.getMixin(FooterBarMixin.class);
|
||||
final Button nextButton = footerBarMixin.getPrimaryButtonView();
|
||||
// IntroductionStage
|
||||
assertThat(headerView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
enterPattern();
|
||||
nextButton.performClick();
|
||||
|
||||
// NeedToConfirmStage
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_need_to_confirm));
|
||||
|
||||
enterPattern();
|
||||
|
||||
// ChoiceConfirmedStage
|
||||
assertThat(headerView.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_pattern_confirmed_header));
|
||||
assertThat(nextButton.getText().toString()).isEqualTo(
|
||||
application.getString(R.string.lockpattern_confirm_button_text));
|
||||
assertThat(nextButton.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
private ChooseLockPatternFragment findFragment(FragmentActivity activity) {
|
||||
return (ChooseLockPatternFragment)
|
||||
activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
|
||||
@@ -222,6 +362,17 @@ public class SetupChooseLockPatternTest {
|
||||
ReflectionHelpers.callInstanceMethod(lockPatternView, "notifyPatternDetected");
|
||||
}
|
||||
|
||||
private void enterShortPattern() {
|
||||
LockPatternView lockPatternView = mActivity.findViewById(R.id.lockPattern);
|
||||
lockPatternView.setPattern(
|
||||
DisplayMode.Animate,
|
||||
Arrays.asList(
|
||||
createCell(0, 0),
|
||||
createCell(0, 1),
|
||||
createCell(1, 1)));
|
||||
ReflectionHelpers.callInstanceMethod(lockPatternView, "notifyPatternDetected");
|
||||
}
|
||||
|
||||
private Cell createCell(int row, int column) {
|
||||
return ReflectionHelpers.callConstructor(
|
||||
Cell.class,
|
||||
|
Reference in New Issue
Block a user