BrowseSupportFragment.java revision 8f94d180902da7469b67f7c47c93a3a0b9acdb3a
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.GuidedStepSupportFragment; 23import android.support.v17.leanback.app.RowsSupportFragment; 24import android.support.v17.leanback.widget.ArrayObjectAdapter; 25import android.support.v17.leanback.widget.DividerRow; 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.Presenter; 34import android.support.v17.leanback.widget.Row; 35import android.support.v17.leanback.widget.RowPresenter; 36import android.support.v17.leanback.widget.SectionRow; 37import android.support.v4.app.ActivityOptionsCompat; 38import android.util.Log; 39import android.view.LayoutInflater; 40import android.view.View; 41import android.view.ViewGroup; 42 43public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment { 44 private static final String TAG = "leanback.BrowseSupportFragment"; 45 46 private static final boolean TEST_ENTRANCE_TRANSITION = true; 47 private static final int NUM_ROWS = 8; 48 private static final long HEADER_ID1 = 1001; 49 private static final long HEADER_ID2 = 1002; 50 private static final long HEADER_ID3 = 1003; 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 ListRowPresenter()); 120 setAdapter(mRowsAdapter); 121 } 122 123 private void loadData() { 124 int i = 0; 125 126 mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0"))); 127 mRowsAdapter.add(new DividerRow()); 128 129 mRowsAdapter.add(new SectionRow(new HeaderItem("section 0"))); 130 for (; i < NUM_ROWS; ++i) { 131 mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i))); 132 } 133 134 mRowsAdapter.add(new DividerRow()); 135 mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1"))); 136 137 mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID3, "Page Row 2"))); 138 } 139 140 private ArrayObjectAdapter createListRowAdapter(int i) { 141 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 142 mCardPresenter : mCardPresenter2); 143 listRowAdapter.add(new PhotoItem( 144 "Hello world", 145 R.drawable.gallery_photo_1)); 146 listRowAdapter.add(new PhotoItem( 147 "This is a test", 148 "Only a test", 149 R.drawable.gallery_photo_2)); 150 listRowAdapter.add(new PhotoItem( 151 "Android TV", 152 "by Google", 153 R.drawable.gallery_photo_3)); 154 listRowAdapter.add(new PhotoItem( 155 "Leanback", 156 R.drawable.gallery_photo_4)); 157 listRowAdapter.add(new PhotoItem( 158 "GuidedStep (Slide left/right)", 159 R.drawable.gallery_photo_5)); 160 listRowAdapter.add(new PhotoItem( 161 "GuidedStep (Slide bottom up)", 162 "Open GuidedStepSupportFragment", 163 R.drawable.gallery_photo_6)); 164 listRowAdapter.add(new PhotoItem( 165 "Android TV", 166 "open RowsSupportActivity", 167 R.drawable.gallery_photo_7)); 168 listRowAdapter.add(new PhotoItem( 169 "Leanback", 170 "open BrowseSupportActivity", 171 R.drawable.gallery_photo_8)); 172 listRowAdapter.add(new PhotoItem( 173 "Leanback", 174 "open BrowseSupportActivity", 175 R.drawable.gallery_photo_8)); 176 listRowAdapter.add(new PhotoItem( 177 "Leanback", 178 "open BrowseSupportActivity", 179 R.drawable.gallery_photo_8)); 180 return listRowAdapter; 181 } 182 183 private final class ItemViewClickedListener implements OnItemViewClickedListener { 184 @Override 185 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 186 RowPresenter.ViewHolder rowViewHolder, Row row) { 187 188 Intent intent; 189 Bundle bundle; 190 if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 191 GuidedStepSupportFragment.add(getFragmentManager(), 192 new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 193 R.id.lb_guidedstep_host); 194 return; 195 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 196 GuidedStepSupportFragment.add(getFragmentManager(), 197 new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 198 return; 199 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 200 intent = new Intent(getActivity(), BrowseSupportActivity.class); 201 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 202 .toBundle(); 203 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 204 intent = new Intent(getActivity(), RowsSupportActivity.class); 205 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 206 .toBundle(); 207 } else { 208 intent = new Intent(getActivity(), DetailsSupportActivity.class); 209 intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 210 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 211 getActivity(), 212 ((ImageCardView) itemViewHolder.view).getMainImageView(), 213 DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 214 } 215 getActivity().startActivity(intent, bundle); 216 } 217 } 218 219 public static class PageRowFragmentFactory extends FragmentFactory { 220 221 @Override 222 public Fragment createFragment(Object rowObj) { 223 Row row = (Row) rowObj; 224 if (row.getHeaderItem().getId() == HEADER_ID1) { 225 return new SampleFragment(); 226 } else if (row.getHeaderItem().getId() == HEADER_ID2) { 227 return new SampleRowsSupportFragment(); 228 } else if (row.getHeaderItem().getId() == HEADER_ID3) { 229 return new SampleFragment(); 230 } 231 232 return null; 233 } 234 } 235 236 public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> { 237 238 public PageFragmentAdapterImpl(SampleFragment fragment) { 239 super(fragment); 240 setScalingEnabled(true); 241 } 242 243 @Override 244 public void setEntranceTransitionState(boolean state) { 245 getFragment().setEntranceTransitionState(state); 246 } 247 } 248 249 public static class SampleRowsSupportFragment extends RowsSupportFragment { 250 final CardPresenter mCardPresenter = new CardPresenter(); 251 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 252 253 public SampleRowsSupportFragment() { 254 ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); 255 for (int i = 0; i < 4; i++) { 256 ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); 257 adapter.add(row); 258 } 259 setAdapter(adapter); 260 261 setOnItemViewClickedListener(new OnItemViewClickedListener() { 262 @Override 263 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) { 264 Intent intent; 265 Bundle bundle; 266 if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 267 GuidedStepSupportFragment.add(getFragmentManager(), 268 new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 269 R.id.lb_guidedstep_host); 270 return; 271 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 272 GuidedStepSupportFragment.add(getFragmentManager(), 273 new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 274 return; 275 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 276 intent = new Intent(getActivity(), BrowseSupportActivity.class); 277 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 278 .toBundle(); 279 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 280 intent = new Intent(getActivity(), RowsSupportActivity.class); 281 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 282 .toBundle(); 283 } else { 284 intent = new Intent(getActivity(), DetailsSupportActivity.class); 285 intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 286 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 287 getActivity(), 288 ((ImageCardView) itemViewHolder.view).getMainImageView(), 289 DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 290 } 291 getActivity().startActivity(intent, bundle); 292 } 293 }); 294 } 295 296 private ArrayObjectAdapter createListRowAdapter(int i) { 297 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 298 mCardPresenter : mCardPresenter2); 299 listRowAdapter.add(new PhotoItem( 300 "Hello world", 301 R.drawable.gallery_photo_1)); 302 listRowAdapter.add(new PhotoItem( 303 "This is a test", 304 "Only a test", 305 R.drawable.gallery_photo_2)); 306 listRowAdapter.add(new PhotoItem( 307 "Android TV", 308 "by Google", 309 R.drawable.gallery_photo_3)); 310 listRowAdapter.add(new PhotoItem( 311 "Leanback", 312 R.drawable.gallery_photo_4)); 313 listRowAdapter.add(new PhotoItem( 314 "GuidedStep (Slide left/right)", 315 R.drawable.gallery_photo_5)); 316 listRowAdapter.add(new PhotoItem( 317 "GuidedStep (Slide bottom up)", 318 "Open GuidedStepSupportFragment", 319 R.drawable.gallery_photo_6)); 320 listRowAdapter.add(new PhotoItem( 321 "Android TV", 322 "open RowsSupportActivity", 323 R.drawable.gallery_photo_7)); 324 listRowAdapter.add(new PhotoItem( 325 "Leanback", 326 "open BrowseSupportActivity", 327 R.drawable.gallery_photo_8)); 328 return listRowAdapter; 329 } 330 } 331 332 public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider { 333 334 final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); 335 336 boolean mEntranceTransitionState = true; 337 338 public void setEntranceTransitionState(boolean state) { 339 mEntranceTransitionState = state; 340 final View view = getView(); 341 if (view == null) { 342 return; 343 } 344 int visibility = state ? View.VISIBLE : View.INVISIBLE; 345 view.findViewById(R.id.tv1).setVisibility(visibility); 346 view.findViewById(R.id.tv2).setVisibility(visibility); 347 view.findViewById(R.id.tv3).setVisibility(visibility); 348 } 349 350 @Override 351 public View onCreateView( 352 final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 353 View view = inflater.inflate(R.layout.page_fragment, container, false); 354 view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() { 355 @Override 356 public void onClick(View view) { 357 Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class); 358 startActivity(intent); 359 } 360 }); 361 362 return view; 363 } 364 365 @Override 366 public void onStart() { 367 super.onStart(); 368 mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); 369 } 370 371 @Override 372 public void onViewCreated(View view, Bundle savedInstanceState) { 373 setEntranceTransitionState(mEntranceTransitionState); 374 } 375 376 @Override 377 public MainFragmentAdapter getMainFragmentAdapter() { 378 return mMainFragmentAdapter; 379 } 380 } 381} 382