186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn/* 286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Copyright (C) 2015 The Android Open Source Project 386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * in compliance with the License. You may obtain a copy of the License at 686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * http://www.apache.org/licenses/LICENSE-2.0 886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * 986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * Unless required by applicable law or agreed to in writing, software distributed under the License 1086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 1186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * or implied. See the License for the specific language governing permissions and limitations under 1286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn * the License. 1386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn */ 1486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 15ad31f63f5843898de645f6ee1ac244c872ded8ccRobert Hahnpackage android.support.v17.leanback.supportleanbackshowcase.app.media; 1686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 1786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.app.Fragment; 1886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.os.Bundle; 1986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.app.PlaybackOverlayFragment; 2086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Action; 2186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.ArrayObjectAdapter; 2286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.OnItemViewClickedListener; 2386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.PlaybackControlsRow; 2486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.PlaybackControlsRowPresenter; 2586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Presenter; 2686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.Row; 2786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.support.v17.leanback.widget.RowPresenter; 2886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.view.SurfaceHolder; 2986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnimport android.view.SurfaceView; 3086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahnpublic class VideoConsumptionExampleFragment extends PlaybackOverlayFragment implements 3386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn OnItemViewClickedListener, MediaPlayerGlue.OnMediaFileFinishedPlayingListener { 3486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 3586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private static final String URL = "http://techslides.com/demos/sample-videos/small.mp4"; 36f1f0e1e298d10dfb6de5509fc19788f3d1f9bc2eKeyvan Amiri public static final String TAG = "VideoConsumptionExampleFragment"; 3786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private ArrayObjectAdapter mRowsAdapter; 3886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private MediaPlayerGlue mGlue; 3986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 40fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 41fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onCreate(Bundle savedInstanceState) { 4286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn super.onCreate(savedInstanceState); 4386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 4486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue = new VideoMediaPlayerGlue(getActivity(), this) { 4586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 46fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 47fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn protected void onRowChanged(PlaybackControlsRow row) { 4886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn if (mRowsAdapter == null) return; 4986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mRowsAdapter.notifyArrayItemRangeChanged(0, 1); 5086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 5186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn }; 5286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.setOnMediaFileFinishedPlayingListener(this); 5386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn MediaPlayerGlue.MetaData metaData = new MediaPlayerGlue.MetaData(); 5486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn metaData.setArtist("A Googler"); 5586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn metaData.setTitle("Diving with Sharks"); 5686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.setMetaData(metaData); 5786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.setMediaSource(URL); 585fc2bf47986ea74abe87e94186dd84d72205410bKeyvan Amiri mGlue.prepareMediaForPlaying(); 5986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 60f1f0e1e298d10dfb6de5509fc19788f3d1f9bc2eKeyvan Amiri 6186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn Fragment videoSurfaceFragment = getFragmentManager() 62f1f0e1e298d10dfb6de5509fc19788f3d1f9bc2eKeyvan Amiri .findFragmentByTag(VideoSurfaceFragment.TAG); 63f1f0e1e298d10dfb6de5509fc19788f3d1f9bc2eKeyvan Amiri 6486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn SurfaceView surface = (SurfaceView) videoSurfaceFragment.getView(); 6586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn surface.getHolder().addCallback(new SurfaceHolder.Callback() { 66fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 67fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void surfaceCreated(SurfaceHolder holder) { 6886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.setDisplay(holder); 6986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 7086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 7186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn @Override 7286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 7386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn // Nothing to do 7486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 7586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 76fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 77fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void surfaceDestroyed(SurfaceHolder holder) { 7886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 7986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn }); 8086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 8186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setBackgroundType(PlaybackOverlayFragment.BG_LIGHT); 8286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn addPlaybackControlsRow(); 8386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 8486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 85fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 86fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onStart() { 8786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn super.onStart(); 8886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.enableProgressUpdating(mGlue.hasValidMedia() && mGlue.isMediaPlaying()); 8986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 9086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 91fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 92fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onStop() { 9386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn super.onStop(); 9486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.enableProgressUpdating(false); 9586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.reset(); 9686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 9786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 9886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn private void addPlaybackControlsRow() { 9986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn final PlaybackControlsRowPresenter controlsPresenter = mGlue 10086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn .createControlsRowAndPresenter(); 10186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mRowsAdapter = new ArrayObjectAdapter(controlsPresenter); 10286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mRowsAdapter.add(mGlue.getControlsRow()); 10386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setAdapter(mRowsAdapter); 10486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn setOnItemViewClickedListener(this); 10586163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 10686163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 107fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 108fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, 109fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn RowPresenter.ViewHolder rowViewHolder, Row row) { 11086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn if (!(item instanceof Action)) return; 11186163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.onActionClicked((Action) item); 11286163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 11386163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 11486163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 115fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn @Override 116fd6954036f5be6b2ca578d76e70510fa23051911Robert Hahn public void onMediaFileFinishedPlaying(MediaPlayerGlue.MetaData metaData) { 11786163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn mGlue.startPlayback(); 11886163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn } 11986163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn 12086163d539e1aeb9ae7612def7aaf7dbfc5b88f28Robert Hahn} 121