1fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue/* 2fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * Copyright (C) 2017 The Android Open Source Project 3fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * 4fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * Licensed under the Apache License, Version 2.0 (the "License"); 5fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * you may not use this file except in compliance with the License. 6fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * You may obtain a copy of the License at 7fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * 8fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * http://www.apache.org/licenses/LICENSE-2.0 9fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * 10fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * Unless required by applicable law or agreed to in writing, software 11fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * distributed under the License is distributed on an "AS IS" BASIS, 12fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * See the License for the specific language governing permissions and 14fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * limitations under the License 15fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue */ 16fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 17fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xuepackage com.android.car.settings.common; 18fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 19664ed2dc2488c50194a80004af759a765f0ce18froger xueimport android.support.annotation.Nullable; 20fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.support.v7.widget.RecyclerView; 21fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.text.Editable; 22664ed2dc2488c50194a80004af759a765f0ce18froger xueimport android.text.InputType; 23fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.text.TextWatcher; 24fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.view.LayoutInflater; 25fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.view.View; 26fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.view.ViewGroup; 27fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.widget.EditText; 28fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport android.widget.TextView; 29fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 30fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xueimport com.android.car.settings.R; 31fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 32fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue/** 33fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue * Contains logic for a line item represents text only view of a title and a EditText as input. 34fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue */ 35664ed2dc2488c50194a80004af759a765f0ce18froger xuepublic class EditTextLineItem<VH extends EditTextLineItem.ViewHolder> 36664ed2dc2488c50194a80004af759a765f0ce18froger xue extends TypedPagedListAdapter.LineItem<VH> { 37fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue private final CharSequence mTitle; 38664ed2dc2488c50194a80004af759a765f0ce18froger xue private final CharSequence mInitialInputText; 39fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 40fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public interface TextChangeListener { 41664ed2dc2488c50194a80004af759a765f0ce18froger xue 42fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue void textChanged(Editable s); 43fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 44fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 45fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue private TextChangeListener mTextChangeListener; 46664ed2dc2488c50194a80004af759a765f0ce18froger xue private EditText mEditText; 47664ed2dc2488c50194a80004af759a765f0ce18froger xue protected TextType mTextType = TextType.NONE; 48664ed2dc2488c50194a80004af759a765f0ce18froger xue 49664ed2dc2488c50194a80004af759a765f0ce18froger xue public enum TextType { 50664ed2dc2488c50194a80004af759a765f0ce18froger xue // None editable text 51664ed2dc2488c50194a80004af759a765f0ce18froger xue NONE(0), 52664ed2dc2488c50194a80004af759a765f0ce18froger xue // text input 53664ed2dc2488c50194a80004af759a765f0ce18froger xue TEXT(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL), 54664ed2dc2488c50194a80004af759a765f0ce18froger xue // password, input is replaced by dot 55664ed2dc2488c50194a80004af759a765f0ce18froger xue HIDDEN_PASSWORD(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD), 56664ed2dc2488c50194a80004af759a765f0ce18froger xue // password, visible. 57664ed2dc2488c50194a80004af759a765f0ce18froger xue VISIBLE_PASSWORD( 58664ed2dc2488c50194a80004af759a765f0ce18froger xue InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 59664ed2dc2488c50194a80004af759a765f0ce18froger xue 60664ed2dc2488c50194a80004af759a765f0ce18froger xue private int mValue; 61664ed2dc2488c50194a80004af759a765f0ce18froger xue 62664ed2dc2488c50194a80004af759a765f0ce18froger xue TextType(int value) { 63664ed2dc2488c50194a80004af759a765f0ce18froger xue mValue = value; 64664ed2dc2488c50194a80004af759a765f0ce18froger xue } 65664ed2dc2488c50194a80004af759a765f0ce18froger xue 66664ed2dc2488c50194a80004af759a765f0ce18froger xue public int getValue() { 67664ed2dc2488c50194a80004af759a765f0ce18froger xue return mValue; 68664ed2dc2488c50194a80004af759a765f0ce18froger xue } 69664ed2dc2488c50194a80004af759a765f0ce18froger xue } 70664ed2dc2488c50194a80004af759a765f0ce18froger xue 71664ed2dc2488c50194a80004af759a765f0ce18froger xue public EditTextLineItem(CharSequence title) { 72664ed2dc2488c50194a80004af759a765f0ce18froger xue this(title, null); 73664ed2dc2488c50194a80004af759a765f0ce18froger xue } 74fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 75fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public EditTextLineItem(CharSequence title, CharSequence initialInputText) { 76fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue mTitle = title; 77664ed2dc2488c50194a80004af759a765f0ce18froger xue mInitialInputText = initialInputText; 78664ed2dc2488c50194a80004af759a765f0ce18froger xue } 79664ed2dc2488c50194a80004af759a765f0ce18froger xue 80664ed2dc2488c50194a80004af759a765f0ce18froger xue public void setTextType(TextType textType) { 81664ed2dc2488c50194a80004af759a765f0ce18froger xue mTextType = textType; 82fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 83fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 84fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public void setTextChangeListener(TextChangeListener listener) { 85fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue mTextChangeListener = listener; 86fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 87fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 88664ed2dc2488c50194a80004af759a765f0ce18froger xue @Nullable 89664ed2dc2488c50194a80004af759a765f0ce18froger xue public String getInput() { 90664ed2dc2488c50194a80004af759a765f0ce18froger xue return mEditText == null ? null : mEditText.getText().toString(); 91664ed2dc2488c50194a80004af759a765f0ce18froger xue } 92664ed2dc2488c50194a80004af759a765f0ce18froger xue 93fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 94fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public int getType() { 95fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue return EDIT_TEXT_TYPE; 96fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 97fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 98fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 99664ed2dc2488c50194a80004af759a765f0ce18froger xue public void bindViewHolder(VH viewHolder) { 100fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue viewHolder.titleView.setText(mTitle); 101664ed2dc2488c50194a80004af759a765f0ce18froger xue mEditText = viewHolder.editText; 102664ed2dc2488c50194a80004af759a765f0ce18froger xue mEditText.setInputType(mTextType.getValue()); 103664ed2dc2488c50194a80004af759a765f0ce18froger xue if (mInitialInputText != null) { 104664ed2dc2488c50194a80004af759a765f0ce18froger xue mEditText.setText(mInitialInputText); 105664ed2dc2488c50194a80004af759a765f0ce18froger xue } 106664ed2dc2488c50194a80004af759a765f0ce18froger xue mEditText.addTextChangedListener(new TextWatcher() { 107fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 108fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public void beforeTextChanged(CharSequence s, int start, int count, int after) { 109fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue // don't care 110fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 111fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 112fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 113fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public void onTextChanged(CharSequence s, int start, int before, int count) { 114fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue // dont' care 115fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 116fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 117fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 118fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public void afterTextChanged(Editable s) { 119fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue if (mTextChangeListener != null) { 120fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue mTextChangeListener.textChanged(s); 121fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 122fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 123fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue }); 124fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 125fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 126fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public static class ViewHolder extends RecyclerView.ViewHolder { 127fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public final TextView titleView; 128fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public final EditText editText; 129fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 130fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public ViewHolder(View view) { 131fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue super(view); 132fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue titleView = view.findViewById(R.id.title); 133fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue editText = view.findViewById(R.id.input); 134fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 135fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 136fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 137fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) { 138fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue return new ViewHolder(LayoutInflater.from(parent.getContext()) 139fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue .inflate(R.layout.edit_text_line_item, parent, false)); 140fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 141fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 142fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 143fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public CharSequence getDesc() { 144fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue return null; 145fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 146fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue 147fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue @Override 148fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue public boolean isExpandable() { 149fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue return false; 150fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue } 151fb860ae3a8fc08e78a6af077d4cd31ba46ac797droger xue} 152