BrowseSupportFragment.java revision 5635fbd2da9e73c8f68287626728f909565c7a8a
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.DividerRow; 29import android.support.v17.leanback.widget.SectionRow; 30import android.support.v17.leanback.widget.ListRow; 31import android.support.v17.leanback.widget.ListRowPresenter; 32import android.support.v17.leanback.widget.OnItemViewClickedListener; 33import android.support.v17.leanback.widget.OnItemViewSelectedListener; 34import android.support.v17.leanback.widget.PageRow; 35import android.support.v17.leanback.widget.Presenter; 36import android.support.v17.leanback.widget.PresenterSelector; 37import android.support.v17.leanback.widget.Row; 38import android.support.v17.leanback.widget.RowPresenter; 39import android.support.v4.app.ActivityOptionsCompat; 40import android.util.Log; 41import android.view.LayoutInflater; 42import android.view.View; 43import android.view.ViewGroup; 44 45public class BrowseSupportFragment extends android.support.v17.leanback.app.BrowseSupportFragment { 46 private static final String TAG = "leanback.BrowseSupportFragment"; 47 48 private static final boolean TEST_ENTRANCE_TRANSITION = true; 49 private static final int NUM_ROWS = 8; 50 private static final long HEADER_ID1 = 1001; 51 private static final long HEADER_ID2 = 1002; 52 53 private ArrayObjectAdapter mRowsAdapter; 54 private BackgroundHelper mBackgroundHelper = new BackgroundHelper(); 55 56 // For good performance, it's important to use a single instance of 57 // a card presenter for all rows using that presenter. 58 final CardPresenter mCardPresenter = new CardPresenter(); 59 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 60 61 public BrowseSupportFragment() { 62 getMainFragmentRegistry().registerFragment(PageRow.class, new PageRowFragmentFactory()); 63 } 64 65 @Override 66 public void onCreate(Bundle savedInstanceState) { 67 Log.i(TAG, "onCreate"); 68 super.onCreate(savedInstanceState); 69 70 setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.ic_title)); 71 setTitle("Leanback Sample App"); 72 setHeadersState(HEADERS_ENABLED); 73 setupRows(); 74 setOnSearchClickedListener(new View.OnClickListener() { 75 @Override 76 public void onClick(View view) { 77 Intent intent = new Intent(getActivity(), SearchSupportActivity.class); 78 startActivity(intent); 79 } 80 }); 81 82 setOnItemViewClickedListener(new ItemViewClickedListener()); 83 setOnItemViewSelectedListener(new OnItemViewSelectedListener() { 84 @Override 85 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 86 RowPresenter.ViewHolder rowViewHolder, Row row) { 87 Log.i(TAG, "onItemSelected: " + item + " row " + row); 88 89 if (isShowingHeaders()) { 90 mBackgroundHelper.setBackground(getActivity(), null); 91 } else if (item instanceof PhotoItem) { 92 mBackgroundHelper.setBackground( 93 getActivity(), ((PhotoItem) item).getImageResourceId()); 94 } 95 } 96 }); 97 if (TEST_ENTRANCE_TRANSITION) { 98 // don't run entrance transition if fragment is restored. 99 if (savedInstanceState == null) { 100 prepareEntranceTransition(); 101 } 102 } 103 104 // simulates in a real world use case data being loaded two seconds later 105 new Handler().postDelayed(new Runnable() { 106 public void run() { 107 loadData(); 108 startEntranceTransition(); 109 } 110 }, 2000); 111 } 112 113 @Override 114 public View onCreateView( 115 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 116 return super.onCreateView(inflater, container, savedInstanceState); 117 } 118 119 private void setupRows() { 120 mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); 121 setAdapter(mRowsAdapter); 122 } 123 124 private void loadData() { 125 int i = 0; 126 127 mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID1, "Page Row 0"))); 128 mRowsAdapter.add(new DividerRow()); 129 130 mRowsAdapter.add(new SectionRow(new HeaderItem("section 0"))); 131 for (; i < NUM_ROWS; ++i) { 132 mRowsAdapter.add(new ListRow(new HeaderItem(i, "Row " + i), createListRowAdapter(i))); 133 } 134 135 mRowsAdapter.add(new DividerRow()); 136 mRowsAdapter.add(new PageRow(new HeaderItem(HEADER_ID2, "Page Row 1"))); 137 } 138 139 private ArrayObjectAdapter createListRowAdapter(int i) { 140 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 141 mCardPresenter : mCardPresenter2); 142 listRowAdapter.add(new PhotoItem( 143 "Hello world", 144 R.drawable.gallery_photo_1)); 145 listRowAdapter.add(new PhotoItem( 146 "This is a test", 147 "Only a test", 148 R.drawable.gallery_photo_2)); 149 listRowAdapter.add(new PhotoItem( 150 "Android TV", 151 "by Google", 152 R.drawable.gallery_photo_3)); 153 listRowAdapter.add(new PhotoItem( 154 "Leanback", 155 R.drawable.gallery_photo_4)); 156 listRowAdapter.add(new PhotoItem( 157 "GuidedStep (Slide left/right)", 158 R.drawable.gallery_photo_5)); 159 listRowAdapter.add(new PhotoItem( 160 "GuidedStep (Slide bottom up)", 161 "Open GuidedStepSupportFragment", 162 R.drawable.gallery_photo_6)); 163 listRowAdapter.add(new PhotoItem( 164 "Android TV", 165 "open RowsSupportActivity", 166 R.drawable.gallery_photo_7)); 167 listRowAdapter.add(new PhotoItem( 168 "Leanback", 169 "open BrowseSupportActivity", 170 R.drawable.gallery_photo_8)); 171 return listRowAdapter; 172 } 173 174 private final class ItemViewClickedListener implements OnItemViewClickedListener { 175 @Override 176 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 177 RowPresenter.ViewHolder rowViewHolder, Row row) { 178 179 Intent intent; 180 Bundle bundle; 181 if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { 182 GuidedStepSupportFragment.add(getFragmentManager(), 183 new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), 184 R.id.lb_guidedstep_host); 185 return; 186 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { 187 GuidedStepSupportFragment.add(getFragmentManager(), 188 new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); 189 return; 190 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { 191 intent = new Intent(getActivity(), BrowseSupportActivity.class); 192 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 193 .toBundle(); 194 } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { 195 intent = new Intent(getActivity(), RowsSupportActivity.class); 196 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) 197 .toBundle(); 198 } else { 199 intent = new Intent(getActivity(), DetailsSupportActivity.class); 200 intent.putExtra(DetailsSupportActivity.EXTRA_ITEM, (PhotoItem) item); 201 bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( 202 getActivity(), 203 ((ImageCardView) itemViewHolder.view).getMainImageView(), 204 DetailsSupportActivity.SHARED_ELEMENT_NAME).toBundle(); 205 } 206 getActivity().startActivity(intent, bundle); 207 } 208 } 209 210 public static class PageRowFragmentFactory extends FragmentFactory { 211 212 @Override 213 public Fragment createFragment(Object rowObj) { 214 Row row = (Row) rowObj; 215 if (row.getHeaderItem().getId() == HEADER_ID1) { 216 return new SampleFragment(); 217 } else if (row.getHeaderItem().getId() == HEADER_ID2) { 218 return new SampleRowsSupportFragment(); 219 } 220 221 return null; 222 } 223 } 224 225 public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> { 226 227 public PageFragmentAdapterImpl(SampleFragment fragment) { 228 super(fragment); 229 setScalingEnabled(true); 230 } 231 232 @Override 233 public void setEntranceTransitionState(boolean state) { 234 getFragment().setEntranceTransitionState(state); 235 } 236 } 237 238 public static class SampleRowsSupportFragment extends RowsSupportFragment { 239 final CardPresenter mCardPresenter = new CardPresenter(); 240 final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); 241 242 public SampleRowsSupportFragment() { 243 ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); 244 for (int i = 0; i < 4; i++) { 245 ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); 246 adapter.add(row); 247 } 248 setAdapter(adapter); 249 250 setOnItemViewClickedListener(new OnItemViewClickedListener() { 251 @Override 252 public void onItemClicked( 253 Presenter.ViewHolder itemViewHolder, 254 Object item, 255 RowPresenter.ViewHolder rowViewHolder, Row row) { 256 Intent intent = new Intent( 257 itemViewHolder.view.getContext(), GuidedStepSupportActivity.class); 258 startActivity(intent); 259 } 260 }); 261 } 262 263 private ArrayObjectAdapter createListRowAdapter(int i) { 264 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter((i & 1) == 0 ? 265 mCardPresenter : mCardPresenter2); 266 listRowAdapter.add(new PhotoItem( 267 "Hello world", 268 R.drawable.gallery_photo_1)); 269 listRowAdapter.add(new PhotoItem( 270 "This is a test", 271 "Only a test", 272 R.drawable.gallery_photo_2)); 273 listRowAdapter.add(new PhotoItem( 274 "Android TV", 275 "by Google", 276 R.drawable.gallery_photo_3)); 277 listRowAdapter.add(new PhotoItem( 278 "Leanback", 279 R.drawable.gallery_photo_4)); 280 listRowAdapter.add(new PhotoItem( 281 "GuidedStep (Slide left/right)", 282 R.drawable.gallery_photo_5)); 283 listRowAdapter.add(new PhotoItem( 284 "GuidedStep (Slide bottom up)", 285 "Open GuidedStepSupportFragment", 286 R.drawable.gallery_photo_6)); 287 listRowAdapter.add(new PhotoItem( 288 "Android TV", 289 "open RowsSupportActivity", 290 R.drawable.gallery_photo_7)); 291 listRowAdapter.add(new PhotoItem( 292 "Leanback", 293 "open BrowseSupportActivity", 294 R.drawable.gallery_photo_8)); 295 return listRowAdapter; 296 } 297 } 298 299 public static class SampleFragment extends Fragment implements Adaptable { 300 301 final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); 302 303 boolean mEntranceTransitionState = true; 304 305 public void setEntranceTransitionState(boolean state) { 306 mEntranceTransitionState = state; 307 final View view = getView(); 308 if (view == null) { 309 return; 310 } 311 int visibility = state ? View.VISIBLE : View.INVISIBLE; 312 view.findViewById(R.id.tv1).setVisibility(visibility); 313 view.findViewById(R.id.tv2).setVisibility(visibility); 314 view.findViewById(R.id.tv3).setVisibility(visibility); 315 } 316 317 @Override 318 public View onCreateView( 319 final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 320 View view = inflater.inflate(R.layout.page_fragment, container, false); 321 view.findViewById(R.id.tv1).setOnClickListener(new View.OnClickListener() { 322 @Override 323 public void onClick(View view) { 324 Intent intent = new Intent(inflater.getContext(), GuidedStepSupportActivity.class); 325 startActivity(intent); 326 } 327 }); 328 329 return view; 330 } 331 332 @Override 333 public void onStart() { 334 super.onStart(); 335 mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); 336 } 337 338 @Override 339 public void onViewCreated(View view, Bundle savedInstanceState) { 340 setEntranceTransitionState(mEntranceTransitionState); 341 } 342 343 @Override 344 public PageFragmentAdapterImpl getAdapter(Class clazz) { 345 if (clazz == MainFragmentAdapter.class) { 346 return mMainFragmentAdapter; 347 } 348 return null; 349 } 350 } 351 352} 353 354