blob: 5642557889b449ca729b3d65801a627fd53c7a76 [file] [log] [blame]
Dake Gucc671dd2016-10-18 12:46:07 -07001// CHECKSTYLE:OFF Generated code
Dake Gu47e9b752015-09-30 13:41:45 -07002/* 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 */
17package com.example.android.leanback;
18
19import android.content.Context;
Dake Gu4c78d0f2017-02-27 16:58:41 -080020import android.os.Build;
Dake Gu47e9b752015-09-30 13:41:45 -070021import android.os.Bundle;
Keyvan Amiri8f2df002016-12-13 17:15:51 -080022import android.os.Handler;
Dake Gu47e9b752015-09-30 13:41:45 -070023import android.support.v17.leanback.widget.Action;
24import android.support.v17.leanback.widget.ArrayObjectAdapter;
Dake Gu5a4d3a92017-03-09 14:51:07 -080025import android.support.v17.leanback.widget.ClassPresenterSelector;
Dake Gu47e9b752015-09-30 13:41:45 -070026import android.support.v17.leanback.widget.HeaderItem;
susnataafd999a2016-08-15 17:03:24 -070027import android.support.v17.leanback.widget.ListRow;
28import android.support.v17.leanback.widget.ListRowPresenter;
Dake Guef05d542016-12-07 11:04:42 -080029import android.support.v17.leanback.widget.OnItemViewClickedListener;
30import android.support.v17.leanback.widget.OnItemViewSelectedListener;
susnataafd999a2016-08-15 17:03:24 -070031import android.support.v17.leanback.widget.PlaybackControlsRow;
Dake Guef05d542016-12-07 11:04:42 -080032import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
susnataafd999a2016-08-15 17:03:24 -070033import android.support.v17.leanback.widget.Presenter;
Dake Guef05d542016-12-07 11:04:42 -080034import android.support.v17.leanback.widget.Row;
35import android.support.v17.leanback.widget.RowPresenter;
Dake Gu47e9b752015-09-30 13:41:45 -070036import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
37import android.util.Log;
Dake Gu47e9b752015-09-30 13:41:45 -070038
Dongwon Kang65a34662016-01-14 16:19:49 -080039public class PlaybackOverlaySupportFragment
Dake Guef05d542016-12-07 11:04:42 -080040 extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment
Wale Ogunwale67574e72016-01-29 17:46:30 -080041 implements PlaybackOverlaySupportActivity.PictureInPictureListener {
Dake Gu47e9b752015-09-30 13:41:45 -070042 private static final String TAG = "leanback.PlaybackControlsFragment";
43
44 /**
45 * Change this to choose a different overlay background.
46 */
Dake Guef05d542016-12-07 11:04:42 -080047 private static final int BACKGROUND_TYPE = PlaybackOverlaySupportFragment.BG_LIGHT;
Dake Gu47e9b752015-09-30 13:41:45 -070048
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 Guef05d542016-12-07 11:04:42 -080061 private PlaybackControlSupportHelper mGlue;
Keyvan Amiri8f2df002016-12-13 17:15:51 -080062 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 Gu47e9b752015-09-30 13:41:45 -070067
Dake Guef05d542016-12-07 11:04:42 -080068 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 Liutikase2104f42017-03-05 09:55:41 -080088 @Override
Dake Gu47e9b752015-09-30 13:41:45 -070089 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 Guef05d542016-12-07 11:04:42 -080099 setOnItemViewSelectedListener(mOnItemViewSelectedListener);
Dake Gu47e9b752015-09-30 13:41:45 -0700100
101 createComponents(getActivity());
102 }
103
104 private void createComponents(Context context) {
Dake Guef05d542016-12-07 11:04:42 -0800105 mGlue = new PlaybackControlSupportHelper(context, this) {
Dake Gu47e9b752015-09-30 13:41:45 -0700106 @Override
107 public int getUpdatePeriod() {
Dake Gu3bcad882017-03-20 16:40:45 -0700108 long totalTime = getControlsRow().getDuration();
Dake Gu47e9b752015-09-30 13:41:45 -0700109 if (getView() == null || getView().getWidth() == 0 || totalTime <= 0) {
110 return 1000;
111 }
Dake Gu3bcad882017-03-20 16:40:45 -0700112 return 16;
Dake Gu47e9b752015-09-30 13:41:45 -0700113 }
114
115 @Override
Dake Guef05d542016-12-07 11:04:42 -0800116 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 Kang65a34662016-01-14 16:19:49 -0800127 public void onActionClicked(Action action) {
128 if (action.getId() == R.id.lb_control_picture_in_picture) {
Dake Gu4c78d0f2017-02-27 16:58:41 -0800129 if (Build.VERSION.SDK_INT >= 24) {
130 getActivity().enterPictureInPictureMode();
131 }
Dongwon Kang65a34662016-01-14 16:19:49 -0800132 return;
133 }
134 super.onActionClicked(action);
135 }
Dake Gu47e9b752015-09-30 13:41:45 -0700136 };
137
Keyvan Amiri8f2df002016-12-13 17:15:51 -0800138 mGlue.setInitialized(false);
139 mHandler.postDelayed(new Runnable() {
140 @Override
141 public void run() {
142 mGlue.setInitialized(true);
143 }
144 }, MEDIA_PREPARATION_DELAY);
Dake Guef05d542016-12-07 11:04:42 -0800145 mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener);
146
Dake Gu5a4d3a92017-03-09 14:51:07 -0800147 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 Gu47e9b752015-09-30 13:41:45 -0700153
Dake Gu5a4d3a92017-03-09 14:51:07 -0800154 setAdapter(new SparseArrayObjectAdapter(selector));
Dake Gu47e9b752015-09-30 13:41:45 -0700155
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 Guef05d542016-12-07 11:04:42 -0800167
Dake Gu47e9b752015-09-30 13:41:45 -0700168 }
169
170 @Override
171 public void onStart() {
172 super.onStart();
Dake Guef05d542016-12-07 11:04:42 -0800173 mGlue.setFadingEnabled(true);
174 mGlue.enableProgressUpdating(true);
Wale Ogunwale67574e72016-01-29 17:46:30 -0800175 ((PlaybackOverlaySupportActivity) getActivity()).registerPictureInPictureListener(this);
Dake Gu47e9b752015-09-30 13:41:45 -0700176 }
177
178 @Override
179 public void onStop() {
Dake Guef05d542016-12-07 11:04:42 -0800180 mGlue.enableProgressUpdating(false);
Dongwon Kang7f0679e2016-03-04 10:37:51 -0800181 ((PlaybackOverlaySupportActivity) getActivity()).unregisterPictureInPictureListener(this);
Dake Gu47e9b752015-09-30 13:41:45 -0700182 super.onStop();
183 }
Dongwon Kang65a34662016-01-14 16:19:49 -0800184
185 @Override
Andrii Kulianfa89d612016-03-29 17:34:18 -0700186 public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
187 if (isInPictureInPictureMode) {
Dongwon Kang65a34662016-01-14 16:19:49 -0800188 // Hide the controls in picture-in-picture mode.
189 setFadingEnabled(true);
190 fadeOut();
191 } else {
Dake Gu3bcad882017-03-20 16:40:45 -0700192 setFadingEnabled(mGlue.isPlaying());
Dongwon Kang65a34662016-01-14 16:19:49 -0800193 }
194 }
Dake Gu47e9b752015-09-30 13:41:45 -0700195}