Improve pattern layout for tiiiny screens

On small screens < sw400dp,
- Don't show icon
- Don't show "Screen lock options" button

Test: cd tests/robotests && mma
Bug: 72764729
Change-Id: I8d9863d43c877fcc18f504d91d3183760b3fafc2
This commit is contained in:
Maurice Lam
2018-02-14 16:02:33 -08:00
parent bee1a6d990
commit 212dd952a1
9 changed files with 58 additions and 22 deletions

View File

@@ -42,7 +42,7 @@
<ImageView <ImageView
android:id="@+id/suw_layout_icon" android:id="@+id/suw_layout_icon"
style="@style/LockPatternIconStyle" style="@style/SuwGlifIcon"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_lock" /> android:src="@drawable/ic_lock" />
@@ -73,6 +73,7 @@
style="@style/SuwDescription.Glif" style="@style/SuwDescription.Glif"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="?attr/suwMarginSides"
android:minLines="2" /> android:minLines="2" />
<TextView android:id="@+id/headerText" <TextView android:id="@+id/headerText"

View File

@@ -34,7 +34,7 @@
<ImageView <ImageView
android:id="@+id/suw_layout_icon" android:id="@+id/suw_layout_icon"
style="@style/LockPatternIconStyle" style="@style/SuwGlifIcon"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="?attr/suwGlifHeaderGravity" android:layout_gravity="?attr/suwGlifHeaderGravity"

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2017 The Android Open Source Project Copyright (C) 2018 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@@ -17,7 +17,9 @@
<resources> <resources>
<!-- Unhide the icon on bigger screens --> <!-- Whether to use a UI variant that minimizes the number of UI elements on screen. This is
<style name="LockPatternIconStyle" parent="SuwGlifIcon" /> typically used when there is not enough space to display everything, because pattern view
doesn't interact well with scroll view -->
<bool name="config_lock_pattern_minimal_ui">false</bool>
</resources> </resources>

View File

@@ -122,4 +122,10 @@
<!-- Whether or not new device intro suggestion is supported for this device --> <!-- Whether or not new device intro suggestion is supported for this device -->
<bool name="config_new_device_intro_suggestion_supported">false</bool> <bool name="config_new_device_intro_suggestion_supported">false</bool>
<!-- Whether to use a UI variant that minimizes the number of UI elements on screen. This is
typically used when there is not enough space to display everything, because pattern view
doesn't interact well with scroll view -->
<bool name="config_lock_pattern_minimal_ui">true</bool>
</resources> </resources>

View File

@@ -457,11 +457,6 @@
<item name="*android:successColor">@color/setup_lock_pattern_view_success_color_light</item> <item name="*android:successColor">@color/setup_lock_pattern_view_success_color_light</item>
</style> </style>
<!-- Overridden in sw400dp -->
<style name="LockPatternIconStyle" parent="SuwGlifIcon">
<item name="android:visibility">gone</item>
</style>
<style name="SuggestionConditionStyle"> <style name="SuggestionConditionStyle">
<item name="android:background">@color/suggestion_condition_background</item> <item name="android:background">@color/suggestion_condition_background</item>
</style> </style>

View File

@@ -452,8 +452,15 @@ public class ChooseLockPattern extends SettingsActivity {
final GlifLayout layout = (GlifLayout) inflater.inflate( final GlifLayout layout = (GlifLayout) inflater.inflate(
R.layout.choose_lock_pattern, container, false); R.layout.choose_lock_pattern, container, false);
layout.setHeaderText(getActivity().getTitle()); layout.setHeaderText(getActivity().getTitle());
if (mForFingerprint) { if (getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
layout.setIcon(getActivity().getDrawable(R.drawable.ic_fingerprint_header)); View iconView = layout.findViewById(R.id.suw_layout_icon);
if (iconView != null) {
iconView.setVisibility(View.GONE);
}
} else {
if (mForFingerprint) {
layout.setIcon(getActivity().getDrawable(R.drawable.ic_fingerprint_header));
}
} }
return layout; return layout;
} }

View File

@@ -57,11 +57,13 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
Button optionsButton = (Button) view.findViewById(R.id.screen_lock_options); if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
optionsButton.setVisibility(View.VISIBLE); Button optionsButton = view.findViewById(R.id.screen_lock_options);
optionsButton.setOnClickListener((btn) -> optionsButton.setVisibility(View.VISIBLE);
ChooseLockTypeDialogFragment.newInstance(mUserId) optionsButton.setOnClickListener((btn) ->
.show(getChildFragmentManager(), null)); ChooseLockTypeDialogFragment.newInstance(mUserId)
.show(getChildFragmentManager(), null));
}
} }
@Override @Override

View File

@@ -22,6 +22,7 @@ import static org.robolectric.RuntimeEnvironment.application;
import android.content.Intent; import android.content.Intent;
import android.os.UserHandle; import android.os.UserHandle;
import android.view.View;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
@@ -102,15 +103,27 @@ public class ChooseLockPatternTest {
.isEqualTo(123); .isEqualTo(123);
} }
@Config(qualifiers = "sw400dp")
@Test @Test
public void assertThat_chooseLockIconChanged_WhenFingerprintExtraSet() { public void fingerprintExtraSet_shouldDisplayFingerprintIcon() {
ChooseLockPattern activity = createActivity(true); ChooseLockPattern activity = createActivity(true);
ChooseLockPatternFragment fragment = (ChooseLockPatternFragment) ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
activity.getFragmentManager().findFragmentById(R.id.main_content); activity.getFragmentManager().findFragmentById(R.id.main_content);
ShadowDrawable drawable = Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon()); ShadowDrawable drawable = Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon());
assertThat(drawable.getCreatedFromResId()).isEqualTo(R.drawable.ic_fingerprint_header); assertThat(drawable.getCreatedFromResId()).isEqualTo(R.drawable.ic_fingerprint_header);
} }
@Test
public void smallScreens_shouldHideIcon() {
ChooseLockPattern activity = createActivity(true);
ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
activity.getFragmentManager().findFragmentById(R.id.main_content);
View iconView = fragment.getView().findViewById(R.id.suw_layout_icon);
assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
}
private ChooseLockPattern createActivity(boolean addFingerprintExtra) { private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
return Robolectric.buildActivity( return Robolectric.buildActivity(
ChooseLockPattern.class, ChooseLockPattern.class,

View File

@@ -14,7 +14,7 @@
* limitations under the License * limitations under the License
*/ */
package com.android.settings; package com.android.settings.password;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -28,9 +28,11 @@ import android.os.UserHandle;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import com.android.settings.R;
import com.android.settings.SetupRedactionInterstitial;
import com.android.settings.TestConfig;
import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment; import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment;
import com.android.settings.password.ChooseLockPattern.IntentBuilder; import com.android.settings.password.ChooseLockPattern.IntentBuilder;
import com.android.settings.password.SetupChooseLockPattern;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
@@ -89,8 +91,9 @@ public class SetupChooseLockPatternTest {
.isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); .isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
} }
@Config(qualifiers = "sw400dp")
@Test @Test
public void screenLockOptions_shouldBeVisible() { public void sw400dp_shouldShowScreenLockOptions() {
Button button = mActivity.findViewById(R.id.screen_lock_options); Button button = mActivity.findViewById(R.id.screen_lock_options);
assertThat(button).isNotNull(); assertThat(button).isNotNull();
assertThat(button.getVisibility()).isEqualTo(View.VISIBLE); assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
@@ -102,6 +105,13 @@ public class SetupChooseLockPatternTest {
assertThat(count).named("List items shown").isEqualTo(3); assertThat(count).named("List items shown").isEqualTo(3);
} }
@Test
public void smallScreens_shouldHideScreenLockOptions() {
Button button = mActivity.findViewById(R.id.screen_lock_options);
assertThat(button).isNotNull();
assertThat(button.getVisibility()).isEqualTo(View.GONE);
}
@Test @Test
public void skipButton_shouldBeVisible_duringNonFingerprintFlow() { public void skipButton_shouldBeVisible_duringNonFingerprintFlow() {
Button button = mActivity.findViewById(R.id.footerLeftButton); Button button = mActivity.findViewById(R.id.footerLeftButton);