1e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing/* 2e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * Copyright 2017 The Android Open Source Project 3e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * 4e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * Licensed under the Apache License, Version 2.0 (the "License"); 5e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * you may not use this file except in compliance with the License. 6e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * You may obtain a copy of the License at 7e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * 8e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * http://www.apache.org/licenses/LICENSE-2.0 9e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * 10e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * Unless required by applicable law or agreed to in writing, software 11e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * distributed under the License is distributed on an "AS IS" BASIS, 12e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * See the License for the specific language governing permissions and 14e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * limitations under the License. 15e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing */ 16e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 17e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingpackage com.example.androidx.car; 18e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 19e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.app.Activity; 20e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.content.Context; 21e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.graphics.Point; 22e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.os.Bundle; 23e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.text.TextUtils; 24e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.view.View; 25e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.view.WindowManager; 26e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.widget.Toast; 27e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 28e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItem; 29e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItemAdapter; 30e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItemProvider; 31e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.PagedListView; 324e832ea4269fff1780e0726c16bc37584957ba10Yao, Yuxingimport androidx.car.widget.TextListItem; 33e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 34def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport java.util.ArrayList; 35def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport java.util.Collections; 36def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport java.util.List; 37def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas 38e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing/** 39e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * Demo activity for {@link ListItem}. 40e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing */ 414e832ea4269fff1780e0726c16bc37584957ba10Yao, Yuxingpublic class TextListItemActivity extends Activity { 42e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 43e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing private static int pixelToDip(Context context, int pixels) { 44e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing return (int) (pixels / context.getResources().getDisplayMetrics().density); 45e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 46e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 47e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing PagedListView mPagedListView; 48e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 49e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing @Override 50e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing protected void onCreate(Bundle savedInstanceState) { 51e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing super.onCreate(savedInstanceState); 52e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing setContentView(R.layout.activity_paged_list_view); 53e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 54e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mPagedListView = findViewById(R.id.paged_list_view); 55e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 56172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing SampleProvider provider = new SampleProvider(this); 57172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing ListItemAdapter adapter = new ListItemAdapter(this, provider, 58534cd0259e56f0b4b12ff9fa697b2f4d19e011e1Yao, Yuxing ListItemAdapter.BackgroundStyle.SOLID); 59172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 60172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing final boolean[] hideDivider = {true}; 61172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing // Demonstrate how to update list item post construction. 62172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing TextListItem toBeUpdated = new TextListItem(this); 63172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setPrimaryActionEmptyIcon(); 64172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setTitle("tap next item to update my icon"); 65172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setHideDivider(hideDivider[0]); 66172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing provider.mItems.add(0, toBeUpdated); 67172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 68172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing boolean[] useEmptyIcon = new boolean[]{false}; 69172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing TextListItem update = new TextListItem(this); 70172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing update.setTitle("tap me to update the icon of item above"); 71172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing update.setOnClickListener(v -> { 72172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing // Change icon. 73172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing if (useEmptyIcon[0]) { 74172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setPrimaryActionEmptyIcon(); 75172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing } else { 76172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 77172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing } 78172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing useEmptyIcon[0] = !useEmptyIcon[0]; 79172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 80172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing // Show/hide item divider. 81172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing toBeUpdated.setHideDivider(hideDivider[0]); 82172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing hideDivider[0] = !hideDivider[0]; 83172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 84172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing // Make sure to notify adapter about the change. 85172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing adapter.notifyItemChanged(0); 86172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing }); 87172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing provider.mItems.add(1, update); 88172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 89e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mPagedListView.setAdapter(adapter); 90e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mPagedListView.setMaxPages(PagedListView.UNLIMITED_PAGES); 919b0ebd7c98d4c0d73c101851014ecc5f4b70471aJovana mPagedListView.setDividerVisibilityManager(adapter); 92e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 93e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 94e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing private static class SampleProvider extends ListItemProvider { 95e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing private Context mContext; 96172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing List<ListItem> mItems; 97e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 982d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing private View.OnClickListener mOnClickListener = v -> 992d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing Toast.makeText(mContext, "Clicked!", Toast.LENGTH_SHORT).show(); 1002d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing 101172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing private View.OnClickListener mGetParentHeight = v -> { 102d966fe86972fad3a06b915535acc78a5386824c6Yao, Yuxing int parentHeight = ((View) v.getParent().getParent()).getHeight(); 103e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing Toast.makeText(v.getContext(), 104e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing "card height is " + pixelToDip(mContext, parentHeight) + " dp", 105e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing Toast.LENGTH_SHORT).show(); 106e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing }; 107e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 108e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing private ListItemProvider.ListProvider mListProvider; 109e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 110e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing SampleProvider(Context context) { 111e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mContext = context; 112e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mItems = new ArrayList<>(); 113e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 114172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing TextListItem item; 115172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 116172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 117172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true); 118172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("clickable single line with full icon and one action"); 119172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setAction("card height", true, mGetParentHeight); 120172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 121172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 122172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 123172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(mContext.getDrawable(R.drawable.pressed_icon), true); 124172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("primary action set by drawable"); 125172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.addViewBinder(vh -> vh.getPrimaryIcon().setClickable(true)); 126172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 127172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 128172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 129172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 130172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("clickable single line with small icon and clickable end icon"); 131172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true, mGetParentHeight); 132172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 133172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 134172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 135172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 136172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("single line without a list divider"); 137172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setHideDivider(true); 138172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 139172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 140172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 141172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setOnClickListener(mOnClickListener); 142172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionEmptyIcon(); 143172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("clickable single line with empty icon and end icon no divider"); 144172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, false); 145172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 146172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 147172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 148172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("title is single line and ellipsizes. " 149172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing + mContext.getString(R.string.long_text)); 150172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true); 151172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 152172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 153172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 154172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("Subtitle-like line without a list divider"); 155172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setHideDivider(true); 156172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.addViewBinder(viewHolder -> 157172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing viewHolder.getTitle().setTextAppearance(R.style.CarListSubtitle)); 158172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 159172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 160172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 161172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionNoIcon(); 162172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("single line with two actions and no divider"); 163172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setActions("action 1", false, 164172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 165172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 1", Toast.LENGTH_SHORT).show(), 166172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing "action 2", false, 167172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 168172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 2", Toast.LENGTH_SHORT).show()); 169172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 170172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 171172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 172172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionNoIcon(); 173172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("single line with two actions and action 2 divider"); 174172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setActions("action 1", false, 175172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 176172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 1", Toast.LENGTH_SHORT).show(), 177172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing "action 2", true, 178172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 179172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 2", Toast.LENGTH_SHORT).show()); 180172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 181172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 182172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 183172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionNoIcon(); 184172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("single line with divider between actions. " 185172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing + mContext.getString(R.string.long_text)); 186172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setActions("action 1", true, 187172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 188172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 1", Toast.LENGTH_SHORT).show(), 189172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing "action 2", false, 190172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v -> Toast.makeText( 191172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing v.getContext(), "action 2", Toast.LENGTH_SHORT).show()); 192172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 193172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 194172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 1955a3a7fabf55f460b7df2b6e1694de6d6b9a2ac36Yao, Yuxing item.setTitle("item longer than containing View size"); 1965a3a7fabf55f460b7df2b6e1694de6d6b9a2ac36Yao, Yuxing item.setBody(mContext.getResources().getString(R.string.super_long_text)); 1975a3a7fabf55f460b7df2b6e1694de6d6b9a2ac36Yao, Yuxing mItems.add(item); 1985a3a7fabf55f460b7df2b6e1694de6d6b9a2ac36Yao, Yuxing 1995a3a7fabf55f460b7df2b6e1694de6d6b9a2ac36Yao, Yuxing item = new TextListItem(mContext); 200172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true); 201172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("double line with full icon and no end icon divider"); 202172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("one line text"); 203172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, false, mGetParentHeight); 204172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 205172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 206172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 207172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 208172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("double line with small icon and one action"); 209172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("one line text"); 210172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setAction("card height", true, mGetParentHeight); 211172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 212e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 213e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing String tenChars = "Ten Chars."; 214172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 215172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 216172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("Card with small icon and text longer than limit"); 217172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody(TextUtils.join("", Collections.nCopies(20, tenChars))); 218172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true, mGetParentHeight); 219172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 220172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 221172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 222172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionEmptyIcon(); 223172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("double line with empty primary icon." 224172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing + mContext.getString(R.string.long_text)); 225172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("one line text as primary", true); 226172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setActions("screen size", false, v -> { 227172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Context c = v.getContext(); 228172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Point size = new Point(); 229172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing c.getSystemService(WindowManager.class).getDefaultDisplay().getSize(size); 230172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 231172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Toast.makeText(v.getContext(), String.format("%s x %s dp", pixelToDip(c, size.x), 232172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing pixelToDip(c, size.y)), 233172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Toast.LENGTH_SHORT).show(); 234172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing }, "card height", true, mGetParentHeight); 235172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 236172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 237172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 238172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("double line with no primary action and one divider"); 239172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("one line text as primary", true); 240172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setActions("screen size", false, v -> { 241172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Context c = v.getContext(); 242172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Point size = new Point(); 243172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing c.getSystemService(WindowManager.class).getDefaultDisplay().getSize(size); 244172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 245172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Toast.makeText(v.getContext(), 246172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing String.format("%s x %s dp", pixelToDip(c, size.x), 247172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing pixelToDip(c, size.y)), Toast.LENGTH_SHORT).show(); 248172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing }, "card height", true, mGetParentHeight); 249172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 250172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 251172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 252172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true); 253172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("Only body - no title is set"); 254172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setAction("card height", true, mGetParentHeight); 255172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 256172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 257172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 258172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false); 259172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setBody("Only body - no title. " + mContext.getString(R.string.long_text)); 260172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 261172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing 262172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item = new TextListItem(mContext); 263172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setTitle("Switch - initially unchecked"); 264172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing item.setSwitch(false, true, (button, isChecked) -> { 265172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing Toast.makeText(mContext, 266172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing isChecked ? "checked" : "unchecked", Toast.LENGTH_SHORT).show(); 267172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing }); 268172425512285f6da3c69b9405738df1f064336c1Yao, Yuxing mItems.add(item); 26922037e659c30185f51f522e1761236f780334c9dYao, Yuxing 270e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing mListProvider = new ListItemProvider.ListProvider(mItems); 271e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 272e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 273e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing @Override 274e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing public ListItem get(int position) { 275e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing return mListProvider.get(position); 276e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 277e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing 278e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing @Override 279e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing public int size() { 280e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing return mListProvider.size(); 281e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 282e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing } 283e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing} 284