1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.password; 18 19 import android.content.Context; 20 import android.view.LayoutInflater; 21 import android.view.View; 22 import android.view.ViewGroup; 23 import android.view.accessibility.AccessibilityNodeInfo; 24 import android.widget.TextView; 25 26 import androidx.recyclerview.widget.RecyclerView; 27 28 import com.android.settings.R; 29 import com.android.settings.password.PasswordRequirementAdapter.PasswordRequirementViewHolder; 30 31 /** 32 * Used in {@link ChooseLockPassword} to show password requirements. 33 */ 34 public class PasswordRequirementAdapter extends 35 RecyclerView.Adapter<PasswordRequirementViewHolder> { 36 37 private String[] mRequirements; 38 private Context mContext; 39 private boolean mIsTooShortError = true; 40 PasswordRequirementAdapter(Context context)41 public PasswordRequirementAdapter(Context context) { 42 mContext = context; 43 setHasStableIds(true); 44 } 45 46 @Override onCreateViewHolder(ViewGroup parent, int viewType)47 public PasswordRequirementViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 48 View v = LayoutInflater.from(parent.getContext()) 49 .inflate(R.layout.password_requirement_item, parent, false); 50 return new PasswordRequirementViewHolder(v); 51 } 52 53 @Override getItemCount()54 public int getItemCount() { 55 return mRequirements.length; 56 } 57 setRequirements(String[] requirements, boolean isPasswordShort)58 public void setRequirements(String[] requirements, boolean isPasswordShort) { 59 mRequirements = requirements; 60 mIsTooShortError = isPasswordShort; 61 notifyDataSetChanged(); 62 } 63 64 @Override getItemId(int position)65 public long getItemId(int position) { 66 return mRequirements[position].hashCode(); 67 } 68 69 @Override onBindViewHolder(PasswordRequirementViewHolder holder, int position)70 public void onBindViewHolder(PasswordRequirementViewHolder holder, int position) { 71 final int fontSize = mContext.getResources().getDimensionPixelSize( 72 R.dimen.password_requirement_font_size); 73 74 final String requirement = mRequirements[position]; 75 holder.mDescriptionText.setAccessibilityDelegate(new View.AccessibilityDelegate() { 76 @Override 77 public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { 78 super.onInitializeAccessibilityNodeInfo(host, info); 79 holder.mDescriptionText.setStateDescription(requirement); 80 } 81 }); 82 83 holder.mDescriptionText.setText(mRequirements[position]); 84 if (mIsTooShortError) { 85 holder.mDescriptionText.setTextAppearance(R.style.ScreenLockPasswordHintTextFontStyle); 86 } else { 87 holder.mDescriptionText. 88 setTextAppearance(R.style.ScreenLockPasswordHintTextFontStyleError); 89 } 90 holder.mDescriptionText.setTextSize(fontSize / mContext.getResources() 91 .getDisplayMetrics().scaledDensity); 92 } 93 94 public static class PasswordRequirementViewHolder extends RecyclerView.ViewHolder { 95 private TextView mDescriptionText; 96 PasswordRequirementViewHolder(View itemView)97 public PasswordRequirementViewHolder(View itemView) { 98 super(itemView); 99 mDescriptionText = (TextView) itemView; 100 } 101 } 102 103 } 104