1181c8847d5a1169e26755ed690131333b7fff7e9Dake Gu// CHECKSTYLE:OFF Generated code
2aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata/* This file is auto-generated from OnboardingDemoFragment.java.  DO NOT MODIFY. */
3aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
4aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata/*
5aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * Copyright (C) 2016 The Android Open Source Project
6aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata *
7aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * in compliance with the License. You may obtain a copy of the License at
9aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata *
10aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * http://www.apache.org/licenses/LICENSE-2.0
11aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata *
12aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * Unless required by applicable law or agreed to in writing, software distributed under the License
13aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * or implied. See the License for the specific language governing permissions and limitations under
15aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * the License.
16aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata */
17aa49439ba6276137f94fcdc1bf4f69b78833dad6susnatapackage com.example.android.leanback;
18aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
19aa49439ba6276137f94fcdc1bf4f69b78833dad6susnataimport android.net.Uri;
20aa49439ba6276137f94fcdc1bf4f69b78833dad6susnataimport android.os.Bundle;
21aa49439ba6276137f94fcdc1bf4f69b78833dad6susnataimport android.support.v17.leanback.app.VideoSupportFragmentGlueHost;
223bcad88cbf4488e747d84893c35f2351b8f84afeDake Guimport android.support.v17.leanback.media.MediaPlayerAdapter;
2395ac470f2bbea06114a64906d95c0da7d9412db0Dake Guimport android.support.v17.leanback.media.PlaybackGlue;
243bcad88cbf4488e747d84893c35f2351b8f84afeDake Guimport android.support.v17.leanback.media.PlaybackTransportControlGlue;
253bcad88cbf4488e747d84893c35f2351b8f84afeDake Guimport android.support.v17.leanback.widget.PlaybackControlsRow;
26aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
27aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata/**
28aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * Fragment demonstrating the use of {@link android.support.v17.leanback.app.VideoSupportFragment} to
29ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * render video with playback controls. And demonstrates video seeking with thumbnails.
30ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu *
31ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * Generate 1 frame per second thumbnail bitmaps and put on sdcard:
32ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * <pre>
33ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * sudo apt-get install libav-tools
34ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * avconv -i input.mp4 -s 240x135 -vsync 1 -r 1 -an -y -qscale 8 frame_%04d.jpg
35ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * adb shell mkdir /sdcard/seek
36ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * adb push frame_*.jpg /sdcard/seek/
37ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * </pre>
38ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * Change to 1 frame per minute: use "-r 1/60".
39ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu * For more options, see https://wiki.libav.org/Snippets/avconv
40ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu *
413bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * <p>
423bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * Showcase:
433bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * </p>
443bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * <li>Auto play when ready</li>
453bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * <li>Set seek provider</li>
463bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * <li>switch MediaSource</li>
473bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu * <li>switch PlaybackGlue</li>
48aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata */
49aa49439ba6276137f94fcdc1bf4f69b78833dad6susnatapublic class SampleVideoSupportFragment extends android.support.v17.leanback.app.VideoSupportFragment {
503bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    private PlaybackTransportControlGlueSample<MediaPlayerAdapter> mMediaPlayerGlue;
51aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
523bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    final VideoSupportFragmentGlueHost mHost = new VideoSupportFragmentGlueHost(SampleVideoSupportFragment.this);
53aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
543bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    static void playWhenReady(PlaybackGlue glue) {
553bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        if (glue.isPrepared()) {
563bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            glue.play();
573bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        } else {
583bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            glue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
593bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                @Override
603bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                public void onPreparedStateChanged(PlaybackGlue glue) {
613bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    if (glue.isPrepared()) {
623bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                        glue.removePlayerCallback(this);
633bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                        glue.play();
643bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    }
653bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                }
663bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            });
673bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        }
68aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    }
69aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
703bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    static void loadSeekData(final PlaybackTransportControlGlue glue) {
713bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        if (glue.isPrepared()) {
72ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu            glue.setSeekProvider(new PlaybackSeekDiskDataProvider(
733bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    glue.getDuration(),
74ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu                    1000,
75ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu                    "/sdcard/seek/frame_%04d.jpg"));
763bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        } else {
773bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            glue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
783bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                @Override
793bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                public void onPreparedStateChanged(PlaybackGlue glue) {
803bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    if (glue.isPrepared()) {
813bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                        glue.removePlayerCallback(this);
823bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                        PlaybackTransportControlGlue transportControlGlue =
833bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                                (PlaybackTransportControlGlue) glue;
84ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu                        transportControlGlue.setSeekProvider(new PlaybackSeekDiskDataProvider(
853bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                                transportControlGlue.getDuration(),
86ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu                                1000,
87ffddec570a27891c0e13d24b1558c6f61ed99fb9Dake Gu                                "/sdcard/seek/frame_%04d.jpg"));
883bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    }
893bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                }
903bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            });
913bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        }
923bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    }
93aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
94aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    @Override
953bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    public void onCreate(Bundle savedInstanceState) {
963bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        super.onCreate(savedInstanceState);
973bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue = new PlaybackTransportControlGlueSample(getActivity(),
983bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                new MediaPlayerAdapter(getActivity()));
993bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setHost(mHost);
100946a01cfedb6838e98d7a37e30f64c39b603893dDake Gu        mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.INDEX_NONE);
1013bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
1023bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            boolean mSecondCompleted = false;
103aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            @Override
1043bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            public void onPlayCompleted(PlaybackGlue glue) {
1053bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                if (!mSecondCompleted) {
1063bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    mSecondCompleted = true;
1073bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    mMediaPlayerGlue.setSubtitle("Leanback artist Changed!");
1083bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    mMediaPlayerGlue.setTitle("Leanback team at work");
1093bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    String uriPath = "https://storage.googleapis.com/android-tv/Sample videos/"
1103bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                            + "April Fool's 2013/Explore Treasure Mode with Google Maps.mp4";
1113bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));
1123bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    loadSeekData(mMediaPlayerGlue);
1133bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    playWhenReady(mMediaPlayerGlue);
1143bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                } else {
1153bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    mMediaPlayerGlue.removePlayerCallback(this);
1163bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                    switchAnotherGlue();
1173bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                }
118aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata            }
1193bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        });
1203bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setSubtitle("Leanback artist");
1213bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setTitle("Leanback team at work");
1223bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        String uriPath = "https://storage.googleapis.com/android-tv/Sample videos/"
1233bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                + "April Fool's 2013/Explore Treasure Mode with Google Maps.mp4";
1243bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));
1253bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        loadSeekData(mMediaPlayerGlue);
1263bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        playWhenReady(mMediaPlayerGlue);
1273bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    }
128aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
1293bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    @Override
1303bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    public void onPause() {
1313bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        if (mMediaPlayerGlue != null) {
1323bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu            mMediaPlayerGlue.pause();
1333bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        }
1343bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        super.onPause();
1353bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    }
136aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata
1373bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu    void switchAnotherGlue() {
1383bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue = new PlaybackTransportControlGlueSample(getActivity(),
1393bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                new MediaPlayerAdapter(getActivity()));
140946a01cfedb6838e98d7a37e30f64c39b603893dDake Gu        mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.INDEX_ONE);
1413bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setSubtitle("A Googler");
1423bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setTitle("Swimming with the fishes");
1433bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.getPlayerAdapter().setDataSource(
1443bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu                Uri.parse("http://techslides.com/demos/sample-videos/small.mp4"));
1453bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        mMediaPlayerGlue.setHost(mHost);
1463bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        loadSeekData(mMediaPlayerGlue);
1473bcad88cbf4488e747d84893c35f2351b8f84afeDake Gu        playWhenReady(mMediaPlayerGlue);
148aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata    }
149aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata}
150