PlaybackOverlaySupportFragment.java revision 67574e7a0e9d9af9f88cfc41fc1ab3e119e8d2a0
1/* This file is auto-generated from PlaybackOverlayFragment.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.content.Context; 19import android.graphics.drawable.Drawable; 20import android.os.Bundle; 21import android.os.Handler; 22import android.support.v17.leanback.app.PlaybackControlGlue; 23import android.support.v17.leanback.widget.Action; 24import android.support.v17.leanback.widget.ArrayObjectAdapter; 25import android.support.v17.leanback.widget.PlaybackControlsRow; 26import android.support.v17.leanback.widget.PlaybackControlsRow.RepeatAction; 27import android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsUpAction; 28import android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsDownAction; 29import android.support.v17.leanback.widget.PlaybackControlsRowPresenter; 30import android.support.v17.leanback.widget.HeaderItem; 31import android.support.v17.leanback.widget.PresenterSelector; 32import android.support.v17.leanback.widget.Row; 33import android.support.v17.leanback.widget.ListRow; 34import android.support.v17.leanback.widget.Presenter; 35import android.support.v17.leanback.widget.RowPresenter; 36import android.support.v17.leanback.widget.ListRowPresenter; 37import android.support.v17.leanback.widget.OnItemViewSelectedListener; 38import android.support.v17.leanback.widget.OnItemViewClickedListener; 39import android.support.v17.leanback.widget.ControlButtonPresenterSelector; 40import android.support.v17.leanback.widget.SparseArrayObjectAdapter; 41import android.util.Log; 42import android.view.LayoutInflater; 43import android.view.View; 44import android.view.ViewGroup; 45import android.widget.Toast; 46 47public class PlaybackOverlaySupportFragment 48 extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment 49 implements PlaybackOverlaySupportActivity.PictureInPictureListener { 50 private static final String TAG = "leanback.PlaybackControlsFragment"; 51 52 /** 53 * Change this to choose a different overlay background. 54 */ 55 private static final int BACKGROUND_TYPE = PlaybackOverlaySupportFragment.BG_LIGHT; 56 57 /** 58 * Change the number of related content rows. 59 */ 60 private static final int RELATED_CONTENT_ROWS = 3; 61 62 /** 63 * Change this to select hidden 64 */ 65 private static final boolean SECONDARY_HIDDEN = false; 66 67 private static final int ROW_CONTROLS = 0; 68 69 private PlaybackControlSupportHelper mGlue; 70 private PlaybackControlsRowPresenter mPlaybackControlsRowPresenter; 71 private ListRowPresenter mListRowPresenter; 72 73 private OnItemViewClickedListener mOnItemViewClickedListener = new OnItemViewClickedListener() { 74 @Override 75 public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 76 RowPresenter.ViewHolder rowViewHolder, Row row) { 77 Log.i(TAG, "onItemClicked: " + item + " row " + row); 78 if (item instanceof Action) { 79 mGlue.onActionClicked((Action) item); 80 } 81 } 82 }; 83 84 private OnItemViewSelectedListener mOnItemViewSelectedListener = new OnItemViewSelectedListener() { 85 @Override 86 public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 87 RowPresenter.ViewHolder rowViewHolder, Row row) { 88 Log.i(TAG, "onItemSelected: " + item + " row " + row); 89 } 90 }; 91 92 public SparseArrayObjectAdapter getAdapter() { 93 return (SparseArrayObjectAdapter) super.getAdapter(); 94 } 95 96 @Override 97 public void onCreate(Bundle savedInstanceState) { 98 Log.i(TAG, "onCreate"); 99 super.onCreate(savedInstanceState); 100 101 setBackgroundType(BACKGROUND_TYPE); 102 setOnItemViewSelectedListener(mOnItemViewSelectedListener); 103 104 createComponents(getActivity()); 105 } 106 107 private void createComponents(Context context) { 108 mGlue = new PlaybackControlSupportHelper(context, this) { 109 @Override 110 public int getUpdatePeriod() { 111 int totalTime = getControlsRow().getTotalTime(); 112 if (getView() == null || getView().getWidth() == 0 || totalTime <= 0) { 113 return 1000; 114 } 115 return Math.max(16, totalTime / getView().getWidth()); 116 } 117 118 @Override 119 protected void onRowChanged(PlaybackControlsRow row) { 120 if (getAdapter() == null) { 121 return; 122 } 123 int index = getAdapter().indexOf(row); 124 if (index >= 0) { 125 getAdapter().notifyArrayItemRangeChanged(index, 1); 126 } 127 } 128 129 @Override 130 public void onActionClicked(Action action) { 131 if (action.getId() == R.id.lb_control_picture_in_picture) { 132 getActivity().enterPictureInPicture(); 133 return; 134 } 135 super.onActionClicked(action); 136 } 137 }; 138 139 mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener); 140 141 mPlaybackControlsRowPresenter = mGlue.createControlsRowAndPresenter(); 142 mPlaybackControlsRowPresenter.setSecondaryActionsHidden(SECONDARY_HIDDEN); 143 mListRowPresenter = new ListRowPresenter(); 144 145 setAdapter(new SparseArrayObjectAdapter(new PresenterSelector() { 146 @Override 147 public Presenter getPresenter(Object object) { 148 if (object instanceof PlaybackControlsRow) { 149 return mPlaybackControlsRowPresenter; 150 } else if (object instanceof ListRow) { 151 return mListRowPresenter; 152 } 153 throw new IllegalArgumentException("Unhandled object: " + object); 154 } 155 })); 156 157 // Add the controls row 158 getAdapter().set(ROW_CONTROLS, mGlue.getControlsRow()); 159 160 // Add related content rows 161 for (int i = 0; i < RELATED_CONTENT_ROWS; ++i) { 162 ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter()); 163 listRowAdapter.add("Some related content"); 164 listRowAdapter.add("Other related content"); 165 HeaderItem header = new HeaderItem(i, "Row " + i); 166 getAdapter().set(ROW_CONTROLS + 1 + i, new ListRow(header, listRowAdapter)); 167 } 168 169 } 170 171 @Override 172 public void onStart() { 173 super.onStart(); 174 mGlue.setFadingEnabled(true); 175 mGlue.enableProgressUpdating(mGlue.hasValidMedia() && mGlue.isMediaPlaying()); 176 ((PlaybackOverlaySupportActivity) getActivity()).registerPictureInPictureListener(this); 177 } 178 179 @Override 180 public void onStop() { 181 mGlue.enableProgressUpdating(false); 182 ((PlaybackOverlaySupportActivity) getActivity()).unregisterPictureInPictureListener( 183 this); 184 super.onStop(); 185 } 186 187 @Override 188 public void onPictureInPictureChanged(boolean inPictureInPicture) { 189 if (inPictureInPicture) { 190 // Hide the controls in picture-in-picture mode. 191 setFadingEnabled(true); 192 fadeOut(); 193 } else { 194 setFadingEnabled(mGlue.isMediaPlaying()); 195 } 196 } 197} 198