1/*
2 * Copyright 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.example.androidx.car;
18
19import android.app.Activity;
20import android.content.Context;
21import android.os.Bundle;
22import android.widget.SeekBar;
23import android.widget.Toast;
24
25import androidx.car.widget.ListItem;
26import androidx.car.widget.ListItemAdapter;
27import androidx.car.widget.ListItemProvider;
28import androidx.car.widget.PagedListView;
29import androidx.car.widget.SeekbarListItem;
30import androidx.car.widget.SubheaderListItem;
31
32import java.util.ArrayList;
33import java.util.List;
34
35/**
36 * Demo activity for {@link ListItem}.
37 */
38public class SeekbarListItemActivity extends Activity {
39
40    PagedListView mPagedListView;
41
42    @Override
43    protected void onCreate(Bundle savedInstanceState) {
44        super.onCreate(savedInstanceState);
45        setContentView(R.layout.activity_paged_list_view);
46
47        mPagedListView = findViewById(R.id.paged_list_view);
48
49        ListItemAdapter adapter = new ListItemAdapter(this,
50                new SampleProvider(this), ListItemAdapter.BackgroundStyle.PANEL);
51        mPagedListView.setAdapter(adapter);
52        mPagedListView.setMaxPages(PagedListView.UNLIMITED_PAGES);
53    }
54
55    private static class SampleProvider extends ListItemProvider {
56
57        private Context mContext;
58        SeekBar.OnSeekBarChangeListener mListener = new SeekBar.OnSeekBarChangeListener() {
59            @Override
60            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
61                Toast.makeText(mContext, "" + progress, Toast.LENGTH_SHORT).show();
62            }
63
64            @Override
65            public void onStartTrackingTouch(SeekBar seekBar) {
66
67            }
68
69            @Override
70            public void onStopTrackingTouch(SeekBar seekBar) {
71
72            }
73        };
74        private List<ListItem> mItems;
75
76        private ListItemProvider.ListProvider mListProvider;
77
78        SampleProvider(Context context) {
79            mContext = context;
80            mItems = new ArrayList<>();
81
82            String longText = mContext.getString(R.string.long_text);
83
84            SubheaderListItem subheaderItem;
85            SeekbarListItem item;
86
87            // Slider only.
88            subheaderItem = new SubheaderListItem(mContext, "Slider Only");
89            mItems.add(subheaderItem);
90
91            item = initSeekbarListItem();
92            item.setText(null);
93            mItems.add(item);
94
95            item = initSeekbarListItem();
96            item.setText("one line text");
97            mItems.add(item);
98
99            item = initSeekbarListItem();
100            item.setText(longText);
101            mItems.add(item);
102
103
104            // Start icon.
105            subheaderItem = new SubheaderListItem(mContext, "With Primary Action");
106            mItems.add(subheaderItem);
107            // Only slider. No text.
108            item = initSeekbarListItem();
109            item.setText(null);
110            item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon);
111            mItems.add(item);
112
113            // One line text.
114            item = initSeekbarListItem();
115            item.setText("one line text");
116            item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon);
117            mItems.add(item);
118
119            // Long text.
120            item = initSeekbarListItem();
121            item.setText(longText);
122            item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon);
123            mItems.add(item);
124
125            // Clickable PrimaryActionIcon.
126            item = initSeekbarListItem();
127            item.setText("with clickable Primary icon");
128            item.setPrimaryActionIcon(android.R.drawable.sym_def_app_icon);
129            item.setPrimaryActionIconListener(v -> Toast.makeText(mContext,
130                    "Primary icon clicked!", Toast.LENGTH_SHORT).show());
131            mItems.add(item);
132
133            // End icon with divider.
134            subheaderItem = new SubheaderListItem(mContext, "With Supplemental Action");
135            mItems.add(subheaderItem);
136
137            item = initSeekbarListItem();
138            item.setText(null);
139            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true);
140            mItems.add(item);
141
142            item = initSeekbarListItem();
143            item.setText("one line text");
144            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true);
145            mItems.add(item);
146
147            item = initSeekbarListItem();
148            item.setText(longText);
149            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true);
150            mItems.add(item);
151
152            item = initSeekbarListItem();
153            item.setText("with clickable icon");
154            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, true);
155            item.setSupplementalIconListener(v -> Toast.makeText(mContext,
156                    "Supplemental icon clicked!", Toast.LENGTH_SHORT).show());
157            mItems.add(item);
158
159            // Empty end icon with divider.
160            subheaderItem = new SubheaderListItem(mContext, "With Empty Icon");
161            mItems.add(subheaderItem);
162
163            item = initSeekbarListItem();
164            item.setText(null);
165            item.setSupplementalEmptyIcon(true);
166            mItems.add(item);
167
168            item = initSeekbarListItem();
169            item.setText("one line text");
170            item.setSupplementalEmptyIcon(true);
171            mItems.add(item);
172
173            item = initSeekbarListItem();
174            item.setText(longText);
175            item.setSupplementalEmptyIcon(true);
176            mItems.add(item);
177
178            // End icon without divider.
179            subheaderItem = new SubheaderListItem(mContext, "Without Supplemental Action Divider");
180            mItems.add(subheaderItem);
181
182            item = initSeekbarListItem();
183            item.setText(null);
184            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, false);
185            mItems.add(item);
186
187            item = initSeekbarListItem();
188            item.setText("one line text");
189            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, false);
190            mItems.add(item);
191
192            item = initSeekbarListItem();
193            item.setText(longText);
194            item.setSupplementalIcon(android.R.drawable.sym_def_app_icon, false);
195            mItems.add(item);
196
197            // Empty end icon without divider.
198            subheaderItem = new SubheaderListItem(mContext, "With Empty Icon No Divider");
199            mItems.add(subheaderItem);
200
201            item = initSeekbarListItem();
202            item.setText(null);
203            item.setSupplementalEmptyIcon(false);
204            mItems.add(item);
205
206            item = initSeekbarListItem();
207            item.setText("one line text");
208            item.setSupplementalEmptyIcon(false);
209            mItems.add(item);
210
211            item = initSeekbarListItem();
212            item.setText(longText);
213            item.setSupplementalEmptyIcon(false);
214            mItems.add(item);
215
216            // Secondary progress.
217            subheaderItem = new SubheaderListItem(mContext, "Secondary Progress");
218            mItems.add(subheaderItem);
219
220            item = new SeekbarListItem(mContext);
221            item.setMax(100);
222            item.setProgress(0);
223            item.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
224                @Override
225                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
226                    seekBar.setSecondaryProgress(progress + 10);
227                }
228
229                @Override
230                public void onStartTrackingTouch(SeekBar seekBar) {
231                }
232
233                @Override
234                public void onStopTrackingTouch(SeekBar seekBar) {
235                }
236            });
237            mItems.add(item);
238
239            mListProvider = new ListItemProvider.ListProvider(mItems);
240        }
241
242        private SeekbarListItem initSeekbarListItem() {
243            SeekbarListItem item = new SeekbarListItem(mContext);
244            item.setMax(100);
245            item.setProgress(0);
246            item.setOnSeekBarChangeListener(mListener);
247            return item;
248        }
249
250        @Override
251        public ListItem get(int position) {
252            return mListProvider.get(position);
253        }
254
255        @Override
256        public int size() {
257            return mListProvider.size();
258        }
259    }
260}
261