package com.tikal.share; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.widget.Toast; import com.google.android.youtube.player.YouTubeBaseActivity; import com.google.android.youtube.player.YouTubeInitializationResult; import com.google.android.youtube.player.YouTubePlayer; import com.google.android.youtube.player.YouTubePlayer.ErrorReason; import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; import com.google.android.youtube.player.YouTubePlayer.PlaybackEventListener; import com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener; import com.google.android.youtube.player.YouTubePlayer.Provider; import com.google.android.youtube.player.YouTubePlayerView; import com.google.cloud.backend.android.tikal.share.sync.CloudSync; public class PlayerActivity extends YouTubeBaseActivity implements OnInitializedListener{ public static final String DEVELOPER_KEY = "AIzaSyAF1kx_N4utAzBWt_t1bdcRpgBQlwyAFgo"; private MHPlaybackEventListener playerEventListener; private MHPlayerStateChangeListener playerStateChangeListener; private YouTubePlayer playa; //hollla private boolean playerLoaded; private YouTubePlayerView youTubeView; //these variables are static to keep through orientation changes private static int previousReqSeek; private static boolean firstTime = true; //clientid and videoid passed from calling activity private String videoID; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play); if(firstTime){ playerLoaded = false; previousReqSeek = 0; firstTime = false; videoID = getIntent().getExtras().getString(CloudSync.INTENT_VIDEO_ID); String clientID = getClientID(); //if non-default client id if(!clientID.equals("default")){ Intent syncStart = new Intent(this, CloudSync.class); syncStart.putExtra(CloudSync.INTENT_VIDEO_ID, videoID); syncStart.putExtra(CloudSync.INTENT_CLIENT_ID, clientID); syncStart.putExtra(CloudSync.INTENT_COMMAND,CloudSync.INTENT_COMMAND_GET); this.startActivityForResult(syncStart, 55); } else{ loadData(null); } } } private String getClientID(){ SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences(PlayerActivity.this); return (sharedPreferences.getString("userName","default")); } private void loadData(Intent data){ //check if previous offset received from sync String offSet = ""; if(data != null){ offSet = ((String)data.getExtras().getString("result")); if(!offSet.equals("")){ try{ previousReqSeek = Integer.parseInt(offSet); } catch(Exception ex){ previousReqSeek = 0; } } } //after sync data received or canceled or not available init player youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); youTubeView.initialize(DEVELOPER_KEY, this); //add listeners to YouTubePlayerView playerEventListener = new MHPlaybackEventListener(); playerStateChangeListener = new MHPlayerStateChangeListener(); } @Override protected void onDestroy() { super.onDestroy(); String clientID = getClientID(); if(isFinishing()){ firstTime= true; if(!clientID.equals("default")){ Intent syncStart = new Intent(PlayerActivity.this, CloudSync.class); syncStart.putExtra(CloudSync.INTENT_VIDEO_ID, videoID); syncStart.putExtra(CloudSync.INTENT_CLIENT_ID, clientID); syncStart.putExtra(CloudSync.INTENT_OFFSET_MILIS, "" + previousReqSeek); syncStart.putExtra(CloudSync.INTENT_COMMAND, CloudSync.INTENT_COMMAND_SET); PlayerActivity.this.startActivity(syncStart); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { loadData(data); } @Override public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { //on error toast and exit activity Toast.makeText(PlayerActivity.this, "Error loading YouTube Player", Toast.LENGTH_LONG).show(); PlayerActivity.this.finish(); } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { if (!wasRestored) { playa = player; playa.cueVideo(videoID); playa.setPlaybackEventListener(playerEventListener); playa.setPlayerStateChangeListener(playerStateChangeListener); playa.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); } } private void startVideoAt(int milis){ if(playerLoaded){ previousReqSeek = 0; playa.seekToMillis(milis); playa.play(); } else{ previousReqSeek = milis; } } private class MHPlaybackEventListener implements PlaybackEventListener { @Override public void onBuffering(boolean arg0) {} @Override public void onPaused() { //save seek position for sync previousReqSeek = playa.getCurrentTimeMillis(); } @Override public void onPlaying() {} @Override public void onSeekTo(int arg0) {} @Override public void onStopped() {} } private class MHPlayerStateChangeListener implements PlayerStateChangeListener { @Override public void onAdStarted() {} @Override public void onError(ErrorReason arg0) {} @Override public void onLoaded(String arg0) { playerLoaded = true; //in case previously requested seek seek to that point if(previousReqSeek > 0){ startVideoAt(previousReqSeek); } } @Override public void onLoading() {} @Override public void onVideoEnded() { //if video has ended then set seek position to 0 previousReqSeek = 0; } @Override public void onVideoStarted() {} } }