• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
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.support.v17.leanback.app.PlaybackFragmentGlueHost;
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.SparseArrayObjectAdapter;
30 import android.util.Log;
31 
32 /**
33  * Example of PlaybackFragment working with a PlaybackControlGlue.
34  */
35 public class PlaybackFragment
36         extends android.support.v17.leanback.app.PlaybackFragment
37         implements PlaybackActivity.PictureInPictureListener {
38     private static final String TAG = "leanback.PlaybackControlsFragment";
39 
40     /**
41      * Change this to choose a different overlay background.
42      */
43     private static final int BACKGROUND_TYPE = PlaybackFragment.BG_LIGHT;
44 
45     /**
46      * Change the number of related content rows.
47      */
48     private static final int RELATED_CONTENT_ROWS = 3;
49 
50     /**
51      * Change this to select hidden
52      */
53     private static final boolean SECONDARY_HIDDEN = false;
54 
55     private static final int ROW_CONTROLS = 0;
56 
57     private PlaybackControlGlue mGlue;
58 
59     @Override
getAdapter()60     public SparseArrayObjectAdapter getAdapter() {
61         return (SparseArrayObjectAdapter) super.getAdapter();
62     }
63 
64     @Override
onCreate(Bundle savedInstanceState)65     public void onCreate(Bundle savedInstanceState) {
66         Log.i(TAG, "onCreate");
67         super.onCreate(savedInstanceState);
68 
69         setBackgroundType(BACKGROUND_TYPE);
70 
71         createComponents(getActivity());
72     }
73 
createComponents(Context context)74     private void createComponents(Context context) {
75         mGlue = new PlaybackControlGlue(context) {
76             @Override
77             public int getUpdatePeriod() {
78                 long totalTime = getControlsRow().getDuration();
79                 if (getView() == null || getView().getWidth() == 0 || totalTime <= 0) {
80                     return 1000;
81                 }
82                 return 16;
83             }
84 
85             @Override
86             public void onActionClicked(Action action) {
87                 if (action.getId() == R.id.lb_control_picture_in_picture) {
88                     if (Build.VERSION.SDK_INT >= 24) {
89                         getActivity().enterPictureInPictureMode();
90                     }
91                     return;
92                 }
93                 super.onActionClicked(action);
94             }
95 
96             @Override
97             protected void onCreateControlsRowAndPresenter() {
98                 super.onCreateControlsRowAndPresenter();
99                 getControlsRowPresenter().setSecondaryActionsHidden(SECONDARY_HIDDEN);
100             }
101         };
102 
103         mGlue.setHost(new PlaybackFragmentGlueHost(this));
104         ClassPresenterSelector classPresenterSelector = new ClassPresenterSelector();
105         classPresenterSelector.addClassPresenter(ListRow.class, new ListRowPresenter());
106 
107         setAdapter(new SparseArrayObjectAdapter(classPresenterSelector));
108 
109         // Add related content rows
110         for (int i = 0; i < RELATED_CONTENT_ROWS; ++i) {
111             ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter());
112             listRowAdapter.add("Some related content");
113             listRowAdapter.add("Other related content");
114             HeaderItem header = new HeaderItem(i, "Row " + i);
115             getAdapter().set(ROW_CONTROLS + 1 + i, new ListRow(header, listRowAdapter));
116         }
117     }
118 
119     @Override
onStart()120     public void onStart() {
121         super.onStart();
122         ((PlaybackActivity) getActivity()).registerPictureInPictureListener(this);
123     }
124 
125     @Override
onStop()126     public void onStop() {
127         ((PlaybackActivity) getActivity()).unregisterPictureInPictureListener(this);
128         super.onStop();
129     }
130 
131     @Override
onPictureInPictureModeChanged(boolean isInPictureInPictureMode)132     public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
133         if (isInPictureInPictureMode) {
134             // Hide the controls in picture-in-picture mode.
135             setFadingEnabled(true);
136             fadeOut();
137         } else {
138             setFadingEnabled(mGlue.isPlaying());
139         }
140     }
141 }
142