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