1b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue/* 2b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * Copyright (C) 2017 The Android Open Source Project 3b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * 4b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * Licensed under the Apache License, Version 2.0 (the "License"); 5b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * you may not use this file except in compliance with the License. 6b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * You may obtain a copy of the License at 7b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * 8b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * http://www.apache.org/licenses/LICENSE-2.0 9b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * 10b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * Unless required by applicable law or agreed to in writing, software 11b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * distributed under the License is distributed on an "AS IS" BASIS, 12b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * See the License for the specific language governing permissions and 14b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * limitations under the License 15b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue */ 16b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 17b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xuepackage com.android.car.settings.common; 18b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 19b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.support.v7.widget.RecyclerView; 20b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.text.TextUtils; 21b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.view.LayoutInflater; 22b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.view.View; 23b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.view.ViewGroup; 24b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.widget.ImageView; 25b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport android.widget.TextView; 26b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 27b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xueimport com.android.car.settings.R; 28b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 29b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue/** 30b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue * Contains logic for a line item represents icon and texts of a title and a description. 31b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue */ 32b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xuepublic abstract class IconTextLineItem 33b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue extends TypedPagedListAdapter.LineItem<IconTextLineItem.ViewHolder> { 34b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue private final CharSequence mTitle; 35b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 36b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue private View.OnClickListener mOnClickListener = (v) -> onClick(); 37b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 38ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue public IconTextLineItem(CharSequence title) { 39b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue mTitle = title; 40b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 41b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 42b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue @Override 43b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue public int getType() { 44b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue return ICON_TEXT_TYPE; 45b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 46b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 47b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue @Override 48b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public void bindViewHolder(ViewHolder viewHolder) { 49b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue viewHolder.titleView.setText(mTitle); 50ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue setIcon(viewHolder.iconView); 51b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue CharSequence desc = getDesc(); 52b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue if (TextUtils.isEmpty(desc)) { 53b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue viewHolder.descView.setVisibility(View.GONE); 54b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } else { 55b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue viewHolder.descView.setVisibility(View.VISIBLE); 56b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue viewHolder.descView.setText(desc); 57b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 58b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.itemView.setOnClickListener(mOnClickListener); 595e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue viewHolder.rightArrow.setVisibility( 605e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue isExpandable() ? View.VISIBLE : View.INVISIBLE); 615e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue viewHolder.dividerLine.setVisibility( 625e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue isClickable() && isEnabled() ? View.VISIBLE : View.INVISIBLE); 63b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 64b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 6586838c1e44310395e4e1065d49c224895aeb200dLujiang Xue public static class ViewHolder extends RecyclerView.ViewHolder { 6686838c1e44310395e4e1065d49c224895aeb200dLujiang Xue public final TextView titleView; 67b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue final TextView descView; 68b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue final ImageView iconView; 69ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue final ImageView rightArrow; 705e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue public final View dividerLine; 71b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 72b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue public ViewHolder(View view) { 73b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue super(view); 74b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue iconView = (ImageView) view.findViewById(R.id.icon); 75b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue titleView = (TextView) view.findViewById(R.id.title); 76b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue descView = (TextView) view.findViewById(R.id.desc); 77ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue rightArrow = (ImageView) view.findViewById(R.id.right_chevron); 785e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue dividerLine = view.findViewById(R.id.line_item_divider); 79b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 80b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 81b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 82b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) { 83b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue View v = LayoutInflater.from(parent.getContext()) 84b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue .inflate(R.layout.icon_text_line_item, parent, false); 85b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue return new ViewHolder(v); 86b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue } 87b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 88ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue public abstract void setIcon(ImageView iconView); 89ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue 90b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue public abstract void onClick(); 91b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue} 92