package de.luhmer.owncloudnewsreader.services.podcast;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubePlayer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.luhmer.owncloudnewsreader.model.MediaItem;
/**
* Created by david on 31.01.17.
*/
public class YoutubePlaybackService extends PlaybackService {
private static final String TAG = YoutubePlaybackService.class.getCanonicalName();
YouTubePlayer youTubePlayer;
Context context;
public YoutubePlaybackService(Context context, PodcastStatusListener podcastStatusListener, MediaItem mediaItem) {
super(context, podcastStatusListener, mediaItem);
this.context = context;
setStatus(Status.PREPARING);
}
@Override
public void destroy() {
if(youTubePlayer != null) {
youTubePlayer.pause();
youTubePlayer = null;
}
}
@Override
public void play() {
if(youTubePlayer != null) {
youTubePlayer.play();
}
}
@Override
public void pause() {
if(youTubePlayer != null) {
youTubePlayer.pause();
}
}
public void seekTo(double percent) {
if(youTubePlayer != null) {
double totalDuration = getTotalDuration();
int position = (int) ((totalDuration / 100d) * percent);
youTubePlayer.seekToMillis(position);
}
}
public int getCurrentDuration() {
if(youTubePlayer != null) {
return youTubePlayer.getCurrentTimeMillis();
}
return 0;
}
public int getTotalDuration() {
if(youTubePlayer != null) {
return youTubePlayer.getDurationMillis();
}
return 0;
}
@Override
public VideoType getVideoType() {
return VideoType.YouTube;
}
public void setYoutubePlayer(YouTubePlayer youTubePlayer, boolean wasRestored) {
this.youTubePlayer = youTubePlayer;
youTubePlayer.setPlaybackEventListener(youtubePlaybackEventListener);
youTubePlayer.setPlayerStateChangeListener(youtubePlayerStateChangeListener);
youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);
// Start buffering
if (!wasRestored) {
Pattern youtubeIdPattern = Pattern.compile(".*?v=([^&]*)");
Matcher matcher = youtubeIdPattern.matcher(getMediaItem().link);
if(matcher.matches()) {
String youtubeId = matcher.group(1);
youTubePlayer.cueVideo(youtubeId);
} else {
Toast.makeText(context, "Cannot find youtube video id", Toast.LENGTH_LONG).show();
setStatus(Status.FAILED);
}
}
}
YouTubePlayer.PlayerStateChangeListener youtubePlayerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {
@Override
public void onLoading() {
Log.d(TAG, "onLoading() called");
}
@Override
public void onLoaded(String s) {
Log.d(TAG, "onLoaded() called with: s = [" + s + "]");
youTubePlayer.play();
}
@Override
public void onAdStarted() {
Log.d(TAG, "onAdStarted() called");
}
@Override
public void onVideoStarted() {
Log.d(TAG, "onVideoStarted() called");
}
@Override
public void onVideoEnded() {
Log.d(TAG, "onVideoEnded() called");
}
@Override
public void onError(YouTubePlayer.ErrorReason errorReason) {
Log.d(TAG, "onError() called with: errorReason = [" + errorReason + "]");
}
};
YouTubePlayer.PlaybackEventListener youtubePlaybackEventListener = new YouTubePlayer.PlaybackEventListener() {
@Override
public void onPlaying() {
Log.d(TAG, "onPlaying() called");
setStatus(Status.PLAYING);
}
@Override
public void onPaused() {
Log.d(TAG, "onPaused() called");
setStatus(Status.PAUSED);
}
@Override
public void onStopped() {
Log.d(TAG, "onStopped() called");
setStatus(Status.PAUSED);
}
@Override
public void onBuffering(boolean b) {
Log.d(TAG, "onBuffering() called with: b = [" + b + "]");
}
@Override
public void onSeekTo(int i) {
Log.d(TAG, "onSeekTo() called with: i = [" + i + "]");
}
};
}