TypedPagedListAdapter.java revision d91964dd49bc0e6a49ff43fb99c70ad2eca6dadd
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 static java.lang.annotation.RetentionPolicy.SOURCE; 20b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 21b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.annotation.IntDef; 22b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.annotation.NonNull; 23b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.content.Context; 24b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.support.car.ui.PagedListView; 25b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.support.v7.widget.RecyclerView; 26b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.support.v7.widget.RecyclerView.ViewHolder; 27b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.view.ViewGroup; 28b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 29b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport com.android.car.settings.R; 30b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 31b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport java.lang.annotation.Retention; 32b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport java.util.ArrayList; 33b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 34b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue/** 35b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue * Renders all types of LineItem to a view to be displayed as a row in a list. 36b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue */ 37b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xuepublic class TypedPagedListAdapter 38b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue extends RecyclerView.Adapter<ViewHolder> 39b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue implements PagedListView.ItemCap { 40b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue private static final String TAG = "TypedPagedListAdapter"; 41b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 42b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue private final Context mContext; 43b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue private final ArrayList<LineItem> mContentList; 44b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 45b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public TypedPagedListAdapter(@NonNull Context context, ArrayList<LineItem> contentList) { 46b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue mContext = context; 47b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue mContentList = contentList; 48b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 49b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 50b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public boolean isEmpty() { 51b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return mContentList.isEmpty(); 52b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 53b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 54b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public static abstract class LineItem { 55b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Retention(SOURCE) 56b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue @IntDef({TEXT_TYPE, TOGGLE_TYPE, ICON_TEXT_TYPE}) 57b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public @interface LineItemType {} 58b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 59b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // with one title and one description 60b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue static final int TEXT_TYPE = 1; 61b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 62b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // with one tile, one description, and a toggle on the right. 63b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue static final int TOGGLE_TYPE = 2; 64b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 65b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue // with one icon, one tile and one description. 66b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue static final int ICON_TEXT_TYPE = 3; 67b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 68d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue // with one tile and one seekbar. 69d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue static final int SEEKBAR_TYPE = 4; 70d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue 71b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @LineItemType 72b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue abstract int getType(); 73b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 74b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue abstract void bindViewHolder(ViewHolder holder); 75b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 76b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public abstract CharSequence getDesc(); 77b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 78b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 79b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 80b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 81b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue switch (viewType) { 82b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue case LineItem.TEXT_TYPE: 83b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return TextLineItem.createViewHolder(parent); 84b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue case LineItem.TOGGLE_TYPE: 85b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return ToggleLineItem.createViewHolder(parent); 86b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue case LineItem.ICON_TEXT_TYPE: 87b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue return IconTextLineItem.createViewHolder(parent); 88d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue case LineItem.SEEKBAR_TYPE: 89d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue return SeekbarLineItem.createViewHolder(parent); 90b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue default: 91b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue throw new IllegalStateException("ViewType not supported: " + viewType); 92b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 93b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 94b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 95b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 96b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public void onBindViewHolder(ViewHolder holder, int position) { 97b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue mContentList.get(position).bindViewHolder(holder); 98b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 99b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 100b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 101b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @LineItem.LineItemType 102b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public int getItemViewType(int position) { 103b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return mContentList.get(position).getType(); 104b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 105b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 106b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 107b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public int getItemCount() { 108b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return mContentList.size(); 109b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 110b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 111b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 112b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public void setMaxItems(int maxItems) { 113b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // no limit in this list. 114b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 115b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue} 116