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