package com.ved.musicmapapp.adapters;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.AsyncTask;
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.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
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.OnFullscreenListener;
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.PlayerStyle;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerSupportFragment;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.ved.musicmapapp.MainActivity;
import com.ved.musicmapapp.R;
import com.ved.musicmapapp.Objects.Artist;
import com.ved.musicmapapp.Objects.Playlist;
import com.ved.musicmapapp.Objects.PlaylistArSong;
import com.ved.musicmapapp.Objects.PlaylistArtist;
import com.ved.musicmapapp.Objects.Song;
import com.ved.musicmapapp.Objects.User;
import com.ved.musicmapapp.providers.AddSongToUserPlaylistTask;
import com.ved.musicmapapp.providers.AddUserPlaylistsListTask;
import com.ved.musicmapapp.providers.LikeSongTask;
import com.ved.musicmapapp.utils.Statics;
import com.ved.musicmapapp.youtube.Video;
import com.ved.musicmapapp.youtube.YouTube;
import com.ved.musicmapapp.youtube.YouTubeException;
public class ExpandableListAdapter extends BaseExpandableListAdapter implements OnInitializedListener{
//private Context _context;
private Activity cxt;
private ArrayList<Song> songs;
private ArrayList<PlaylistArtist> playlistArtists;
private LayoutInflater inflat;
private OnClickSong oCS;
private OnBuySong oBS;
private int curSelected = -1;
private boolean hasData = false;
private boolean isPlayAll;
private User user;
private int positionClicked = -1;
private Artist artist;
private boolean isCurrentUser;
private ImageLoader imageLoader;
private DisplayImageOptions options;
ArrayList<Video> youTubeVideos=null;
ImageView play,back,forword;
SeekBar timelineBar;
TextView startTime,endTime;
TextView title;
List<String> songIdList=null;
long currentTime;
String artistName;
YouTubePlayer player;
YouTubePlayerSupportFragment youTubePlayerView;
public static final String YOUTUBE_API_KEY = "AIzaSyDyUIwVD3XycHKHL_acjO1OPf3PHPsuFHA";
// ProgressDialog pd;
float mDensity;
int lastExpandedGroupPosition= -1;
private boolean fromPlaylists;
FrameLayout loadingLayout;
LinearLayout youtubeVideoContainer;
ImageButton btnFullScreen;
public boolean isPlayAll() {
return isPlayAll;
}
ExpandableListView listView;
public void setPlayAll(boolean isPlayAll) {
this.isPlayAll = isPlayAll;
}
public ExpandableListAdapter(Activity cxt, ArrayList<Song> songs,
User mUser, String artistName, Artist artist, ExpandableListView listView) {
this.cxt = cxt;
this.songs = songs;
this.user = mUser;
this.artistName = artistName;
this.artist = artist;
this.listView = listView;
// pd = new ProgressDialog(cxt);
// pd.setMessage("Loading...");
// pd.setCancelable(false);
youTubeVideos = new ArrayList<Video>();
youTubePlayerView = new YouTubePlayerSupportFragment();
youTubePlayerView.initialize(YOUTUBE_API_KEY, this);
mDensity = cxt.getResources().getDisplayMetrics().density;
inflat = (LayoutInflater) cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
isCurrentUser = mUser.getID() == Statics.curUser.getID() ? true : false;
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_no_image)
.showImageForEmptyUri(R.drawable.img_no_image)
.showImageOnFail(R.drawable.img_no_image).cacheInMemory(true)
.cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build();
}
public ExpandableListAdapter(Activity cxt, ArrayList<Song> songs,
User mUser, String artistName, Artist artist, ExpandableListView listView,
boolean fromPlaylists, ArrayList<PlaylistArtist> artists) {
this.cxt = cxt;
this.songs = songs;
this.user = mUser;
this.artistName = artistName;
this.artist = artist;
this.fromPlaylists = fromPlaylists;
this.playlistArtists = artists;
this.listView = listView;
// pd = new ProgressDialog(cxt);
// pd.setMessage("Loading...");
// pd.setCancelable(false);
youTubeVideos = new ArrayList<Video>();
youTubePlayerView = new YouTubePlayerSupportFragment();
youTubePlayerView.initialize(YOUTUBE_API_KEY, this);
mDensity = cxt.getResources().getDisplayMetrics().density;
inflat = (LayoutInflater) cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
isCurrentUser = mUser.getID() == Statics.curUser.getID() ? true : false;
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_no_image)
.showImageForEmptyUri(R.drawable.img_no_image)
.showImageOnFail(R.drawable.img_no_image).cacheInMemory(true)
.cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build();
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this.songs.get(groupPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
youtubeVideoContainer = (LinearLayout)convertView.findViewById(R.id.youtube_video_container);
loadingLayout = (FrameLayout)convertView.findViewById(R.id.loading_video_layout);
youtubeVideoContainer.setVisibility(View.GONE);
loadingLayout.setVisibility(View.VISIBLE);
startTime=(TextView)convertView.findViewById(R.id.txt_starttime);
endTime=(TextView)convertView.findViewById(R.id.txt_endtime);
btnFullScreen = (ImageButton)convertView.findViewById(R.id.btnFullScreen);
if(player == null){
FragmentManager fragmentManager = ((FragmentActivity)cxt).getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.youtube_view, youTubePlayerView,"Youtube");
fragmentTransaction.commit();
startTime.setText("00:00");
endTime.setText("00:00");
}
play = (ImageView)convertView.findViewById(R.id.btnPlay);
back = (ImageView)convertView.findViewById(R.id.btnBack);
forword = (ImageView)convertView.findViewById(R.id.btnForword);
back.setEnabled(false);
forword.setEnabled(false);
timelineBar = (SeekBar)convertView.findViewById(R.id.songProgressBar);
title=(TextView)convertView.findViewById(R.id.song_title);
btnFullScreen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(player!=null)
player.setFullscreen(true);
}
});
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) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
}
});
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(songIdList==null)
{
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.pause_youtube));
}
else if (player != null && player.isPlaying()) {
player.pause();
}
else if(player != null && !player.isPlaying()) {
player.play();
}
notifyDataSetChanged();
}
});
if(player != null && player.isPlaying())
{
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.pause_youtube));
}
else if (player!=null && !player.isPlaying())
{
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.play_youtube));
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return this.songs.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.songs.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
public Song getItem(int arg0) {
// TODO Auto-generated method stub
return songs.get(arg0);
}
public void startYoutube(int pos){
dismissLoading(true);
setSongStateInList(Song.ListStauts.PLAYING, pos);
GetTrackFromYoutubeTask youtubeTask = new GetTrackFromYoutubeTask(songs.get(pos).getTitle(), artistName);
youtubeTask.execute();
}
public void startYoutube_forPlaylist(int pos){
dismissLoading(true);
setSongStateInList(Song.ListStauts.PLAYING, pos);
GetTrackFromYoutubeTask youtubeTask = new GetTrackFromYoutubeTask(songs.get(pos).getTitle(), songs.get(pos).getHeaderText());
youtubeTask.execute();
}
@Override
public View getGroupView(final int pos, boolean isExpanded,View v, ViewGroup parent) {
final Song songDataModel = getItem(pos);
if (v == null) {
v = inflat.inflate(R.layout.item_song, null);
}
View headerView = v.findViewById(R.id.layout_section);
if(this.fromPlaylists && this.playlistArtists != null && this.playlistArtists.size() > 0) {
if(songDataModel.getHeaderText().equals("")) {
headerView.setVisibility(View.GONE);
}else {
headerView.setVisibility(View.VISIBLE);
TextView artistNameTv = (TextView) v.findViewById(R.id.artistName);
artistNameTv.setText(songDataModel.getHeaderText());
songDataModel.getAristitId();
final ImageView avatar = (ImageView) v.findViewById(R.id.ivThumb);
imageLoader.displayImage(songDataModel.getArtistAvatar(), avatar, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
avatar.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
// TODO Auto-generated method stub
}
});
}
}else {
headerView.setVisibility(View.GONE);
}
View imv_like = v.findViewById(R.id.imv_like);
if(isCurrentUser || this.fromPlaylists) {
imv_like.setVisibility(View.INVISIBLE);
}
final TextView tv_name = (TextView) v.findViewById(R.id.tv_songName);
Typeface tf = Typeface.createFromAsset(cxt.getAssets(), "open_sans_regular.ttf");
tv_name.setTypeface(tf);
tv_name.setText(songDataModel.getTitle());
imv_like.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
choosePlaylistDialog(pos);
}
});
ImageView imv_play = (ImageView) v.findViewById(R.id.imv_play);
ImageView imv_buy = (ImageView) v.findViewById(R.id.imv_buy);
ProgressBar progLoading = (ProgressBar) v.findViewById(R.id.progLoading);
if (Song.ListStauts.LOADING == songDataModel.getListStatus() ) {
progLoading.setVisibility(View.VISIBLE);
imv_buy.setVisibility(View.GONE);
imv_play.setVisibility(View.GONE);
}
else if (Song.ListStauts.PLAYING == songDataModel.getListStatus()) {
progLoading.setVisibility(View.GONE);
imv_buy.setVisibility(View.VISIBLE);
imv_play.setVisibility(View.GONE);
positionClicked = -1;
}
else if (Song.ListStauts.NORMAL == songDataModel.getListStatus()) {
progLoading.setVisibility(View.GONE);
imv_buy.setVisibility(View.GONE);
imv_play.setVisibility(View.VISIBLE);
}
imv_buy.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (null != oBS)
oBS.onBuyClick(getItem(pos));
}
});
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (null != oCS) {
setSelected(pos);
oCS.onClick(songDataModel, pos, true);
}
}
});
return v;
}
public void choosePlaylistDialog(final int pos){
final Dialog dialog = new Dialog(this.cxt);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.choose_playlist_dialog);
dialog.setCanceledOnTouchOutside(false);
// TextView existing_playlists_header = (TextView) dialog.findViewById(R.id.existing_playlists_header);
LinearLayout playListContainer = (LinearLayout) dialog.findViewById(R.id.existing_playlists_container);
View no_data = dialog.findViewById(R.id.no_data);
final ArrayList <Playlist> playlists = Statics.curUser.getPlaylists();
if(playlists != null){
no_data.setVisibility(View.GONE);
if(playlists.size() > 0){
for(int i = 0; i < playlists.size();i++){
final int finalIndex = i;
View childLayout = inflat.inflate(R.layout.custom_textview, null);
TextView customText = (TextView)childLayout.findViewById(R.id.customText);
final Playlist currentIterationPlaylist = playlists.get(i);
customText.setText(currentIterationPlaylist.getPlaylistName());
childLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int playlistId = currentIterationPlaylist.getID();
int playlistDbId = currentIterationPlaylist.getDB_id();
PlaylistArSong song = addSongToPlaylistDB(playlistId, playlistDbId, songs.get(pos), currentIterationPlaylist);
if(song != null) {
dialog.dismiss();
playlists.remove(currentIterationPlaylist);
currentIterationPlaylist.addTrack(song, artist);
playlists.add(finalIndex, currentIterationPlaylist);
Statics.curUser.setPlaylists(playlists);
Toast.makeText(
cxt.getApplicationContext(),
"Song Added Successfully..",
Toast.LENGTH_SHORT).show();
((MainActivity)cxt).pullDB();
}
if(Statics.isNetworkConnected(cxt)){
new AddSongToUserPlaylistTask(cxt, Statics.curUser, currentIterationPlaylist) {
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(!result.equals("")) {
Toast.makeText(
cxt.getApplicationContext(),
result,
Toast.LENGTH_SHORT).show();
}
};
}.execute();
new LikeSongTask(cxt).execute(Statics.curUser.getID(),
songs.get(pos).getID(), Statics.LIKE);
}else {
Toast.makeText(
cxt.getApplicationContext(),
"Network not available, Information saved locally..",
Toast.LENGTH_SHORT).show();
}
}
});
playListContainer.addView(childLayout);
}
}
else
no_data.setVisibility(View.VISIBLE);
}
else{
// existing_playlists_header.setVisibility(View.GONE);
// playListContainer.setVisibility(View.GONE);
}
View create_playlist = dialog.findViewById(R.id.create_playlist);
create_playlist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
dialog.dismiss();
addPlaylistDialog();
}
});
dialog.show();
}
private PlaylistArSong addSongToPlaylistDB(int playlistId, int playlistDbId, Song song, Playlist playlist) {
DBAdapter adapter = new DBAdapter(cxt);
PlaylistArSong plSong = new PlaylistArSong();
plSong.setID(song.getID());
plSong.setTitle(song.getTitle());
plSong.setAlbum(song.getAlbum());
plSong.setBuyLink(song.getBuyLink("us"),"us");
plSong.set7DigigtalTrackId(song.get7DigigtalTrackId("us"),"us");
plSong.setBuyLink(song.getBuyLink("gb"),"gb");
plSong.set7DigigtalTrackId(song.get7DigigtalTrackId("gb"),"gb");
plSong.setHasSong(song.isHasSong());
plSong.setLiked(song.isLiked());
plSong.setStartLike(song.getStartLike());
plSong.setEndLike(song.getEndLike());
plSong.setAristitId(artist.getID());
plSong.setUserId(Statics.curUser.getID());
plSong.setIsSynch(-1);
plSong.setPlaylistId(playlistId);
//Adding song to songs table
String output = adapter.addSongToPlaylist(plSong);
if(output.equals("")) {
//Adding artist to artist table
adapter.addPlaylistArtist(artist, Statics.curUser, playlistId);
//Upating track count in playlist table
int trackCount = playlist.getNumberOfTracks();
playlist.setNumberOfTracks(trackCount + 1);
adapter.updatePlaylist(playlist, Statics.curUser);
return plSong;
} else {
Toast.makeText(
cxt.getApplicationContext(),
output,
Toast.LENGTH_SHORT).show();
return null;
}
}
private void addPlaylistToDB(String name) {
DBAdapter adapter = new DBAdapter(cxt);
Playlist pl = new Playlist();
pl.setID(-1);
pl.setUserId(Statics.curUser.getID()+"");
pl.setPlaylistName(name);
pl.setDateAdded(System.currentTimeMillis());
pl.setLastUpdated(0L);
pl.setArtistAvatar("");
pl.setNumberOfTracks(0);
boolean success = adapter.addUserPlaylistIfNotExists(pl, Statics.curUser);
if(success) {
// Adding list to memory model, if its added to database
ArrayList <Playlist> playlists = Statics.curUser.getPlaylists();
if(playlists == null) {
playlists = new ArrayList<Playlist>();
}
playlists.add(pl);
Statics.curUser.setPlaylists(playlists);
Toast.makeText(
cxt.getApplicationContext(),
"Playlist Successfully Created..",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(
cxt.getApplicationContext(),
"Playlist with same name already exists.",
Toast.LENGTH_SHORT).show();
}
}
public void addPlaylistDialog(){
final Dialog dialog = new Dialog(this.cxt);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.create_playlist_dialog);
dialog.setCanceledOnTouchOutside(false);
final EditText playlistName = (EditText) dialog.findViewById(R.id.et_playlist_name);
Button add = (Button)dialog.findViewById(R.id.btn_addplaylist);
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String text = playlistName.getText().toString();
if(!text.equals("")){
dialog.dismiss();
addPlaylistToDB(text);
if(Statics.isNetworkConnected(cxt)) {
//Post those which are not yet posted to server
new AddUserPlaylistsListTask(cxt, Statics.curUser) {
protected void onPostExecute(User result) {
super.onPostExecute(result);
};
}.execute();
}else {
Toast.makeText(
cxt.getApplicationContext(),
"Network not available, Information saved locally..",
Toast.LENGTH_SHORT).show();
}
}
}
});
dialog.show();
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void setOnClickSong(OnClickSong oCS) {
this.oCS = oCS;
}
public void setOnClickBuySong(OnBuySong oBS) {
this.oBS = oBS;
}
public interface OnClickSong {
public void onClick(Song song, int position, boolean play);
}
public interface OnBuySong {
public void onBuyClick(Song song);
}
public void clickItem(int position) {
if (null != oCS) {
setSelected(position);
oCS.onClick(songs.get(position), position, true);
}
}
public void dismissLoading(boolean hasData) {
this.hasData = hasData;
notifyDataSetChanged();
}
public void setSelected(int pos) {
curSelected = pos;
notifyDataSetChanged();
}
public void setSelectedSongPosition(int pos) {
positionClicked = pos;
notifyDataSetChanged();
}
public void setCurrentSongState() {
if(songs.size() > curSelected) {
Song selectedSong = songs.get(curSelected);
selectedSong.setListStatus(Song.ListStauts.NORMAL);
notifyDataSetChanged();
}
}
// @Override
// public int getCount() {
// // count = songs.size();
// // count = (count > Statics.EXPAND_VIEW_COUNT) ?
// // Statics.EXPAND_VIEW_COUNT
// // : count;
// return /* count */songs.size();
// }
public int getCount() {
return songs.size();
}
private class GetTrackFromYoutubeTask extends AsyncTask<Void, Void, String> {
private String songTitlesToSearch;
public GetTrackFromYoutubeTask (String songTitle, String artistName) {
if(!artistName.toLowerCase().contains("unknown"))
songTitlesToSearch = songTitle + ","+artistName;
else
songTitlesToSearch = songTitle;
}
@Override
protected void onPreExecute(){
// pd.show();
// youtubeVideoContainer.setVisibility(View.GONE);
// loadingLayout.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(Void... params)
{
List<Video> lst = null;
try {
lst = new YouTube().getVideos(songTitlesToSearch);
} catch (YouTubeException e) {
e.printStackTrace();
return null;
}
if(lst != null){
youTubeVideos.clear();
for (Video l : lst)
{
youTubeVideos.add(l);
}
}
return songTitlesToSearch;
}
@Override
protected void onPostExecute(String result)
{
if(result == null || youTubeVideos.size() == 0){
Toast.makeText(cxt, "Error While loading Song, Try Again Later..!", Toast.LENGTH_SHORT).show();
// youtubeVideoContainer.setVisibility(View.VISIBLE);
// loadingLayout.setVisibility(View.GONE);
// pd.dismiss();
if(isPlayAll){
lastExpandedGroupPosition++;
startYoutubeVideo(lastExpandedGroupPosition);
}
return;
}
Video video = youTubeVideos.get(0);
new VideoAsyncTask(cxt).execute();
}
}
@Override
public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) {
Toast.makeText(cxt, "Failured to Initialize!", Toast.LENGTH_LONG).show();
}
@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {
this.player = player;
this.player.setFullscreen(false);
player.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
this.player.setShowFullscreenButton(true);
this.player.setPlayerStyle(PlayerStyle.CHROMELESS);
this.player.setPlayerStateChangeListener(playerStateChangeListener);
this.player.setPlaybackEventListener(playbackEventListener);
player.setOnFullscreenListener(new OnFullscreenListener(){
@Override
public void onFullscreen(boolean arg0) {
Log.i("check","Video Played in full screen");
}});
}
private class VideoAsyncTask extends AsyncTask<String, String, String> {
public VideoAsyncTask(Activity con) {
//TODO:
}
@Override
protected void onPreExecute() {
//TODO:
}
@Override
protected String doInBackground(String... params) {
//TODO:
Log.i("check","In do in background....");
return null;
}
@Override
protected void onPostExecute(String result) {
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();
}
}
@Override
protected void onProgressUpdate(String... text) {
//TODO:
}
}
private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() {
@Override
public void onAdStarted() {
Log.i("check","///onVideo AddStarted");
}
@Override
public void onLoaded(final String id) {
cxt.runOnUiThread(new Runnable() {
@Override
public void run() {
Video video = youTubeVideos.get(0);
Log.i("check","///onLoaded : "+ video.title);
}
});
}
@Override
public void onLoading() {
Log.i("check","///onVideo Loading");
}
@Override
public void onVideoEnded() {
Log.i("check","///onVideo Ended");
Log.i("check","///onVideo End");
if(isPlayAll){
lastExpandedGroupPosition++;
startYoutubeVideo(lastExpandedGroupPosition);
}
if(play != null)
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.play_youtube));
}
@SuppressLint("NewApi")
@Override
public void onVideoStarted() {
Log.i("check","///onVideo Started");
final long duration = TimeUnit.MILLISECONDS.toSeconds(player.getDurationMillis());
timelineBar.setMax((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) {
e.printStackTrace();
}
cxt.runOnUiThread(new Runnable() {
@Override
public void run() {
//pd.dismiss();
long progress =+ currentTime;
if(player != null){
play.setImageDrawable(cxt.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);
//int second = (player.getCurrentTimeMillis()/1000)%60;
Log.i("","onVideo time "+currentTime);
stTimeSec = (player.getCurrentTimeMillis()/1000)%60;
stTimeMin = (player.getCurrentTimeMillis() / 1000) / 60;
long mili1 = player.getCurrentTimeMillis();
SimpleDateFormat formatter1 = new SimpleDateFormat("mm:ss");
Date date1 = new Date(mili1);
String result1 = formatter1.format(date1);
startTime.setText(result1);
currentTime = (player.getCurrentTimeMillis()/1000) % 60;
Log.i("","onVideo current Time"+currentTime);
count = (stTimeMin*60)+stTimeSec;
// circularSeekbar.setProgress(count);
timelineBar.setProgress(count);
notifyDataSetChanged();
}
}});
}
//}
}
};
t.start();
}
@Override
public void onError(ErrorReason arg0) {
youtubeVideoContainer.setVisibility(View.VISIBLE);
loadingLayout.setVisibility(View.GONE);
// pd.dismiss();
Log.i("check","///onError");
if(play != null)
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.play_youtube));
}
};
private PlaybackEventListener playbackEventListener = new PlaybackEventListener() {
@Override
public void onBuffering(boolean arg0) {
youtubeVideoContainer.setVisibility(View.GONE);
loadingLayout.setVisibility(View.VISIBLE);
double mili = player.getDurationMillis();
double min = (mili/1000)/60;
min = roundTwoDecimals(min);
Log.i("","///mili "+ min);
Log.i("check","///onBuffering");
}
@Override
public void onPaused() {
Log.i("check","///onPaused");
}
@Override
public void onPlaying() {
// pd.dismiss();
youtubeVideoContainer.setVisibility(View.VISIBLE);
loadingLayout.setVisibility(View.GONE);
Log.i("check","///onPlaying");
}
@Override
public void onSeekTo(int arg0) {
Log.i("check","///onSeek "+arg0);
}
@Override
public void onStopped() {
Log.i("check","///onStopped ");
}
};
double roundTwoDecimals(double d)
{
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
public void clear() {
if(player != null)
player.release();
player = null;
resetSongStatus();
}
@Override
public void onGroupExpanded(int groupPosition){
//collapse the old expanded group, if not the same
//as new group to expand
if(groupPosition != lastExpandedGroupPosition){
//pd.dismiss();
if(youtubeVideoContainer != null)
youtubeVideoContainer.setVisibility(View.VISIBLE);
if(loadingLayout != null)
loadingLayout.setVisibility(View.GONE);
listView.collapseGroup(lastExpandedGroupPosition);
}
super.onGroupExpanded(groupPosition);
lastExpandedGroupPosition = groupPosition;
}
private void startYoutubeVideo(int groupPosition) {
dismissLoading(true);
//pd.dismiss();
youtubeVideoContainer.setVisibility(View.VISIBLE);
loadingLayout.setVisibility(View.GONE);
if(groupPosition >= songs.size()){
listView.collapseGroup(lastExpandedGroupPosition-1);
isPlayAll = false;
return;
}
if(!listView.isGroupExpanded(groupPosition)){
listView.collapseGroup(lastExpandedGroupPosition-1);
listView.expandGroup(groupPosition);
}
else{
listView.collapseGroup(groupPosition);
clear();
}
startYoutube(groupPosition);
}
public void stopVideos(){
play.setImageDrawable(cxt.getResources().getDrawable(R.drawable.play_youtube));
notifyDataSetChanged();
player.pause();
}
public void setSongStateInList(Song.ListStauts status, int position) {
if(songs.size() > position) {
Song song = songs.get(position);
song.setListStatus(status);
notifyDataSetChanged();
}
}
public void resetSongStatus() {
for(Song song: songs) {
song.setListStatus(Song.ListStauts.NORMAL);
}
notifyDataSetChanged();
}
}