package com.devbrackets.android.exomediademo.ui.activity;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import com.devbrackets.android.exomedia.ui.widget.VideoView;
import com.devbrackets.android.exomediademo.App;
import com.devbrackets.android.exomediademo.R;
import com.devbrackets.android.exomediademo.data.MediaItem;
import com.devbrackets.android.exomediademo.data.Samples;
import com.devbrackets.android.exomediademo.manager.PlaylistManager;
import com.devbrackets.android.exomediademo.playlist.VideoApi;
import com.devbrackets.android.playlistcore.listener.PlaylistListener;
import com.devbrackets.android.playlistcore.manager.BasePlaylistManager;
import com.devbrackets.android.playlistcore.service.PlaylistServiceCore;
import java.util.LinkedList;
import java.util.List;
public class VideoPlayerActivity extends Activity implements PlaylistListener<MediaItem> {
public static final String EXTRA_INDEX = "EXTRA_INDEX";
public static final int PLAYLIST_ID = 6; //Arbitrary, for the example (different from audio)
protected VideoView videoView;
protected PlaylistManager playlistManager;
protected int selectedIndex;
protected boolean pausedInOnStop = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_player_activity);
retrieveExtras();
init();
}
@Override
protected void onStop() {
super.onStop();
if (videoView.isPlaying()) {
pausedInOnStop = true;
videoView.pause();
}
}
@Override
protected void onStart() {
super.onStart();
if (pausedInOnStop) {
videoView.start();
pausedInOnStop = false;
}
}
@Override
protected void onPause() {
super.onPause();
playlistManager.unRegisterPlaylistListener(this);
}
@Override
protected void onResume() {
super.onResume();
playlistManager = App.getPlaylistManager();
playlistManager.registerPlaylistListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
playlistManager.invokeStop();
}
@Override
public boolean onPlaylistItemChanged(MediaItem currentItem, boolean hasNext, boolean hasPrevious) {
return false;
}
@Override
public boolean onPlaybackStateChanged(@NonNull PlaylistServiceCore.PlaybackState playbackState) {
if (playbackState == PlaylistServiceCore.PlaybackState.STOPPED) {
finish();
return true;
} else if (playbackState == PlaylistServiceCore.PlaybackState.ERROR) {
showErrorMessage();
}
return false;
}
/**
* Retrieves the extra associated with the selected playlist index
* so that we can start playing the correct item.
*/
protected void retrieveExtras() {
Bundle extras = getIntent().getExtras();
selectedIndex = extras.getInt(EXTRA_INDEX, 0);
}
protected void init() {
setupPlaylistManager();
videoView = (VideoView)findViewById(R.id.video_play_activity_video_view);
playlistManager.setVideoPlayer(new VideoApi(videoView));
playlistManager.play(0, false);
}
protected void showErrorMessage() {
new AlertDialog.Builder(this)
.setTitle("Playback Error")
.setMessage(String.format("There was an error playing \"%s\"", playlistManager.getCurrentItem().getTitle()))
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
})
.show();
}
/**
* Retrieves the playlist instance and performs any generation
* of content if it hasn't already been performed.
*/
private void setupPlaylistManager() {
playlistManager = App.getPlaylistManager();
List<MediaItem> mediaItems = new LinkedList<>();
for (Samples.Sample sample : Samples.getVideoSamples()) {
MediaItem mediaItem = new MediaItem(sample, false);
mediaItems.add(mediaItem);
}
playlistManager.setAllowedMediaType(BasePlaylistManager.AUDIO | BasePlaylistManager.VIDEO);
playlistManager.setParameters(mediaItems, selectedIndex);
playlistManager.setId(PLAYLIST_ID);
}
}