blob: 4af3ef73859757c0a4ffc39295a5123f7b2aa904 [file] [log] [blame]
// CHECKSTYLE:OFF Generated code
/* This file is auto-generated from OnboardingDemoFragment.java. DO NOT MODIFY. */
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.example.android.leanback;
import android.net.Uri;
import android.os.Bundle;
import android.support.v17.leanback.app.VideoSupportFragmentGlueHost;
import android.support.v17.leanback.media.MediaPlayerAdapter;
import android.support.v17.leanback.media.PlaybackGlue;
import android.support.v17.leanback.media.PlaybackTransportControlGlue;
import android.support.v17.leanback.widget.PlaybackControlsRow;
import android.support.v4.media.session.MediaSessionCompat;
/**
* Fragment demonstrating the use of {@link android.support.v17.leanback.app.VideoSupportFragment} to
* render video with playback controls. And demonstrates video seeking with thumbnails.
*
* Generate 1 frame per second thumbnail bitmaps and put on sdcard:
* <pre>
* sudo apt-get install libav-tools
* avconv -i input.mp4 -s 240x135 -vsync 1 -r 1 -an -y -qscale 8 frame_%04d.jpg
* adb shell mkdir /sdcard/seek
* adb push frame_*.jpg /sdcard/seek/
* </pre>
* Change to 1 frame per minute: use "-r 1/60".
* For more options, see https://wiki.libav.org/Snippets/avconv
*
* <p>
* Showcase:
* </p>
* <li>Auto play when ready</li>
* <li>Set seek provider</li>
* <li>switch MediaSource</li>
* <li>switch PlaybackGlue</li>
*/
public class SampleVideoSupportFragment extends android.support.v17.leanback.app.VideoSupportFragment {
// Media Session Token
private static final String MEDIA_SESSION_COMPAT_TOKEN = "media session support video";
private PlaybackTransportControlGlueSample<MediaPlayerAdapter> mMediaPlayerGlue;
private MediaSessionCompat mMediaSessionCompat;
final VideoSupportFragmentGlueHost mHost = new VideoSupportFragmentGlueHost(SampleVideoSupportFragment.this);
static void playWhenReady(PlaybackGlue glue) {
if (glue.isPrepared()) {
glue.play();
} else {
glue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
@Override
public void onPreparedStateChanged(PlaybackGlue glue) {
if (glue.isPrepared()) {
glue.removePlayerCallback(this);
glue.play();
}
}
});
}
}
static void loadSeekData(final PlaybackTransportControlGlue glue) {
if (glue.isPrepared()) {
glue.setSeekProvider(new PlaybackSeekDiskDataProvider(
glue.getDuration(),
1000,
"/sdcard/seek/frame_%04d.jpg"));
} else {
glue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
@Override
public void onPreparedStateChanged(PlaybackGlue glue) {
if (glue.isPrepared()) {
glue.removePlayerCallback(this);
PlaybackTransportControlGlue transportControlGlue =
(PlaybackTransportControlGlue) glue;
transportControlGlue.setSeekProvider(new PlaybackSeekDiskDataProvider(
transportControlGlue.getDuration(),
1000,
"/sdcard/seek/frame_%04d.jpg"));
}
}
});
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMediaPlayerGlue = new PlaybackTransportControlGlueSample(getActivity(),
new MediaPlayerAdapter(getActivity()));
// create a media session inside of a fragment, and app developer can determine if connect
// this media session to glue or not
// as requested in b/64935838
mMediaSessionCompat = new MediaSessionCompat(getActivity(), MEDIA_SESSION_COMPAT_TOKEN);
mMediaPlayerGlue.connectToMediaSession(mMediaSessionCompat);
mMediaPlayerGlue.setHost(mHost);
mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.INDEX_NONE);
mMediaPlayerGlue.addPlayerCallback(new PlaybackGlue.PlayerCallback() {
boolean mSecondCompleted = false;
@Override
public void onPlayCompleted(PlaybackGlue glue) {
if (!mSecondCompleted) {
mSecondCompleted = true;
mMediaPlayerGlue.setSubtitle("Leanback artist Changed!");
mMediaPlayerGlue.setTitle("Leanback team at work");
String uriPath = "https://storage.googleapis.com/android-tv/Sample videos/"
+ "April Fool's 2013/Explore Treasure Mode with Google Maps.mp4";
mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));
loadSeekData(mMediaPlayerGlue);
playWhenReady(mMediaPlayerGlue);
} else {
mMediaPlayerGlue.removePlayerCallback(this);
switchAnotherGlue();
}
}
});
mMediaPlayerGlue.setSubtitle("Leanback artist");
mMediaPlayerGlue.setTitle("Leanback team at work");
String uriPath = "https://storage.googleapis.com/android-tv/Sample videos/"
+ "April Fool's 2013/Explore Treasure Mode with Google Maps.mp4";
mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));
loadSeekData(mMediaPlayerGlue);
playWhenReady(mMediaPlayerGlue);
}
@Override
public void onPause() {
if (mMediaPlayerGlue != null) {
mMediaPlayerGlue.pause();
}
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mMediaPlayerGlue.disconnectToMediaSession();
}
void switchAnotherGlue() {
mMediaPlayerGlue = new PlaybackTransportControlGlueSample(getActivity(),
new MediaPlayerAdapter(getActivity()));
// If the glue is switched, re-register the media session
mMediaPlayerGlue.connectToMediaSession(mMediaSessionCompat);
mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.INDEX_ONE);
mMediaPlayerGlue.setSubtitle("A Googler");
mMediaPlayerGlue.setTitle("Swimming with the fishes");
mMediaPlayerGlue.getPlayerAdapter().setDataSource(
Uri.parse("http://techslides.com/demos/sample-videos/small.mp4"));
mMediaPlayerGlue.setHost(mHost);
loadSeekData(mMediaPlayerGlue);
playWhenReady(mMediaPlayerGlue);
}
}