package com.ved.musicmapapp; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.concurrent.TimeUnit; 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.PlaybackEventListener; import com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener; import com.google.android.youtube.player.YouTubePlayer.PlayerStyle; import com.google.android.youtube.player.YouTubePlayer.Provider; import com.google.android.youtube.player.YouTubePlayerSupportFragment; import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; import com.ved.musicmapapp.R; import com.ved.musicmapapp.youtube.Video; import com.ved.musicmapapp.youtube.YouTube; import com.ved.musicmapapp.youtube.YouTubeException; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; public class JsonParsingActivity extends FragmentActivity implements OnInitializedListener { String songTitlesToSearch = null; YouTubePlayer player; YouTubePlayerSupportFragment youTubePlayerView; ImageView play,back,forword; SeekBar timelineBar; TextView startTime,endTime; TextView title; List<String> songIdList=null; long currentTime; ProgressDialog pd; public static final String YOUTUBE_API_KEY = "AIzaSyDyUIwVD3XycHKHL_acjO1OPf3PHPsuFHA"; ArrayList<Video> alrts=null; String backgroundUrl; boolean isPlayAllSelected; ArrayList<String> songNames = new ArrayList<String>(); int currentSong; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_youtube_player); pd = new ProgressDialog(this); pd.setMessage("Loading..."); pd.setCancelable(false); pd.show(); Bundle extras = getIntent().getExtras(); String list = ""; if(extras != null) { songTitlesToSearch = extras.getString("searchterm"); backgroundUrl = extras.getString("background_url"); isPlayAllSelected = extras.getBoolean("playall"); list = extras.getString("list"); } //if(isPlayAllSelected) { currentSong = 0; StringTokenizer str = new StringTokenizer(list,","); int index = 0; while(str.hasMoreTokens()){ String temp = str.nextToken(); if(temp.equals(songTitlesToSearch)) currentSong = index; if(!temp.equals("")) songNames.add(temp); index++; } } // else{ // songNames.add(songTitlesToSearch); // currentSong = 0; // } alrts = new ArrayList<Video>(); youTubePlayerView = new YouTubePlayerSupportFragment(); intialize(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.youtube_view, youTubePlayerView); fragmentTransaction.commit(); GetTopicRequest test = new GetTopicRequest(); test.execute(); } private void intialize(){ play = (ImageView)findViewById(R.id.btnPlay); back = (ImageView)findViewById(R.id.btnBack); forword = (ImageView)findViewById(R.id.btnForword); play.setEnabled(false); back.setEnabled(false); forword.setEnabled(false); youTubePlayerView.initialize(YOUTUBE_API_KEY, this); timelineBar = (SeekBar)findViewById(R.id.songProgressBar); startTime=(TextView)findViewById(R.id.txt_starttime); endTime=(TextView)findViewById(R.id.txt_endtime); title=(TextView)findViewById(R.id.song_title); timelineBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { int progress = timelineBar.getProgress(); if(player!=null) { player.seekToMillis(progress*1000); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub } }); play.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // if(Utils.isNetworkAvailable(activity)) { if(songIdList==null) { // new VideoAsyncTask(JsonParsingActivity.this).execute(); play.setImageDrawable(getResources().getDrawable(R.drawable.pause_youtube)); } else if (player!=null && player.isPlaying()) { player.pause(); play.setImageDrawable(getResources().getDrawable(R.drawable.play_youtube)); } else { if(player!=null&&!player.isPlaying()) { player.play(); play.setImageDrawable(getResources().getDrawable(R.drawable.pause_youtube)); } } } } }); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { play.setImageDrawable(getResources().getDrawable(R.drawable.play_youtube)); if(player.isPlaying()) player.pause(); Log.i("","onVideo End"); // if(isPlayAllSelected) { currentSong--; if(currentSong>0 && songNames.size() > currentSong) songTitlesToSearch = songNames.get(currentSong); else currentSong++; title.setText(""); GetTopicRequest test = new GetTopicRequest(); test.execute(); } } }); forword.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if(player.isPlaying()) player.pause(); play.setImageDrawable(getResources().getDrawable(R.drawable.play_youtube)); Log.i("","onVideo End"); //if(isPlayAllSelected) { currentSong++; if(currentSong>0 && songNames.size() > currentSong) songTitlesToSearch = songNames.get(currentSong); else currentSong--; title.setText(""); GetTopicRequest test = new GetTopicRequest(); test.execute(); } } }); } private class GetTopicRequest extends AsyncTask<Void, Void, String> { private int count = 0; @Override protected void onPreExecute(){ pd.show(); } @Override protected String doInBackground(Void... params) { List<Video> lst = null; try { String s = ""; // if(songNames.size() > currentSong && currentSong >= 0) // s = songNames.get(currentSong); // else // return ""; lst = new YouTube().getVideos(songTitlesToSearch); } catch (YouTubeException e) { e.printStackTrace(); return null; } if(lst != null){ alrts.clear(); for (Video l : lst) { alrts.add(l); } } return songTitlesToSearch; } @Override protected void onPostExecute(String result) { if(result == null){ Toast.makeText(JsonParsingActivity.this, "Error While loading Song, Try Again Later..!", Toast.LENGTH_SHORT).show(); pd.dismiss(); finish(); return; } play.setEnabled(true); back.setEnabled(true); forword.setEnabled(true); if(alrts.size() == 0){ Toast.makeText(JsonParsingActivity.this, "Error While loading Song, Try Again Later..!", Toast.LENGTH_SHORT).show(); pd.dismiss(); finish(); return; } //pd.dismiss(); Video video = alrts.get(0); // player.video.thumbnailUrl; title.setText(""+video.title); new VideoAsyncTask(JsonParsingActivity.this).execute(); /* String s = Video.getId(0); myWebView.getSettings().setJavaScriptEnabled(true); // myWebView.getSettings().setPluginsEnabled(true); myWebView.loadUrl("http://www.youtube.com/embed/"+s); //String playVideo= "<html><body>Youtube video .. <br> <iframe class=\"youtube-player\" type=\"text/html\" width=\"640\" height=\"385\" src=\"http://www.youtube.com/embed/"+s+"\" frameborder=\"0\"></body></html>"; /// myWebView.loadData(playVideo, "text/html", "utf-8"); // arrayAdapter.notifyDataSetChanged(); */ } } @Override public void onResume(){ super.onResume(); } @Override public void onPause(){ super.onPause(); pd.dismiss(); } @Override public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) { Toast.makeText(JsonParsingActivity.this, "Failured to Initialize!", Toast.LENGTH_LONG).show(); } @Override public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) { this.player = player; this.player.setFullscreen(false); this.player.setShowFullscreenButton(true); this.player.setPlayerStyle(PlayerStyle.CHROMELESS); this.player.setPlayerStateChangeListener(playerStateChangeListener); this.player.setPlaybackEventListener(playbackEventListener); } private class VideoAsyncTask extends AsyncTask<String, String, String> { public VideoAsyncTask(Activity con) { } @Override protected void onPreExecute() { } @Override protected String doInBackground(String... params) { //new GetYouTubeUserVideosTask().run(); //videoList = VideoController.getVideos(); //new GetYouTubeUserVideosTask(); Log.i("check","In do in background...."); return null; } @Override protected void onPostExecute(String result) { //if(videoList!=null) { if(player!=null) { songIdList = new ArrayList<String>(); songIdList.add(Video.getId(0)); //songIdList = getSongIds(videoList); if(songIdList!=null){ Log.i("check","Video id is : "+ Video.getId(0)); player.loadVideos(songIdList); } //player.play(); } } /*else { Utils.processError(activity); }*/ } @Override protected void onProgressUpdate(String... text) { } } private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() { @Override public void onAdStarted() { Log.i("","onVideo AddStarted"); } @Override public void onLoaded(final String id) { //Log.i("","onladed "+arg0); //if(videoList!=null) { runOnUiThread(new Runnable() { @Override public void run() { Video video = alrts.get(0); Log.i("check","onLoaded : "+ video.title); title.setText(""+video.title); } }); } } @Override public void onLoading() { Log.i("check","onVideo Loading"); } @Override public void onVideoEnded() { Log.i("check","onVideo Ended"); play.setImageDrawable(getResources().getDrawable(R.drawable.play_youtube)); Log.i("","onVideo End"); if(isPlayAllSelected){ currentSong++; title.setText(""); GetTopicRequest test = new GetTopicRequest(); test.execute(); } } @SuppressLint("NewApi") @Override public void onVideoStarted() { //pd.dismiss(); Log.i("check","onVideo Started"); play.setImageDrawable(getResources().getDrawable(R.drawable.pause_youtube)); long mili = player.getDurationMillis(); SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); Date date = new Date(mili); String result = formatter.format(date); endTime.setText(""+result); Log.i("check","End time is : " + result); if(endTime.getText().toString().equals("0")){ Toast.makeText(JsonParsingActivity.this, "Error while loading video..", Toast.LENGTH_LONG).show(); finish(); return; } final long duration = TimeUnit.MILLISECONDS.toSeconds(player.getDurationMillis()); timelineBar.setMax((int)duration); /// circularSeekbar.setMaxProgress((int)duration); currentTime = TimeUnit.MILLISECONDS.toSeconds(player.getCurrentTimeMillis()); final Thread t = new Thread(){ int stTimeSec = 0; int stTimeMin=0; int count=0; @Override public void run(){ while(currentTime<=duration){ try { sleep(900); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } runOnUiThread(new Runnable() { @Override public void run() { //pd.dismiss(); long progress =+ currentTime; if(player != null){ //int second = (player.getCurrentTimeMillis()/1000)%60; Log.i("","onVideo time "+currentTime); stTimeSec = (player.getCurrentTimeMillis()/1000)%60; stTimeMin = (player.getCurrentTimeMillis() / 1000) / 60; long mili = player.getCurrentTimeMillis(); SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); Date date = new Date(mili); String result = formatter.format(date); startTime.setText(result); currentTime = (player.getCurrentTimeMillis()/1000) % 60; Log.i("","onVideo current Time"+currentTime); count = (stTimeMin*60)+stTimeSec; // circularSeekbar.setProgress(count); timelineBar.setProgress(count); } }}); } //} } }; t.start(); } @Override public void onError(ErrorReason arg0) { pd.dismiss(); } }; private PlaybackEventListener playbackEventListener = new PlaybackEventListener() { @Override public void onBuffering(boolean arg0) { double mili = player.getDurationMillis(); double min = (mili/1000)/60; min = roundTwoDecimals(min); Log.i("","mili "+ min); } @Override public void onPaused() { Log.i("","onVideo Paused"); } @Override public void onPlaying() { pd.dismiss(); } @Override public void onSeekTo(int arg0) { Log.i("","onSeek "+arg0); } @Override public void onStopped() { } }; @Override protected void onDestroy() { super.onDestroy(); if(player != null) player.release(); player = null; } @Override protected void onStop() { super.onStop(); if(player != null) player.release(); player = null; } double roundTwoDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); return Double.valueOf(twoDForm.format(d)); } /*private class LoadBackground extends AsyncTask<String, Void, Drawable> { private String imageUrl , imageName; public LoadBackground(String url, String file_name) { this.imageUrl = url; this.imageName = file_name; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Drawable doInBackground(String... urls) { try { InputStream is = (InputStream) this.fetch(this.imageUrl); Drawable d = Drawable.createFromStream(is, this.imageName); return d; } catch (MalformedURLException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } } private Object fetch(String address) throws MalformedURLException,IOException { URL url = new URL(address); Object content = url.getContent(); return content; } @SuppressWarnings("deprecation") @Override protected void onPostExecute(Drawable result) { super.onPostExecute(result); youtube_container.setBackgroundDrawable(result); } }*/ }