1b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue/* 2b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * Copyright (C) 2017 The Android Open Source Project 3b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * 4b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * Licensed under the Apache License, Version 2.0 (the "License"); 5b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * you may not use this file except in compliance with the License. 6b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * You may obtain a copy of the License at 7b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * 8b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * http://www.apache.org/licenses/LICENSE-2.0 9b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * 10b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * Unless required by applicable law or agreed to in writing, software 11b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * distributed under the License is distributed on an "AS IS" BASIS, 12b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * See the License for the specific language governing permissions and 14b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * limitations under the License 15b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue */ 16b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 17b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xuepackage com.android.car.settings.common; 18b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 19b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.support.v7.widget.RecyclerView; 20b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.view.LayoutInflater; 21b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.view.View; 22b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.view.ViewGroup; 235e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xueimport android.widget.ImageView; 24b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.widget.TextView; 25b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport com.android.car.settings.R; 26b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 27b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue/** 28b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * Contains logic for a line item represents text only view of a title and a description. 29b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue */ 30b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xuepublic abstract class TextLineItem extends TypedPagedListAdapter.LineItem<TextLineItem.ViewHolder> { 3124b50803fa603b04e74752beb19f85038515919aroger xue protected final CharSequence mTitle; 32b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 3324b50803fa603b04e74752beb19f85038515919aroger xue protected View.OnClickListener mOnClickListener = (v) -> onClick(); 34b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 35b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue public TextLineItem(CharSequence title) { 36b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue mTitle = title; 37b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 38b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 39b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 40b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public int getType() { 41b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return TEXT_TYPE; 42b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 43b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 44b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 45b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public void bindViewHolder(ViewHolder viewHolder) { 46b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue viewHolder.titleView.setText(mTitle); 47b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue viewHolder.descView.setText(getDesc()); 48b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.itemView.setOnClickListener(mOnClickListener); 49b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.itemView.setEnabled(isEnabled()); 50664ed2dc2488c50194a80004af759a765f0ce18froger xue viewHolder.titleView.setEnabled(isEnabled()); 51664ed2dc2488c50194a80004af759a765f0ce18froger xue viewHolder.descView.setEnabled(isEnabled()); 525e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue viewHolder.rightArrow.setEnabled(isEnabled()); 535e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue viewHolder.rightArrow.setVisibility( 545e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue isExpandable() ? View.VISIBLE : View.INVISIBLE); 555e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue // set the dividerLine to INVISIBLE instead of GONE so the content of the line item 565e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue // don't need to shift. 575e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue viewHolder.dividerLine.setVisibility( 585e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue isClickable() && isEnabled() ? View.VISIBLE : View.INVISIBLE); 59b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 60b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 6124b50803fa603b04e74752beb19f85038515919aroger xue public static class ViewHolder extends RecyclerView.ViewHolder { 6224b50803fa603b04e74752beb19f85038515919aroger xue public final TextView titleView; 6324b50803fa603b04e74752beb19f85038515919aroger xue public final TextView descView; 645e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue final ImageView rightArrow; 655e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue public final View dividerLine; 66b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 67b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public ViewHolder(View view) { 68b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue super(view); 69b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue titleView = (TextView) view.findViewById(R.id.title); 70b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue descView = (TextView) view.findViewById(R.id.desc); 715e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue rightArrow = (ImageView) view.findViewById(R.id.right_chevron); 725e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue dividerLine = view.findViewById(R.id.line_item_divider); 73b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 74b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 75b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 76b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) { 77b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue View v = LayoutInflater.from(parent.getContext()) 78b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue .inflate(R.layout.text_line_item, parent, false); 79b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return new ViewHolder(v); 80b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 81b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 82b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public abstract void onClick(); 83b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue} 84