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