TextListItemActivity.java revision 22037e659c30185f51f522e1761236f780334c9d
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.FrameLayout;
27e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport android.widget.Toast;
28e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
29e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport java.util.ArrayList;
30e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport java.util.Collections;
31e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport java.util.List;
32e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
33e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItem;
34e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItemAdapter;
35e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.ListItemProvider;
36e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingimport androidx.car.widget.PagedListView;
37e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
38e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing/**
39e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing * Demo activity for {@link ListItem}.
40e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing */
41e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxingpublic class ListItemActivity 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
56e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        ListItemAdapter adapter = new ListItemAdapter(this,
57d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing                new SampleProvider(this), ListItemAdapter.BackgroundStyle.PANEL);
58e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        mPagedListView.setAdapter(adapter);
59e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        mPagedListView.setMaxPages(PagedListView.UNLIMITED_PAGES);
60e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing    }
61e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
62e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing    private static class SampleProvider extends ListItemProvider {
63e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        private Context mContext;
64e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        private List<ListItem> mItems;
65e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
662d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing        private View.OnClickListener mOnClickListener = v ->
672d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                Toast.makeText(mContext, "Clicked!", Toast.LENGTH_SHORT).show();
682d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing
69e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        private View.OnClickListener mGetParentHeight = (v) -> {
70e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            int parentHeight = ((FrameLayout) v.getParent().getParent().getParent()).getHeight();
71e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            Toast.makeText(v.getContext(),
72e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    "card height is " + pixelToDip(mContext, parentHeight) + " dp",
73e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    Toast.LENGTH_SHORT).show();
74e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        };
75e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
76e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        private ListItemProvider.ListProvider mListProvider;
77e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
78e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        SampleProvider(Context context) {
79e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mContext = context;
80e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems = new ArrayList<>();
81e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
82e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
832d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withOnClickListener(mOnClickListener)
84e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true)
852d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withTitle("clickable single line with full icon and one action")
86e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withAction("card height", true, mGetParentHeight)
87e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
88e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
89e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
90e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("primary action set by drawable")
91e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(mContext.getDrawable(R.drawable.pressed_icon), true)
92e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withViewBinder(vh -> vh.getPrimaryIcon().setClickable(true))
93e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
94e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
95e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
962d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withOnClickListener(mOnClickListener)
97e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false)
982d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withTitle("clickable single line with small icon and clickable end icon")
99e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withSupplementalIcon(android.R.drawable.sym_def_app_icon, true,
100e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            mGetParentHeight)
101e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
102e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
103e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
1042d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withOnClickListener(mOnClickListener)
105e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionEmptyIcon()
1062d99408bc504324ae6038f57f8489d8ec75585bbYao, Yuxing                    .withTitle("clickable single line with empty icon and end icon no divider")
107e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withSupplementalIcon(android.R.drawable.sym_def_app_icon, false)
108e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
109e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
110e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
111e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("title is single line and ellipsizes. "
112e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            + mContext.getString(R.string.long_text))
113e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withSupplementalIcon(android.R.drawable.sym_def_app_icon, true)
114e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
115e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
116e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
117e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionNoIcon()
118e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("single line with two actions and no divider")
119e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withActions("action 1", false,
120e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
121e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 1", Toast.LENGTH_SHORT).show(),
122e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            "action 2", false,
123e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
124e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 2", Toast.LENGTH_SHORT).show())
125e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
126e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
127e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
128e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionNoIcon()
129e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("single line with two actions and action 2 divider")
130e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withActions("action 1", false,
131e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
132e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 1", Toast.LENGTH_SHORT).show(),
133e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            "action 2", true,
134e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
135e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 2", Toast.LENGTH_SHORT).show())
136e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
137e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
138e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
139e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionNoIcon()
140e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("single line with divider between actions. "
141e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            + mContext.getString(R.string.long_text))
142e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withActions("action 1", true,
143e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
144e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 1", Toast.LENGTH_SHORT).show(),
145e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            "action 2", false,
146e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            (v) -> Toast.makeText(
147e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                    v.getContext(), "action 2", Toast.LENGTH_SHORT).show())
148e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
149e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
150e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
151e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true)
152e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("double line with full icon and no end icon divider")
153e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("one line text")
154e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withSupplementalIcon(android.R.drawable.sym_def_app_icon, false,
155e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            mGetParentHeight)
156e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
157e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
158e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
159e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false)
160e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("double line with small icon and one action")
161e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("one line text")
162e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withAction("card height", true, mGetParentHeight)
163e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
164e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
165e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            String tenChars = "Ten Chars.";
166e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
167e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false)
168e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("Card with small icon and text longer than limit")
169e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("some chars")
170e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody(TextUtils.join("", Collections.nCopies(20, tenChars)))
171e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withSupplementalIcon(android.R.drawable.sym_def_app_icon, true,
172e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            mGetParentHeight)
173e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
174e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
175e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
176e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionEmptyIcon()
177e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("double line with empty primary icon."
178e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                            + mContext.getString(R.string.long_text))
179e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("one line text as primary", true)
180e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withActions("screen size", false, (v) -> {
181e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Context c = v.getContext();
182e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Point size = new Point();
183e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        c.getSystemService(WindowManager.class).getDefaultDisplay().getSize(size);
184e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
185e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Toast.makeText(v.getContext(),
186e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                String.format("%s x %s dp", pixelToDip(c, size.x),
187e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                        pixelToDip(c, size.y)), Toast.LENGTH_SHORT).show();
188e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    }, "card height", true, mGetParentHeight)
189e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
190e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
191e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
192e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withTitle("double line with no primary action and one divider")
193e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("one line text as primary", true)
194e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withActions("screen size", false, (v) -> {
195e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Context c = v.getContext();
196e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Point size = new Point();
197e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        c.getSystemService(WindowManager.class).getDefaultDisplay().getSize(size);
198e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
199e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                        Toast.makeText(v.getContext(),
200e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                String.format("%s x %s dp", pixelToDip(c, size.x),
201e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                                        pixelToDip(c, size.y)), Toast.LENGTH_SHORT).show();
202e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    }, "card height", true, mGetParentHeight)
203e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
204e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
205e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
206e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, true)
207e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("Only body - no title is set")
208e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withAction("card height", true, mGetParentHeight)
209e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
210e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
211e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mItems.add(new ListItem.Builder(mContext)
212e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withPrimaryActionIcon(android.R.drawable.sym_def_app_icon, false)
213e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .withBody("Only body - no title. " + mContext.getString(R.string.long_text))
214e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing                    .build());
215e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
21622037e659c30185f51f522e1761236f780334c9dYao, Yuxing            mItems.add(new ListItem.Builder(mContext)
21722037e659c30185f51f522e1761236f780334c9dYao, Yuxing                    .withTitle("Switch - initially unchecked")
21822037e659c30185f51f522e1761236f780334c9dYao, Yuxing                    .withSwitch(false, true, (button, isChecked) -> {
21922037e659c30185f51f522e1761236f780334c9dYao, Yuxing                        Toast.makeText(mContext,
22022037e659c30185f51f522e1761236f780334c9dYao, Yuxing                                isChecked ? "checked" : "unchecked", Toast.LENGTH_SHORT).show();
22122037e659c30185f51f522e1761236f780334c9dYao, Yuxing                    })
22222037e659c30185f51f522e1761236f780334c9dYao, Yuxing                    .build());
22322037e659c30185f51f522e1761236f780334c9dYao, Yuxing
224e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            mListProvider = new ListItemProvider.ListProvider(mItems);
225e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        }
226e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
227e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        @Override
228e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        public ListItem get(int position) {
229e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            return mListProvider.get(position);
230e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        }
231e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing
232e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        @Override
233e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        public int size() {
234e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing            return mListProvider.size();
235e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing        }
236e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing    }
237e048d0d3137fbee6430d3481aaa7269d221a7d45Yao, Yuxing}
238