• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // CHECKSTYLE:OFF Generated code
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;
20 import android.os.Build;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.support.v17.leanback.widget.Action;
24 import android.support.v17.leanback.widget.ArrayObjectAdapter;
25 import android.support.v17.leanback.widget.ClassPresenterSelector;
26 import android.support.v17.leanback.widget.HeaderItem;
27 import android.support.v17.leanback.widget.ListRow;
28 import android.support.v17.leanback.widget.ListRowPresenter;
29 import android.support.v17.leanback.widget.OnItemViewClickedListener;
30 import android.support.v17.leanback.widget.OnItemViewSelectedListener;
31 import android.support.v17.leanback.widget.PlaybackControlsRow;
32 import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
33 import android.support.v17.leanback.widget.Presenter;
34 import android.support.v17.leanback.widget.Row;
35 import android.support.v17.leanback.widget.RowPresenter;
36 import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
37 import android.util.Log;
38 
39 public class PlaybackOverlaySupportFragment
40         extends android.support.v17.leanback.app.PlaybackOverlaySupportFragment
41         implements PlaybackOverlaySupportActivity.PictureInPictureListener {
42     private static final String TAG = "leanback.PlaybackControlsFragment";
43 
44     /**
45      * Change this to choose a different overlay background.
46      */
47     private static final int BACKGROUND_TYPE = PlaybackOverlaySupportFragment.BG_LIGHT;
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 
61     private PlaybackControlSupportHelper mGlue;
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;
67 
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 
88     @Override
getAdapter()89     public SparseArrayObjectAdapter getAdapter() {
90         return (SparseArrayObjectAdapter) super.getAdapter();
91     }
92 
93     @Override
onCreate(Bundle savedInstanceState)94     public void onCreate(Bundle savedInstanceState) {
95         Log.i(TAG, "onCreate");
96         super.onCreate(savedInstanceState);
97 
98         setBackgroundType(BACKGROUND_TYPE);
99         setOnItemViewSelectedListener(mOnItemViewSelectedListener);
100 
101         createComponents(getActivity());
102     }
103 
createComponents(Context context)104     private void createComponents(Context context) {
105         mGlue = new PlaybackControlSupportHelper(context, this) {
106             @Override
107             public int getUpdatePeriod() {
108                 long totalTime = getControlsRow().getDuration();
109                 if (getView() == null || getView().getWidth() == 0 || totalTime <= 0) {
110                     return 1000;
111                 }
112                 return 16;
113             }
114 
115             @Override
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
127             public void onActionClicked(Action action) {
128                 if (action.getId() == R.id.lb_control_picture_in_picture) {
129                     if (Build.VERSION.SDK_INT >= 24) {
130                         getActivity().enterPictureInPictureMode();
131                     }
132                     return;
133                 }
134                 super.onActionClicked(action);
135             }
136         };
137 
138         mGlue.setInitialized(false);
139         mHandler.postDelayed(new Runnable() {
140             @Override
141             public void run() {
142                 mGlue.setInitialized(true);
143             }
144         }, MEDIA_PREPARATION_DELAY);
145         mGlue.setOnItemViewClickedListener(mOnItemViewClickedListener);
146 
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);
153 
154         setAdapter(new SparseArrayObjectAdapter(selector));
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         }
167 
168     }
169 
170     @Override
onStart()171     public void onStart() {
172         super.onStart();
173         mGlue.setFadingEnabled(true);
174         mGlue.enableProgressUpdating(true);
175         ((PlaybackOverlaySupportActivity) getActivity()).registerPictureInPictureListener(this);
176     }
177 
178     @Override
onStop()179     public void onStop() {
180         mGlue.enableProgressUpdating(false);
181         ((PlaybackOverlaySupportActivity) getActivity()).unregisterPictureInPictureListener(this);
182         super.onStop();
183     }
184 
185     @Override
onPictureInPictureModeChanged(boolean isInPictureInPictureMode)186     public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
187         if (isInPictureInPictureMode) {
188             // Hide the controls in picture-in-picture mode.
189             setFadingEnabled(true);
190             fadeOut();
191         } else {
192             setFadingEnabled(mGlue.isPlaying());
193         }
194     }
195 }
196