• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14 package com.example.android.leanback;
15 
16 import android.content.Intent;
17 import android.os.Bundle;
18 import android.support.v17.leanback.widget.ArrayObjectAdapter;
19 import android.support.v17.leanback.widget.HeaderItem;
20 import android.support.v17.leanback.widget.ListRow;
21 import android.support.v17.leanback.widget.ListRowPresenter;
22 import android.support.v17.leanback.widget.OnItemClickedListener;
23 import android.support.v17.leanback.widget.Row;
24 import android.util.Log;
25 import android.view.View;
26 import android.os.Handler;
27 
28 import java.util.Random;
29 
30 public class BrowseAnimationFragment extends
31         android.support.v17.leanback.app.BrowseFragment {
32     private static final String TAG = "leanback.BrowseAnimationFragment";
33 
34     private static final int NUM_ROWS = 10;
35     private ArrayObjectAdapter mRowsAdapter;
36     private static Random sRand = new Random();
37 
38     static class Item {
39         final String mText;
40         final OnItemClickedListener mAction;
41 
Item(String text, OnItemClickedListener action)42         Item(String text, OnItemClickedListener action) {
43             mText = text;
44             mAction = action;
45         }
46 
47         @Override
toString()48         public String toString() {
49             return mText;
50         }
51     }
52 
53     @Override
onCreate(Bundle savedInstanceState)54     public void onCreate(Bundle savedInstanceState) {
55         Log.i(TAG, "onCreate");
56         super.onCreate(savedInstanceState);
57 
58         setBadgeDrawable(
59                 getActivity().getResources().getDrawable(R.drawable.ic_title));
60         setTitle("Leanback Sample App");
61         setHeadersState(HEADERS_ENABLED);
62 
63         setOnSearchClickedListener(new View.OnClickListener() {
64                 @Override
65             public void onClick(View view) {
66                 Intent intent = new Intent(getActivity(), SearchActivity.class);
67                 startActivity(intent);
68             }
69         });
70 
71         setupRows();
72         setOnItemClickedListener(new ItemClickedListener());
73     }
74 
setupRows()75     private void setupRows() {
76         ListRowPresenter lrp = new ListRowPresenter();
77         mRowsAdapter = new ArrayObjectAdapter(lrp);
78         for (int i = 0; i < NUM_ROWS; ++i) {
79             mRowsAdapter.add(
80                     createRandomRow(new HeaderItem(i, "Row " + i)));
81         }
82         setAdapter(mRowsAdapter);
83     }
84 
createRandomItem()85     Item createRandomItem() {
86         switch (sRand.nextInt(15)) {
87         default:
88         case 0:
89             return new Item("Remove Item before", new OnItemClickedListener() {
90                     @Override
91                 public void onItemClicked(Object item, Row row) {
92                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
93                             .getAdapter());
94                     int index = adapter.indexOf(item);
95                     if (index >= 0) {
96                         if (index > 0)
97                             index--;
98                         adapter.removeItems(index, 1);
99                     }
100                 }
101             });
102         case 1:
103             return new Item("Remove Item after", new OnItemClickedListener() {
104                     @Override
105                 public void onItemClicked(Object item, Row row) {
106                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
107                             .getAdapter());
108                     int index = adapter.indexOf(item);
109                     if (index >= 0) {
110                         if (index < adapter.size() - 1)
111                             index++;
112                         adapter.removeItems(index, 1);
113                     }
114                 }
115             });
116         case 2:
117             return new Item("Remove Item", new OnItemClickedListener() {
118                     @Override
119                 public void onItemClicked(Object item, Row row) {
120                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
121                             .getAdapter());
122                     int index = adapter.indexOf(item);
123                     if (index >= 0) {
124                         adapter.removeItems(index, 1);
125                     }
126                 }
127             });
128         case 3:
129             return new Item("Remove all Items", new OnItemClickedListener() {
130                     @Override
131                 public void onItemClicked(Object item, Row row) {
132                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
133                             .getAdapter());
134                     adapter.clear();
135                 }
136             });
137         case 4:
138             return new Item("add item before", new OnItemClickedListener() {
139                     @Override
140                 public void onItemClicked(Object item, Row row) {
141                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
142                             .getAdapter());
143                     int index = adapter.indexOf(item);
144                     if (index >= 0) {
145                         adapter.add(index, createRandomItem());
146                     }
147                 }
148             });
149         case 5:
150             return new Item("add item after", new OnItemClickedListener() {
151                     @Override
152                 public void onItemClicked(Object item, Row row) {
153                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
154                             .getAdapter());
155                     int index = adapter.indexOf(item);
156                     if (index >= 0) {
157                         adapter.add(index + 1, createRandomItem());
158                     }
159                 }
160             });
161         case 6:
162             return new Item("add random items before",
163                     new OnItemClickedListener() {
164                             @Override
165                         public void onItemClicked(Object item, Row row) {
166                             ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
167                                     .getAdapter());
168                             int index = adapter.indexOf(item);
169                             if (index >= 0) {
170                                 int count = sRand.nextInt(4) + 1;
171                                 for (int i = 0; i < count; i++) {
172                                     adapter.add(index + i, createRandomItem());
173                                 }
174                             }
175                         }
176                     });
177         case 7:
178             return new Item("add random items after",
179                     new OnItemClickedListener() {
180                             @Override
181                         public void onItemClicked(Object item, Row row) {
182                             ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
183                                     .getAdapter());
184                             int index = adapter.indexOf(item);
185                             if (index >= 0) {
186                                 int count = sRand.nextInt(4) + 1;
187                                 for (int i = 0; i < count; i++) {
188                                     adapter.add(index + 1 + i,
189                                             createRandomItem());
190                                 }
191                             }
192                         }
193                     });
194         case 8:
195             return new Item("add row before", new OnItemClickedListener() {
196                     @Override
197                 public void onItemClicked(Object item, Row row) {
198                     int index = mRowsAdapter.indexOf(row);
199                     if (index >= 0) {
200                         int headerId = sRand.nextInt();
201                         mRowsAdapter.add(index, createRandomRow(new HeaderItem(
202                                 headerId, "Row " + headerId)));
203                     }
204                 }
205             });
206         case 9:
207             return new Item("add row after", new OnItemClickedListener() {
208                     @Override
209                 public void onItemClicked(Object item, Row row) {
210                     int index = mRowsAdapter.indexOf(row);
211                     if (index >= 0) {
212                         int headerId = sRand.nextInt();
213                         mRowsAdapter.add(
214                                 index + 1, createRandomRow(new HeaderItem(
215                                         headerId, "Row " + headerId)));
216                     }
217                 }
218             });
219         case 10:
220             return new Item("delete row", new OnItemClickedListener() {
221                     @Override
222                 public void onItemClicked(Object item, Row row) {
223                     mRowsAdapter.remove(row);
224                 }
225             });
226         case 11:
227             return new Item("delete row before", new OnItemClickedListener() {
228                     @Override
229                 public void onItemClicked(Object item, Row row) {
230                     int index = mRowsAdapter.indexOf(row);
231                     if (index > 0) {
232                         mRowsAdapter.removeItems(index - 1, 1);
233                     }
234                 }
235             });
236         case 12:
237             return new Item("delete row after", new OnItemClickedListener() {
238                     @Override
239                 public void onItemClicked(Object item, Row row) {
240                     int index = mRowsAdapter.indexOf(row);
241                     if (index < mRowsAdapter.size() - 1) {
242                         mRowsAdapter.removeItems(index + 1, 1);
243                     }
244                 }
245             });
246         case 13:
247             return new Item("Replace Item before", new OnItemClickedListener() {
248                     @Override
249                 public void onItemClicked(Object item, Row row) {
250                     ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
251                             .getAdapter());
252                     int index = adapter.indexOf(item);
253                     if (index >= 0) {
254                         if (index > 0)
255                             index--;
256                         adapter.replace(index, createRandomItem());
257                     }
258                 }
259             });
260         case 14:
261             return new Item("Remove all then re-add", new OnItemClickedListener() {
262                     @Override
263                 public void onItemClicked(Object item, Row row) {
264                     final ArrayObjectAdapter adapter = ((ArrayObjectAdapter) ((ListRow) row)
265                             .getAdapter());
266                    adapter.clear();
267                    new Handler().postDelayed(new Runnable() {
268                        @Override
269                        public void run() {
270                            adapter.add(0, createRandomItem());
271                        }
272                    }, 1000);
273                 }
274             });
275         }
276     }
277 
278     ListRow createRandomRow(HeaderItem header) {
279         ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(
280                 new StringPresenter());
281         for (int i = 0; i < 8; i++) {
282             listRowAdapter.add(createRandomItem());
283         }
284         return new ListRow(header, listRowAdapter);
285     }
286 
287     private final class ItemClickedListener implements OnItemClickedListener {
288         @Override
289         public void onItemClicked(Object item, Row row) {
290             ((Item) item).mAction.onItemClicked(item, row);
291         }
292     }
293 }
294