Dake Gu | cc671dd | 2016-10-18 12:46:07 -0700 | [diff] [blame] | 1 | // CHECKSTYLE:OFF Generated code |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 2 | /* This file is auto-generated from PlaybackOverlayFragment.java. DO NOT MODIFY. */ |
| 3 | |
| 4 | /* |
| 5 | * Copyright (C) 2014 The Android Open Source Project |
| 6 | * |
| 7 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except |
| 8 | * in compliance with the License. You may obtain a copy of the License at |
| 9 | * |
| 10 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 11 | * |
| 12 | * Unless required by applicable law or agreed to in writing, software distributed under the License |
| 13 | * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
| 14 | * or implied. See the License for the specific language governing permissions and limitations under |
| 15 | * the License. |
| 16 | */ |
| 17 | package com.example.android.leanback; |
| 18 | |
| 19 | import android.content.Context; |
Dake Gu | 4c78d0f | 2017-02-27 16:58:41 -0800 | [diff] [blame] | 20 | import android.os.Build; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 21 | import android.os.Bundle; |
Keyvan Amiri | 8f2df00 | 2016-12-13 17:15:51 -0800 | [diff] [blame] | 22 | import android.os.Handler; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 23 | import android.support.v17.leanback.widget.Action; |
| 24 | import android.support.v17.leanback.widget.ArrayObjectAdapter; |
Dake Gu | 5a4d3a9 | 2017-03-09 14:51:07 -0800 | [diff] [blame] | 25 | import android.support.v17.leanback.widget.ClassPresenterSelector; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 26 | import android.support.v17.leanback.widget.HeaderItem; |
susnata | afd999a | 2016-08-15 17:03:24 -0700 | [diff] [blame] | 27 | import android.support.v17.leanback.widget.ListRow; |
| 28 | import android.support.v17.leanback.widget.ListRowPresenter; |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 29 | import android.support.v17.leanback.widget.OnItemViewClickedListener; |
| 30 | import android.support.v17.leanback.widget.OnItemViewSelectedListener; |
susnata | afd999a | 2016-08-15 17:03:24 -0700 | [diff] [blame] | 31 | import android.support.v17.leanback.widget.PlaybackControlsRow; |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 32 | import android.support.v17.leanback.widget.PlaybackControlsRowPresenter; |
susnata | afd999a | 2016-08-15 17:03:24 -0700 | [diff] [blame] | 33 | import android.support.v17.leanback.widget.Presenter; |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 34 | import android.support.v17.leanback.widget.Row; |
| 35 | import android.support.v17.leanback.widget.RowPresenter; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 36 | import android.support.v17.leanback.widget.SparseArrayObjectAdapter; |
| 37 | import android.util.Log; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 38 | |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 39 | public class PlaybackOverlaySupportFragment |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 40 | extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment |
Wale Ogunwale | 67574e7 | 2016-01-29 17:46:30 -0800 | [diff] [blame] | 41 | implements PlaybackOverlaySupportActivity.PictureInPictureListener { |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 42 | private static final String TAG = "leanback.PlaybackControlsFragment"; |
| 43 | |
| 44 | /** |
| 45 | * Change this to choose a different overlay background. |
| 46 | */ |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 47 | private static final int BACKGROUND_TYPE = PlaybackOverlaySupportFragment.BG_LIGHT; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 48 | |
| 49 | /** |
| 50 | * Change the number of related content rows. |
| 51 | */ |
| 52 | private static final int RELATED_CONTENT_ROWS = 3; |
| 53 | |
| 54 | /** |
| 55 | * Change this to select hidden |
| 56 | */ |
| 57 | private static final boolean SECONDARY_HIDDEN = false; |
| 58 | |
| 59 | private static final int ROW_CONTROLS = 0; |
| 60 | |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 61 | private PlaybackControlSupportHelper mGlue; |
Keyvan Amiri | 8f2df00 | 2016-12-13 17:15:51 -0800 | [diff] [blame] | 62 | final Handler mHandler = new Handler(); |
| 63 | |
| 64 | // Artificial delay to simulate a media being prepared. The onRowChanged callback should be |
| 65 | // called and the playback row UI should be updated after this delay. |
| 66 | private static final int MEDIA_PREPARATION_DELAY = 500; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 67 | |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 68 | private OnItemViewClickedListener mOnItemViewClickedListener = new OnItemViewClickedListener() { |
| 69 | @Override |
| 70 | public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, |
| 71 | RowPresenter.ViewHolder rowViewHolder, Row row) { |
| 72 | Log.i(TAG, "onItemClicked: " + item + " row " + row); |
| 73 | if (item instanceof Action) { |
| 74 | mGlue.onActionClicked((Action) item); |
| 75 | } |
| 76 | } |
| 77 | }; |
| 78 | |
| 79 | private OnItemViewSelectedListener mOnItemViewSelectedListener = |
| 80 | new OnItemViewSelectedListener() { |
| 81 | @Override |
| 82 | public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, |
| 83 | RowPresenter.ViewHolder rowViewHolder, Row row) { |
| 84 | Log.i(TAG, "onItemSelected: " + item + " row " + row); |
| 85 | } |
| 86 | }; |
| 87 | |
Aurimas Liutikas | e2104f4 | 2017-03-05 09:55:41 -0800 | [diff] [blame] | 88 | @Override |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 89 | public SparseArrayObjectAdapter getAdapter() { |
| 90 | return (SparseArrayObjectAdapter) super.getAdapter(); |
| 91 | } |
| 92 | |
| 93 | @Override |
| 94 | public void onCreate(Bundle savedInstanceState) { |
| 95 | Log.i(TAG, "onCreate"); |
| 96 | super.onCreate(savedInstanceState); |
| 97 | |
| 98 | setBackgroundType(BACKGROUND_TYPE); |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 99 | setOnItemViewSelectedListener(mOnItemViewSelectedListener); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 100 | |
| 101 | createComponents(getActivity()); |
| 102 | } |
| 103 | |
| 104 | private void createComponents(Context context) { |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 105 | mGlue = new PlaybackControlSupportHelper(context, this) { |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 106 | @Override |
| 107 | public int getUpdatePeriod() { |
Dake Gu | 3bcad88 | 2017-03-20 16:40:45 -0700 | [diff] [blame] | 108 | long totalTime = getControlsRow().getDuration(); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 109 | if (getView() == null || getView().getWidth() == 0 || totalTime <= 0) { |
| 110 | return 1000; |
| 111 | } |
Dake Gu | 3bcad88 | 2017-03-20 16:40:45 -0700 | [diff] [blame] | 112 | return 16; |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 113 | } |
| 114 | |
| 115 | @Override |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 116 | protected void onRowChanged(PlaybackControlsRow row) { |
| 117 | if (getAdapter() == null) { |
| 118 | return; |
| 119 | } |
| 120 | int index = getAdapter().indexOf(row); |
| 121 | if (index >= 0) { |
| 122 | getAdapter().notifyArrayItemRangeChanged(index, 1); |
| 123 | } |
| 124 | } |
| 125 | |
| 126 | @Override |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 127 | public void onActionClicked(Action action) { |
| 128 | if (action.getId() == R.id.lb_control_picture_in_picture) { |
Dake Gu | 4c78d0f | 2017-02-27 16:58:41 -0800 | [diff] [blame] | 129 | if (Build.VERSION.SDK_INT >= 24) { |
| 130 | getActivity().enterPictureInPictureMode(); |
| 131 | } |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 132 | return; |
| 133 | } |
| 134 | super.onActionClicked(action); |
| 135 | } |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 136 | }; |
| 137 | |
Keyvan Amiri | 8f2df00 | 2016-12-13 17:15:51 -0800 | [diff] [blame] | 138 | mGlue.setInitialized(false); |
| 139 | mHandler.postDelayed(new Runnable() { |
| 140 | @Override |
| 141 | public void run() { |
| 142 | mGlue.setInitialized(true); |
| 143 | } |
| 144 | }, MEDIA_PREPARATION_DELAY); |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 145 | mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener); |
| 146 | |
Dake Gu | 5a4d3a9 | 2017-03-09 14:51:07 -0800 | [diff] [blame] | 147 | PlaybackControlsRowPresenter playbackControlsRowPresenter = |
| 148 | mGlue.createControlsRowAndPresenter(); |
| 149 | playbackControlsRowPresenter.setSecondaryActionsHidden(SECONDARY_HIDDEN); |
| 150 | ClassPresenterSelector selector = new ClassPresenterSelector(); |
| 151 | selector.addClassPresenter(ListRow.class, new ListRowPresenter()); |
| 152 | selector.addClassPresenter(PlaybackControlsRow.class, playbackControlsRowPresenter); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 153 | |
Dake Gu | 5a4d3a9 | 2017-03-09 14:51:07 -0800 | [diff] [blame] | 154 | setAdapter(new SparseArrayObjectAdapter(selector)); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 155 | |
| 156 | // Add the controls row |
| 157 | getAdapter().set(ROW_CONTROLS, mGlue.getControlsRow()); |
| 158 | |
| 159 | // Add related content rows |
| 160 | for (int i = 0; i < RELATED_CONTENT_ROWS; ++i) { |
| 161 | ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter()); |
| 162 | listRowAdapter.add("Some related content"); |
| 163 | listRowAdapter.add("Other related content"); |
| 164 | HeaderItem header = new HeaderItem(i, "Row " + i); |
| 165 | getAdapter().set(ROW_CONTROLS + 1 + i, new ListRow(header, listRowAdapter)); |
| 166 | } |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 167 | |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 168 | } |
| 169 | |
| 170 | @Override |
| 171 | public void onStart() { |
| 172 | super.onStart(); |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 173 | mGlue.setFadingEnabled(true); |
| 174 | mGlue.enableProgressUpdating(true); |
Wale Ogunwale | 67574e7 | 2016-01-29 17:46:30 -0800 | [diff] [blame] | 175 | ((PlaybackOverlaySupportActivity) getActivity()).registerPictureInPictureListener(this); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 176 | } |
| 177 | |
| 178 | @Override |
| 179 | public void onStop() { |
Dake Gu | ef05d54 | 2016-12-07 11:04:42 -0800 | [diff] [blame] | 180 | mGlue.enableProgressUpdating(false); |
Dongwon Kang | 7f0679e | 2016-03-04 10:37:51 -0800 | [diff] [blame] | 181 | ((PlaybackOverlaySupportActivity) getActivity()).unregisterPictureInPictureListener(this); |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 182 | super.onStop(); |
| 183 | } |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 184 | |
| 185 | @Override |
Andrii Kulian | fa89d61 | 2016-03-29 17:34:18 -0700 | [diff] [blame] | 186 | public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { |
| 187 | if (isInPictureInPictureMode) { |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 188 | // Hide the controls in picture-in-picture mode. |
| 189 | setFadingEnabled(true); |
| 190 | fadeOut(); |
| 191 | } else { |
Dake Gu | 3bcad88 | 2017-03-20 16:40:45 -0700 | [diff] [blame] | 192 | setFadingEnabled(mGlue.isPlaying()); |
Dongwon Kang | 65a3466 | 2016-01-14 16:19:49 -0800 | [diff] [blame] | 193 | } |
| 194 | } |
Dake Gu | 47e9b75 | 2015-09-30 13:41:45 -0700 | [diff] [blame] | 195 | } |