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);
}
}*/
}