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