Home | History | Annotate | Download | only in leanback
      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 
     42         Item(String text, OnItemClickedListener action) {
     43             mText = text;
     44             mAction = action;
     45         }
     46 
     47         @Override
     48         public String toString() {
     49             return mText;
     50         }
     51     }
     52 
     53     @Override
     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 
     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 
     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