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
17package com.example.android.leanback;
18
19import android.content.Context;
20import android.os.Build;
21import android.os.Bundle;
22import android.support.v17.leanback.app.PlaybackFragmentGlueHost;
23import android.support.v17.leanback.widget.Action;
24import android.support.v17.leanback.widget.ArrayObjectAdapter;
25import android.support.v17.leanback.widget.ClassPresenterSelector;
26import android.support.v17.leanback.widget.HeaderItem;
27import android.support.v17.leanback.widget.ListRow;
28import android.support.v17.leanback.widget.ListRowPresenter;
29import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
30import android.util.Log;
31
32/**
33 * Example of PlaybackFragment working with a PlaybackControlGlue.
34 */
35public class PlaybackTransportControlFragment
36        extends android.support.v17.leanback.app.PlaybackFragment
37        implements PlaybackTransportControlActivity.PictureInPictureListener {
38    private static final String TAG = "TransportFragment";
39
40    /**
41     * Change this to choose a different overlay background.
42     */
43    private static final int BACKGROUND_TYPE = BG_DARK;
44
45    /**
46     * Change the number of related content rows.
47     */
48    private static final int RELATED_CONTENT_ROWS = 3;
49
50    private static final int ROW_CONTROLS = 0;
51
52    private PlaybackTransportControlGlueSample mGlue;
53
54    public SparseArrayObjectAdapter getAdapter() {
55        return (SparseArrayObjectAdapter) super.getAdapter();
56    }
57
58    @Override
59    public void onCreate(Bundle savedInstanceState) {
60        Log.i(TAG, "onCreate");
61        super.onCreate(savedInstanceState);
62
63        setBackgroundType(BACKGROUND_TYPE);
64
65        createComponents(getActivity());
66    }
67
68    private void createComponents(Context context) {
69        mGlue = new PlaybackTransportControlGlueSample(context, new PlayerAdapter()) {
70            @Override
71            public void onActionClicked(Action action) {
72                if (action.getId() == R.id.lb_control_picture_in_picture) {
73                    if (Build.VERSION.SDK_INT >= 24) {
74                        getActivity().enterPictureInPictureMode();
75                    }
76                    return;
77                }
78                super.onActionClicked(action);
79            }
80
81        };
82
83        mGlue.setTitle("Title");
84        mGlue.setSubtitle("Android developer");
85        mGlue.setHost(new PlaybackFragmentGlueHost(this));
86        mGlue.setSeekProvider(new PlaybackSeekDataProviderSample(
87                PlayerAdapter.FAUX_DURATION, 100));
88
89        ClassPresenterSelector selector = new ClassPresenterSelector();
90        selector.addClassPresenter(ListRow.class, new ListRowPresenter());
91        setAdapter(new SparseArrayObjectAdapter(selector));
92
93        // Add related content rows
94        for (int i = 0; i < RELATED_CONTENT_ROWS; ++i) {
95            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter());
96            listRowAdapter.add("Some related content");
97            listRowAdapter.add("Other related content");
98            HeaderItem header = new HeaderItem(i, "Row " + i);
99            getAdapter().set(ROW_CONTROLS + 1 + i, new ListRow(header, listRowAdapter));
100        }
101    }
102
103    @Override
104    public void onStart() {
105        super.onStart();
106        ((PlaybackTransportControlActivity) getActivity()).registerPictureInPictureListener(this);
107    }
108
109    @Override
110    public void onStop() {
111        ((PlaybackTransportControlActivity) getActivity()).unregisterPictureInPictureListener(this);
112        super.onStop();
113    }
114
115    @Override
116    public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
117        if (isInPictureInPictureMode) {
118            // Hide the controls in picture-in-picture mode.
119            setControlsOverlayAutoHideEnabled(true);
120            hideControlsOverlay(true);
121        } else {
122            setControlsOverlayAutoHideEnabled(mGlue.isPlaying());
123        }
124    }
125}
126