1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14
15package android.support.v17.leanback.supportleanbackshowcase.app.media;
16
17import android.app.Fragment;
18import android.os.Bundle;
19import android.support.v17.leanback.app.PlaybackOverlayFragment;
20import android.support.v17.leanback.widget.Action;
21import android.support.v17.leanback.widget.ArrayObjectAdapter;
22import android.support.v17.leanback.widget.OnItemViewClickedListener;
23import android.support.v17.leanback.widget.PlaybackControlsRow;
24import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
25import android.support.v17.leanback.widget.Presenter;
26import android.support.v17.leanback.widget.Row;
27import android.support.v17.leanback.widget.RowPresenter;
28import android.view.SurfaceHolder;
29import android.view.SurfaceView;
30
31
32public class VideoConsumptionExampleFragment extends PlaybackOverlayFragment implements
33        OnItemViewClickedListener, MediaPlayerGlue.OnMediaFileFinishedPlayingListener {
34
35    private static final String URL = "http://techslides.com/demos/sample-videos/small.mp4";
36    public static final String TAG = "VideoConsumptionExampleFragment";
37    private ArrayObjectAdapter mRowsAdapter;
38    private MediaPlayerGlue mGlue;
39
40    @Override
41    public void onCreate(Bundle savedInstanceState) {
42        super.onCreate(savedInstanceState);
43
44        mGlue = new VideoMediaPlayerGlue(getActivity(), this) {
45
46            @Override
47            protected void onRowChanged(PlaybackControlsRow row) {
48                if (mRowsAdapter == null) return;
49                mRowsAdapter.notifyArrayItemRangeChanged(0, 1);
50            }
51        };
52        mGlue.setOnMediaFileFinishedPlayingListener(this);
53        MediaPlayerGlue.MetaData metaData = new MediaPlayerGlue.MetaData();
54        metaData.setArtist("A Googler");
55        metaData.setTitle("Diving with Sharks");
56        mGlue.setMetaData(metaData);
57        mGlue.setMediaSource(URL);
58        mGlue.prepareMediaForPlaying();
59
60
61        Fragment videoSurfaceFragment = getFragmentManager()
62                .findFragmentByTag(VideoSurfaceFragment.TAG);
63
64        SurfaceView surface = (SurfaceView) videoSurfaceFragment.getView();
65        surface.getHolder().addCallback(new SurfaceHolder.Callback() {
66            @Override
67            public void surfaceCreated(SurfaceHolder holder) {
68                mGlue.setDisplay(holder);
69            }
70
71            @Override
72            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
73                // Nothing to do
74            }
75
76            @Override
77            public void surfaceDestroyed(SurfaceHolder holder) {
78            }
79        });
80
81        setBackgroundType(PlaybackOverlayFragment.BG_LIGHT);
82        addPlaybackControlsRow();
83    }
84
85    @Override
86    public void onStart() {
87        super.onStart();
88        mGlue.enableProgressUpdating(mGlue.hasValidMedia() && mGlue.isMediaPlaying());
89    }
90
91    @Override
92    public void onStop() {
93        super.onStop();
94        mGlue.enableProgressUpdating(false);
95        mGlue.reset();
96    }
97
98    private void addPlaybackControlsRow() {
99        final PlaybackControlsRowPresenter controlsPresenter = mGlue
100                .createControlsRowAndPresenter();
101        mRowsAdapter = new ArrayObjectAdapter(controlsPresenter);
102        mRowsAdapter.add(mGlue.getControlsRow());
103        setAdapter(mRowsAdapter);
104        setOnItemViewClickedListener(this);
105    }
106
107    @Override
108    public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
109                              RowPresenter.ViewHolder rowViewHolder, Row row) {
110        if (!(item instanceof Action)) return;
111        mGlue.onActionClicked((Action) item);
112    }
113
114
115    @Override
116    public void onMediaFileFinishedPlaying(MediaPlayerGlue.MetaData metaData) {
117        mGlue.startPlayback();
118    }
119
120}
121