PlaybackTransportControlFragment.java revision 3bcad88cbf4488e747d84893c35f2351b8f84afe
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.example.android.leanback; 18 19import android.content.Context; 20import android.os.Build; 21import android.os.Bundle; 22import android.support.v17.leanback.app.PlaybackFragmentGlueHost; 23import android.support.v17.leanback.widget.Action; 24import android.support.v17.leanback.widget.ArrayObjectAdapter; 25import android.support.v17.leanback.widget.ClassPresenterSelector; 26import android.support.v17.leanback.widget.HeaderItem; 27import android.support.v17.leanback.widget.ListRow; 28import android.support.v17.leanback.widget.ListRowPresenter; 29import android.support.v17.leanback.widget.SparseArrayObjectAdapter; 30import android.util.Log; 31 32/** 33 * Example of PlaybackFragment working with a PlaybackControlGlue. 34 */ 35public class PlaybackTransportControlFragment 36 extends android.support.v17.leanback.app.PlaybackFragment 37 implements PlaybackTransportControlActivity.PictureInPictureListener { 38 private static final String TAG = "TransportFragment"; 39 40 /** 41 * Change this to choose a different overlay background. 42 */ 43 private static final int BACKGROUND_TYPE = BG_DARK; 44 45 /** 46 * Change the number of related content rows. 47 */ 48 private static final int RELATED_CONTENT_ROWS = 3; 49 50 private static final int ROW_CONTROLS = 0; 51 52 private PlaybackTransportControlGlueSample mGlue; 53 54 public SparseArrayObjectAdapter getAdapter() { 55 return (SparseArrayObjectAdapter) super.getAdapter(); 56 } 57 58 @Override 59 public void onCreate(Bundle savedInstanceState) { 60 Log.i(TAG, "onCreate"); 61 super.onCreate(savedInstanceState); 62 63 setBackgroundType(BACKGROUND_TYPE); 64 65 createComponents(getActivity()); 66 } 67 68 private void createComponents(Context context) { 69 mGlue = new PlaybackTransportControlGlueSample(context, new PlayerAdapter()) { 70 @Override 71 public void onActionClicked(Action action) { 72 if (action.getId() == R.id.lb_control_picture_in_picture) { 73 if (Build.VERSION.SDK_INT >= 24) { 74 getActivity().enterPictureInPictureMode(); 75 } 76 return; 77 } 78 super.onActionClicked(action); 79 } 80 81 }; 82 83 mGlue.setTitle("Title"); 84 mGlue.setSubtitle("Android developer"); 85 mGlue.setHost(new PlaybackFragmentGlueHost(this)); 86 mGlue.setSeekProvider(new PlaybackSeekDataProviderSample( 87 PlayerAdapter.FAUX_DURATION, 100)); 88 89 ClassPresenterSelector selector = new ClassPresenterSelector(); 90 selector.addClassPresenter(ListRow.class, new ListRowPresenter()); 91 setAdapter(new SparseArrayObjectAdapter(selector)); 92 93 // Add related content rows 94 for (int i = 0; i < RELATED_CONTENT_ROWS; ++i) { 95 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter()); 96 listRowAdapter.add("Some related content"); 97 listRowAdapter.add("Other related content"); 98 HeaderItem header = new HeaderItem(i, "Row " + i); 99 getAdapter().set(ROW_CONTROLS + 1 + i, new ListRow(header, listRowAdapter)); 100 } 101 } 102 103 @Override 104 public void onStart() { 105 super.onStart(); 106 ((PlaybackTransportControlActivity) getActivity()).registerPictureInPictureListener(this); 107 } 108 109 @Override 110 public void onStop() { 111 ((PlaybackTransportControlActivity) getActivity()).unregisterPictureInPictureListener(this); 112 super.onStop(); 113 } 114 115 @Override 116 public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { 117 if (isInPictureInPictureMode) { 118 // Hide the controls in picture-in-picture mode. 119 setControlsOverlayAutoHideEnabled(true); 120 hideControlsOverlay(true); 121 } else { 122 setControlsOverlayAutoHideEnabled(mGlue.isPlaying()); 123 } 124 } 125} 126