BrowseSupportFragment.java revision 380a6d5bcb74ec69524f248d0b2edee49805b31b
1/* This file is auto-generated from BrowseFragment.java. DO NOT MODIFY. */ 2 3/* 4 * Copyright (C) 2014 The Android Open Source Project 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 7 * in compliance with the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software distributed under the License 12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 13 * or implied. See the License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16package com.example.android.leanback; 17 18import android.support.v4.app.Fragment; 19import android.content.Intent; 20import android.os.Bundle; 21import android.os.Handler; 22import android.support.v17.leanback.app.Adaptable; 23import android.support.v17.leanback.app.GuidedStepSupportFragment; 24import android.support.v17.leanback.app.RowsSupportFragment; 25import android.support.v17.leanback.widget.ArrayObjectAdapter; 26import android.support.v17.leanback.widget.HeaderItem; 27import android.support.v17.leanback.widget.ImageCardView; 28import android.support.v17.leanback.widget.ListRow; 29import android.support.v17.leanback.widget.ListRowPresenter; 30import android.support.v17.leanback.widget.OnItemViewClickedListener; 31import android.support.v17.leanback.widget.OnItemViewSelectedListener; 32import android.support.v17.leanback.widget.PageRow; 33import android.support.v17.leanback.widget.PageRowPresenter; 34import android.support.v17.leanback.widget.Presenter; 35import android.support.v17.leanback.widget.PresenterSelector; 36import android.support.v17.leanback.widget.Row; 37import android.support.v17.leanback.widget.RowPresenter; 38import android.support.v4.app.ActivityOptionsCompat; 39import android.util.Log; 40import android.view.LayoutInflater; 41import android.view.View; 42import android.view.ViewGroup; 43 44public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment { 45 private static final String TAG = "leanback.BrowseSupportFragment"; 46 47 private static final boolean TEST_ENTRANCE_TRANSITION = true; 48 private static final int NUM_ROWS = 8; 49 private static final long HEADER_ID1 = 1001; 50 private static final long HEADER_ID2 = 1002; 51 52 private ArrayObjectAdapter mRowsAdapter; 53 private BackgroundHelper mBackgroundHelper = new BackgroundHelper(); 54 55 // For good performance, it's important to use a single instance of 56 // a card presenter for all rows using that presenter. 57 final CardPresenter mCardPresenter = new CardPresenter(); 58 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 59 60 public BrowseSupportFragment() { 61 getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory()); 62 } 63 64 @Override 65 public void onCreate(Bundle savedInstanceState) { 66 Log.i(TAG, "onCreate"); 67 super.onCreate(savedInstanceState); 68 69 setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title)); 70 setTitle("Leanback Sample App"); 71 setHeadersState(HEADERS_ENABLED); 72 setupRows(); 73 setOnSearchClickedListener(new View.OnClickListener() { 74 @Override 75 public void onClick(View view) { 76 Intent intent = new Intent(getActivity(), SearchSupportActivity.class); 77 startActivity(intent); 78 } 79 }); 80 81 setOnItemViewClickedListener(new ItemViewClickedListener()); 82 setOnItemViewSelectedListener(new OnItemViewSelectedListener() { 83 @Override 84 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 85 RowPresenter.ViewHolder rowViewHolder, Row row) { 86 Log.i(TAG, "onItemSelected: " + item + " row " + row); 87 88 if (isShowingHeaders()) { 89 mBackgroundHelper.setBackground(getActivity(), null); 90 } else if (item instanceof PhotoItem) { 91 mBackgroundHelper.setBackground( 92 getActivity(), ((PhotoItem) item).getImageResourceId()); 93 } 94 } 95 }); 96 if (TEST_ENTRANCE_TRANSITION) { 97 // don't run entrance transition if fragment is restored. 98 if (savedInstanceState == null) { 99 prepareEntranceTransition(); 100 } 101 } 102 103 // simulates in a real world use case data being loaded two seconds later 104 new Handler().postDelayed(new Runnable() { 105 public void run() { 106 loadData(); 107 startEntranceTransition(); 108 } 109 }, 2000); 110 } 111 112 @Override 113 public View onCreateView( 114 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 115 return super.onCreateView(inflater, container, savedInstanceState); 116 } 117 118 private void setupRows() { 119 mRowsAdapter = new ArrayObjectAdapter(new MyPresenterSelector()); 120 setAdapter(mRowsAdapter); 121 } 122 123 private void loadData() { 124 int i = 0; 125 126 HeaderItem header = new HeaderItem(HEADER_ID1, "Page Row " + 0); 127 mRowsAdapter.add(new PageRow(header)); 128 129 for (; i < NUM_ROWS; ++i) { 130 header = new HeaderItem(i, "Row " + i); 131 mRowsAdapter.add(new ListRow(header, createListRowAdapter(i))); 132 } 133 134 header = new HeaderItem(HEADER_ID2, "Page Row " + 1); 135 mRowsAdapter.add(new PageRow(header)); 136 } 137 138 private ArrayObjectAdapter createListRowAdapter(int i) { 139 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 140 mCardPresenter : mCardPresenter2); 141 listRowAdapter.add(new PhotoItem( 142 "Hello world", 143 R.drawable.gallery_photo_1)); 144 listRowAdapter.add(new PhotoItem( 145 "This is a test", 146 "Only a test", 147 R.drawable.gallery_photo_2)); 148 listRowAdapter.add(new PhotoItem( 149 "Android TV", 150 "by Google", 151 R.drawable.gallery_photo_3)); 152 listRowAdapter.add(new PhotoItem( 153 "Leanback", 154 R.drawable.gallery_photo_4)); 155 listRowAdapter.add(new PhotoItem( 156 "GuidedStep (Slide left/right)", 157 R.drawable.gallery_photo_5)); 158 listRowAdapter.add(new PhotoItem( 159 "GuidedStep (Slide bottom up)", 160 "Open GuidedStepSupportFragment", 161 R.drawable.gallery_photo_6)); 162 listRowAdapter.add(new PhotoItem( 163 "Android TV", 164 "open RowsSupportActivity", 165 R.drawable.gallery_photo_7)); 166 listRowAdapter.add(new PhotoItem( 167 "Leanback", 168 "open BrowseSupportActivity", 169 R.drawable.gallery_photo_8)); 170 return listRowAdapter; 171 } 172 173 private final class ItemViewClickedListener implements OnItemViewClickedListener { 174 @Override 175 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 176 RowPresenter.ViewHolder rowViewHolder, Row row) { 177 178 Intent intent; 179 Bundle bundle; 180 if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 181 GuidedStepSupportFragment.add(getFragmentManager(), 182 new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 183 R.id.lb_guidedstep_host); 184 return; 185 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 186 GuidedStepSupportFragment.add(getFragmentManager(), 187 new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 188 return; 189 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 190 intent = new Intent(getActivity(), BrowseSupportActivity.class); 191 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 192 .toBundle(); 193 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 194 intent = new Intent(getActivity(), RowsSupportActivity.class); 195 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 196 .toBundle(); 197 } else { 198 intent = new Intent(getActivity(), DetailsSupportActivity.class); 199 intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 200 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 201 getActivity(), 202 ((ImageCardView) itemViewHolder.view).getMainImageView(), 203 DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 204 } 205 getActivity().startActivity(intent, bundle); 206 } 207 } 208 209 public static class PageRowFragmentFactory extends FragmentFactory { 210 211 @Override 212 public Fragment createFragment(Object rowObj) { 213 Row row = (Row) rowObj; 214 if (row.getHeaderItem().getId() == HEADER_ID1) { 215 return new SampleFragment(); 216 } else if (row.getHeaderItem().getId() == HEADER_ID2) { 217 return new SampleRowsSupportFragment(); 218 } 219 220 return null; 221 } 222 } 223 224 public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> { 225 226 public PageFragmentAdapterImpl(SampleFragment fragment) { 227 super(fragment); 228 setScalingEnabled(true); 229 } 230 } 231 232 public static class SampleRowsSupportFragment extends RowsSupportFragment { 233 final CardPresenter mCardPresenter = new CardPresenter(); 234 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 235 236 public SampleRowsSupportFragment() { 237 ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); 238 for (int i = 0; i < 4; i++) { 239 ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); 240 adapter.add(row); 241 } 242 setAdapter(adapter); 243 244 setOnItemViewClickedListener(new OnItemViewClickedListener() { 245 @Override 246 public void onItemClicked( 247 Presenter.ViewHolder itemViewHolder, 248 Object item, 249 RowPresenter.ViewHolder rowViewHolder, Row row) { 250 Intent intent = new Intent( 251 itemViewHolder.view.getContext(), GuidedStepSupportActivity.class); 252 startActivity(intent); 253 } 254 }); 255 } 256 257 private ArrayObjectAdapter createListRowAdapter(int i) { 258 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 259 mCardPresenter : mCardPresenter2); 260 listRowAdapter.add(new PhotoItem( 261 "Hello world", 262 R.drawable.gallery_photo_1)); 263 listRowAdapter.add(new PhotoItem( 264 "This is a test", 265 "Only a test", 266 R.drawable.gallery_photo_2)); 267 listRowAdapter.add(new PhotoItem( 268 "Android TV", 269 "by Google", 270 R.drawable.gallery_photo_3)); 271 listRowAdapter.add(new PhotoItem( 272 "Leanback", 273 R.drawable.gallery_photo_4)); 274 listRowAdapter.add(new PhotoItem( 275 "GuidedStep (Slide left/right)", 276 R.drawable.gallery_photo_5)); 277 listRowAdapter.add(new PhotoItem( 278 "GuidedStep (Slide bottom up)", 279 "Open GuidedStepSupportFragment", 280 R.drawable.gallery_photo_6)); 281 listRowAdapter.add(new PhotoItem( 282 "Android TV", 283 "open RowsSupportActivity", 284 R.drawable.gallery_photo_7)); 285 listRowAdapter.add(new PhotoItem( 286 "Leanback", 287 "open BrowseSupportActivity", 288 R.drawable.gallery_photo_8)); 289 return listRowAdapter; 290 } 291 } 292 293 public static class SampleFragment extends Fragment implements Adaptable { 294 295 final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); 296 297 @Override 298 public View onCreateView( 299 final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 300 View view = inflater.inflate(R.layout.page_fragment, container, false); 301 view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() { 302 @Override 303 public void onClick(View view) { 304 Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class); 305 startActivity(intent); 306 } 307 }); 308 309 return view; 310 } 311 312 @Override 313 public PageFragmentAdapterImpl getAdapter(Class clazz) { 314 if (clazz == MainFragmentAdapter.class) { 315 return mMainFragmentAdapter; 316 } 317 return null; 318 } 319 } 320 321 private static class MyPresenterSelector extends PresenterSelector { 322 private Presenter[] presenters = { 323 new ListRowPresenter(), 324 new PageRowPresenter() 325 }; 326 327 @Override 328 public Presenter getPresenter(Object item) { 329 if (item instanceof PageRow) { 330 return presenters[1]; 331 } 332 return presenters[0]; 333 } 334 335 @Override 336 public Presenter[] getPresenters() { 337 return presenters; 338 } 339 } 340} 341 342