TypedPagedListAdapter.java revision d28162c2c6c760c760125f444069841f1e4d21d9
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.v7.widget.RecyclerView; 25b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.support.v7.widget.RecyclerView.ViewHolder; 26b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport android.view.ViewGroup; 27b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 28b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xueimport com.android.car.settings.R; 29d28162c2c6c760c760125f444069841f1e4d21d9Rakesh Iyerimport com.android.car.view.PagedListView; 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 54b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public static abstract class LineItem<VH extends ViewHolder> { 55b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Retention(SOURCE) 56b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue @IntDef({TEXT_TYPE, 57b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue TOGGLE_TYPE, 58b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue ICON_TEXT_TYPE, 59b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue SEEKBAR_TYPE, 60b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue ICON_TOGGLE_TYPE, 61b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue SIMPLE_ICON_TEXT_TYPE}) 62b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public @interface LineItemType {} 63b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 64b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // with one title and one description 65b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue static final int TEXT_TYPE = 1; 66b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 67b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // with one tile, one description, and a toggle on the right. 68b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue static final int TOGGLE_TYPE = 2; 69b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 70b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue // with one icon, one tile and one description. 71b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue static final int ICON_TEXT_TYPE = 3; 72b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue 73d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue // with one tile and one seekbar. 74d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue static final int SEEKBAR_TYPE = 4; 75d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue 76b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue // with one icon, title, description and a toggle. 77b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue static final int ICON_TOGGLE_TYPE = 5; 78b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 79b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue // similar to ICON_TEXT_TYPE, but with a different layout. 80b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue static final int SIMPLE_ICON_TEXT_TYPE = 6; 81b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 82b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @LineItemType 83b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue abstract int getType(); 84b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 85b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue abstract void bindViewHolder(VH holder); 86b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 87b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public abstract CharSequence getDesc(); 88b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 89b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 90b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 91b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 92b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue switch (viewType) { 93b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue case LineItem.TEXT_TYPE: 94b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return TextLineItem.createViewHolder(parent); 95b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue case LineItem.TOGGLE_TYPE: 96b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return ToggleLineItem.createViewHolder(parent); 97b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue case LineItem.ICON_TEXT_TYPE: 98b292bf2f6c9ea8176014d95c24d3ec3521c86448roger xue return IconTextLineItem.createViewHolder(parent); 99d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue case LineItem.SEEKBAR_TYPE: 100d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue return SeekbarLineItem.createViewHolder(parent); 101b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue case LineItem.ICON_TOGGLE_TYPE: 102b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue return IconToggleLineItem.createViewHolder(parent); 103b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue case LineItem.SIMPLE_ICON_TEXT_TYPE: 104b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue return SimpleIconLineItem.createViewHolder(parent); 105b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue default: 106b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue throw new IllegalStateException("ViewType not supported: " + viewType); 107b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 108b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 109b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 110b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 111b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public void onBindViewHolder(ViewHolder holder, int position) { 112b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue mContentList.get(position).bindViewHolder(holder); 113b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 114b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 115b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 116b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @LineItem.LineItemType 117b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public int getItemViewType(int position) { 118b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return mContentList.get(position).getType(); 119b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 120b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 121b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 122b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public int getItemCount() { 123b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue return mContentList.size(); 124b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 125b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue 126b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue @Override 127b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue public void setMaxItems(int maxItems) { 128b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue // no limit in this list. 129b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue } 130b9104e0e877d1f2334e1cbb1715c7fd320f62345roger xue} 131