diff --git a/res/layout-land/choose_lock_pattern_common.xml b/res/layout-land/choose_lock_pattern_common.xml
index 2913c5a8166..e4404615127 100644
--- a/res/layout-land/choose_lock_pattern_common.xml
+++ b/res/layout-land/choose_lock_pattern_common.xml
@@ -38,15 +38,6 @@
android:paddingRight="0dp"
android:paddingBottom="0dp">
-
-
-
-
-
-
-
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index 774f5cdc5ef..ddfa046f927 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -36,14 +36,6 @@
android:paddingLeft="0dp"
android:paddingRight="0dp">
-
-
200dp
+
+ 16dp
+
+
+ 32dp
+
+
+ 16sp
+
20dp
12dp
diff --git a/res/values/ids.xml b/res/values/ids.xml
index c1cfe2eee96..efd1791d5ed 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -40,4 +40,8 @@
+
+
+
+
diff --git a/res/values/styles.xml b/res/values/styles.xml
index fe152266f9e..ee78a45d066 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -947,4 +947,10 @@
- @color/udfps_enroll_progress_help
- @color/udfps_enroll_progress_help_with_talkback
+
+
+
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 16c4f5bb1ab..1bd3618f7be 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -74,9 +74,11 @@ import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.CheckBox;
import android.widget.ImeAwareEditText;
+import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -517,7 +519,9 @@ public class ChooseLockPassword extends SettingsActivity {
|| DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == mPasswordType
|| DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == mPasswordType;
- setupPasswordRequirementsView(view);
+ final LinearLayout headerLayout = view.findViewById(
+ R.id.sud_layout_header);
+ setupPasswordRequirementsView(headerLayout);
mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity()));
mPasswordEntry = view.findViewById(R.id.password_entry);
@@ -626,11 +630,33 @@ public class ChooseLockPassword extends SettingsActivity {
}
}
- private void setupPasswordRequirementsView(View view) {
- mPasswordRestrictionView = view.findViewById(R.id.password_requirements_view);
+ private void setupPasswordRequirementsView(@Nullable ViewGroup view) {
+ if (view == null) {
+ return;
+ }
+
+ createHintMessageView(view);
mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity()));
- mPasswordRequirementAdapter = new PasswordRequirementAdapter();
+ mPasswordRequirementAdapter = new PasswordRequirementAdapter(getActivity());
mPasswordRestrictionView.setAdapter(mPasswordRequirementAdapter);
+ view.addView(mPasswordRestrictionView);
+ }
+
+ private void createHintMessageView(ViewGroup view) {
+ if (mPasswordRestrictionView != null) {
+ return;
+ }
+
+ final TextView sucTitleView = view.findViewById(R.id.suc_layout_title);
+ final ViewGroup.MarginLayoutParams titleLayoutParams =
+ (ViewGroup.MarginLayoutParams) sucTitleView.getLayoutParams();
+ mPasswordRestrictionView = new RecyclerView(getActivity());
+ final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ lp.setMargins(titleLayoutParams.leftMargin, getResources().getDimensionPixelSize(
+ R.dimen.password_requirement_view_margin_top), titleLayoutParams.leftMargin, 0);
+ mPasswordRestrictionView.setLayoutParams(lp);
}
@Override
diff --git a/src/com/android/settings/password/PasswordRequirementAdapter.java b/src/com/android/settings/password/PasswordRequirementAdapter.java
index 0e194afca16..a4d349ebbfa 100644
--- a/src/com/android/settings/password/PasswordRequirementAdapter.java
+++ b/src/com/android/settings/password/PasswordRequirementAdapter.java
@@ -16,6 +16,7 @@
package com.android.settings.password;
+import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -31,9 +32,12 @@ import com.android.settings.password.PasswordRequirementAdapter.PasswordRequirem
*/
public class PasswordRequirementAdapter extends
RecyclerView.Adapter {
- private String[] mRequirements;
- public PasswordRequirementAdapter() {
+ private String[] mRequirements;
+ private Context mContext;
+
+ public PasswordRequirementAdapter(Context context) {
+ mContext = context;
setHasStableIds(true);
}
@@ -61,7 +65,12 @@ public class PasswordRequirementAdapter extends
@Override
public void onBindViewHolder(PasswordRequirementViewHolder holder, int position) {
+ final int fontSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.password_requirement_font_size);
holder.mDescriptionText.setText(mRequirements[position]);
+ holder.mDescriptionText.setTextAppearance(R.style.ScreenLockPasswordHintTextFontStyle);
+ holder.mDescriptionText.setTextSize(fontSize / mContext.getResources()
+ .getDisplayMetrics().scaledDensity);
}
public static class PasswordRequirementViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/com/android/settings/password/PasswordUtils.java b/src/com/android/settings/password/PasswordUtils.java
index e8e309c40ec..a7edc891f3f 100644
--- a/src/com/android/settings/password/PasswordUtils.java
+++ b/src/com/android/settings/password/PasswordUtils.java
@@ -27,7 +27,13 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import com.android.settings.R;
import com.android.settings.Utils;
public final class PasswordUtils extends com.android.settingslib.Utils {
@@ -97,4 +103,25 @@ public final class PasswordUtils extends com.android.settingslib.Utils {
Log.v(TAG, "Could not talk to activity manager.", e);
}
}
+
+ /** Setup screen lock options button under the Glif Header. */
+ public static void setupScreenLockOptionsButton(Context context, View view, Button optButton) {
+ final LinearLayout headerLayout = view.findViewById(
+ R.id.sud_layout_header);
+ final TextView sucTitleView = headerLayout.findViewById(R.id.suc_layout_title);
+ if (headerLayout != null && sucTitleView != null) {
+ final ViewGroup.MarginLayoutParams layoutTitleParams =
+ (ViewGroup.MarginLayoutParams) sucTitleView.getLayoutParams();
+ final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ lp.leftMargin = layoutTitleParams.leftMargin;
+ lp.topMargin = (int) context.getResources().getDimensionPixelSize(
+ R.dimen.screen_lock_options_button_margin_top);
+ optButton.setPadding(0, 0, 0, 0);
+ optButton.setLayoutParams(lp);
+ optButton.setText(context.getString(R.string.setup_lock_settings_options_button_label));
+ headerLayout.addView(optButton);
+ }
+ }
}
diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 0101aa5c29f..d0d7d93fcf7 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
+import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.Button;
@@ -97,7 +98,10 @@ public class SetupChooseLockPassword extends ChooseLockPassword {
}
if (showOptionsButton && anyOptionsShown) {
- mOptionsButton = view.findViewById(R.id.screen_lock_options);
+ mOptionsButton = new Button(new ContextThemeWrapper(getActivity(),
+ R.style.SudGlifButton_Tertiary));
+ mOptionsButton.setId(R.id.screen_lock_options);
+ PasswordUtils.setupScreenLockOptionsButton(getActivity(), view, mOptionsButton);
mOptionsButton.setVisibility(View.VISIBLE);
mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId)
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 2cad1813568..560906da03b 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -23,6 +23,7 @@ import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTE
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -83,7 +84,10 @@ public class SetupChooseLockPattern extends ChooseLockPattern {
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
- mOptionsButton = view.findViewById(R.id.screen_lock_options);
+ mOptionsButton = new Button(new ContextThemeWrapper(getActivity(),
+ R.style.SudGlifButton_Tertiary));
+ mOptionsButton.setId(R.id.screen_lock_options);
+ PasswordUtils.setupScreenLockOptionsButton(getActivity(), view, mOptionsButton);
mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId)
.show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index a3e2ed49591..8bccf1aa4da 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -26,6 +26,7 @@ import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
+import android.widget.LinearLayout;
import androidx.appcompat.app.AlertDialog;
@@ -106,6 +107,20 @@ public class SetupChooseLockPasswordTest {
assertThat(ShadowDialog.getLatestDialog()).isNotNull();
}
+ @Test
+ public void createActivity_withShowOptionsButtonExtra_shouldShowButtonUnderSudHeader() {
+ SetupChooseLockPassword activity = createSetupChooseLockPassword();
+ final LinearLayout headerLayout = activity.findViewById(
+ R.id.sud_layout_header);
+ assertThat(headerLayout).isNotNull();
+
+ final Button optionsButton = headerLayout.findViewById(R.id.screen_lock_options);
+ assertThat(optionsButton).isNotNull();
+
+ optionsButton.performClick();
+ assertThat(ShadowDialog.getLatestDialog()).isNotNull();
+ }
+
@Test
@Config(shadows = ShadowChooseLockGenericController.class)
public void createActivity_withShowOptionsButtonExtra_buttonNotVisibleIfNoVisibleLockTypes() {