package com.devbrackets.android.exomediademo.manager;
import android.app.Application;
import android.app.Service;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.devbrackets.android.exomedia.listener.VideoControlsButtonListener;
import com.devbrackets.android.exomedia.ui.widget.VideoView;
import com.devbrackets.android.exomedia.ui.widget.VideoControls;
import com.devbrackets.android.exomediademo.App;
import com.devbrackets.android.exomediademo.data.MediaItem;
import com.devbrackets.android.exomediademo.playlist.VideoApi;
import com.devbrackets.android.exomediademo.service.MediaService;
import com.devbrackets.android.playlistcore.api.VideoPlayerApi;
import com.devbrackets.android.playlistcore.manager.BasePlaylistManager;
import com.devbrackets.android.playlistcore.manager.ListPlaylistManager;
/**
* A PlaylistManager that extends the {@link BasePlaylistManager} for use with the
* {@link MediaService} which extends {@link com.devbrackets.android.playlistcore.service.BasePlaylistService}.
*/
public class PlaylistManager extends ListPlaylistManager<MediaItem> {
@NonNull
@Override
protected Application getApplication() {
return App.getApplication();
}
@NonNull
@Override
protected Class<? extends Service> getMediaServiceClass() {
return MediaService.class;
}
@Override
public void setVideoPlayer(@Nullable VideoPlayerApi videoPlayer) {
super.setVideoPlayer(videoPlayer);
if (videoPlayer != null) {
updateVideoControls(videoPlayer);
}
}
/**
* Updates the available controls on the VideoView and links the
* button events to the playlist service and this.
*
* @param videoPlayer The videoPlayerApi to link
*/
private void updateVideoControls(@NonNull VideoPlayerApi videoPlayer) {
VideoApi api = (VideoApi)videoPlayer;
VideoView videoView = api.getVideoView();
if (videoView == null) {
return;
}
VideoControls videoControls = videoView.getVideoControls();
if (videoControls != null) {
videoControls.setPreviousButtonRemoved(false);
videoControls.setNextButtonRemoved(false);
videoControls.setButtonListener(new ControlsListener());
}
}
/**
* An implementation of the {@link VideoControlsButtonListener} that provides
* integration with the playlist service.
*/
private class ControlsListener implements VideoControlsButtonListener {
@Override
public boolean onPlayPauseClicked() {
invokePausePlay();
return true;
}
@Override
public boolean onPreviousClicked() {
invokePrevious();
return false;
}
@Override
public boolean onNextClicked() {
invokeNext();
return false;
}
@Override
public boolean onRewindClicked() {
return false;
}
@Override
public boolean onFastForwardClicked() {
return false;
}
}
}