diff options
Diffstat (limited to 'News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/YoutubePlaybackService.java')
-rw-r--r-- | News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/YoutubePlaybackService.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/YoutubePlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/YoutubePlaybackService.java new file mode 100644 index 00000000..29e3c87f --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/YoutubePlaybackService.java @@ -0,0 +1,163 @@ +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 + "]"); + } + }; +} |