BrowseSupportFragment.java revision acccd0ab69d4c55e763b452c007aed7d14cf6654
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 @Override 232 public void setEntranceTransitionState(boolean state) { 233 getFragment().setEntranceTransitionState(state); 234 } 235 } 236 237 public static class SampleRowsSupportFragment extends RowsSupportFragment { 238 final CardPresenter mCardPresenter = new CardPresenter(); 239 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 240 241 public SampleRowsSupportFragment() { 242 ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); 243 for (int i = 0; i < 4; i++) { 244 ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); 245 adapter.add(row); 246 } 247 setAdapter(adapter); 248 249 setOnItemViewClickedListener(new OnItemViewClickedListener() { 250 @Override 251 public void onItemClicked( 252 Presenter.ViewHolder itemViewHolder, 253 Object item, 254 RowPresenter.ViewHolder rowViewHolder, Row row) { 255 Intent intent = new Intent( 256 itemViewHolder.view.getContext(), GuidedStepSupportActivity.class); 257 startActivity(intent); 258 } 259 }); 260 } 261 262 private ArrayObjectAdapter createListRowAdapter(int i) { 263 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 264 mCardPresenter : mCardPresenter2); 265 listRowAdapter.add(new PhotoItem( 266 "Hello world", 267 R.drawable.gallery_photo_1)); 268 listRowAdapter.add(new PhotoItem( 269 "This is a test", 270 "Only a test", 271 R.drawable.gallery_photo_2)); 272 listRowAdapter.add(new PhotoItem( 273 "Android TV", 274 "by Google", 275 R.drawable.gallery_photo_3)); 276 listRowAdapter.add(new PhotoItem( 277 "Leanback", 278 R.drawable.gallery_photo_4)); 279 listRowAdapter.add(new PhotoItem( 280 "GuidedStep (Slide left/right)", 281 R.drawable.gallery_photo_5)); 282 listRowAdapter.add(new PhotoItem( 283 "GuidedStep (Slide bottom up)", 284 "Open GuidedStepSupportFragment", 285 R.drawable.gallery_photo_6)); 286 listRowAdapter.add(new PhotoItem( 287 "Android TV", 288 "open RowsSupportActivity", 289 R.drawable.gallery_photo_7)); 290 listRowAdapter.add(new PhotoItem( 291 "Leanback", 292 "open BrowseSupportActivity", 293 R.drawable.gallery_photo_8)); 294 return listRowAdapter; 295 } 296 } 297 298 public static class SampleFragment extends Fragment implements Adaptable { 299 300 final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); 301 302 boolean mEntranceTransitionState = true; 303 304 public void setEntranceTransitionState(boolean state) { 305 mEntranceTransitionState = state; 306 final View view = getView(); 307 if (view == null) { 308 return; 309 } 310 int visibility = state ? View.VISIBLE : View.INVISIBLE; 311 view.findViewById(R.id.tv1).setVisibility(visibility); 312 view.findViewById(R.id.tv2).setVisibility(visibility); 313 view.findViewById(R.id.tv3).setVisibility(visibility); 314 } 315 316 @Override 317 public View onCreateView( 318 final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 319 View view = inflater.inflate(R.layout.page_fragment, container, false); 320 view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() { 321 @Override 322 public void onClick(View view) { 323 Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class); 324 startActivity(intent); 325 } 326 }); 327 328 return view; 329 } 330 331 @Override 332 public void onViewCreated(View view, Bundle savedInstanceState) { 333 setEntranceTransitionState(mEntranceTransitionState); 334 } 335 336 @Override 337 public PageFragmentAdapterImpl getAdapter(Class clazz) { 338 if (clazz == MainFragmentAdapter.class) { 339 return mMainFragmentAdapter; 340 } 341 return null; 342 } 343 } 344 345 private static class MyPresenterSelector extends PresenterSelector { 346 private Presenter[] presenters = { 347 new ListRowPresenter(), 348 new PageRowPresenter() 349 }; 350 351 @Override 352 public Presenter getPresenter(Object item) { 353 if (item instanceof PageRow) { 354 return presenters[1]; 355 } 356 return presenters[0]; 357 } 358 359 @Override 360 public Presenter[] getPresenters() { 361 return presenters; 362 } 363 } 364} 365 366