package com.ved.musicmapapp.adapters; import java.util.ArrayList; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; 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; public class SongAdapter extends BaseAdapter { private Activity cxt; private ArrayList<Song> songs; private LayoutInflater inflat; private OnClickSong oCS; private OnBuySong oBS; private int curSelected = -1; private boolean loading = false, hasData = false; private boolean isPlayAll; private User user; private int positionClicked = -1; String artistName; private Artist artist; ListView listView; // private int count = Statics.EXPAND_VIEW_COUNT; private boolean fromPlaylists; private ImageLoader imageLoader; private DisplayImageOptions options; private boolean isCurrentUser; private ArrayList<PlaylistArtist> playlistArtists; public boolean isPlayAll() { return isPlayAll; } public void setPlayAll(boolean isPlayAll) { this.isPlayAll = isPlayAll; } public SongAdapter(Activity cxt, ArrayList<Song> songs, User mUser, String artistName, Artist artist, ListView listView){ this.cxt = cxt; this.songs = songs; this.user = mUser; this.artistName = artistName; this.artist = artist; this.listView = listView; inflat = (LayoutInflater) cxt .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public SongAdapter(Activity cxt, ArrayList<Song> songs, User mUser, String artistName, Artist artist, ListView 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; 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 SongAdapter(Activity cxt, ArrayList<Song> songs, User mUser) { this.cxt = cxt; this.songs = songs; this.user = mUser; inflat = (LayoutInflater) cxt .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // count = songs.size(); // count = (count > Statics.EXPAND_VIEW_COUNT) ? // Statics.EXPAND_VIEW_COUNT // : count; return /* count */songs.size(); } @Override public long getItemId(int position) { return -1; } // public void expandData() { // count += Statics.EXPAND_VIEW_COUNT; // count = (count > songs.size()) ? songs.size() : count; // notifyDataSetChanged(); // } @Override public View getView(final int pos, 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),pos); } }); v.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (null != oCS) { resetSongStatusOfOthers(pos); setSelected(pos); oCS.onClick(songDataModel, pos, true); } } }); return v; } 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; } } 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(); } 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(); } 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 dismissLoading(boolean hasData) { this.hasData = hasData; loading = false; notifyDataSetChanged(); } public void setSelected(int pos) { loading = true; curSelected = pos; notifyDataSetChanged(); } public void setSelectedSongPosition(int pos) { positionClicked = pos; notifyDataSetChanged(); } @Override public Song getItem(int arg0) { // TODO Auto-generated method stub return songs.get(arg0); } 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,int position); } public void clickItem(int position) { if (null != oCS) { setSelected(position); oCS.onClick(songs.get(position), position, true); } } public void resetSongStatusOfOthers(int pos) { int i = 0; for(Song song: songs) { if(i != pos) song.setListStatus(Song.ListStauts.NORMAL); else song.setListStatus(Song.ListStauts.LOADING); i++; } notifyDataSetChanged(); } public void resetSongStatus() { for(Song song: songs) { song.setListStatus(Song.ListStauts.NORMAL); } notifyDataSetChanged(); } public void setSongStateInList(Song.ListStauts status, int position) { if(songs.size() > position) { Song song = songs.get(position); song.setListStatus(status); notifyDataSetChanged(); } } public void setCurrentSongState() { if(songs.size() > curSelected) { Song selectedSong = songs.get(curSelected); selectedSong.setListStatus(Song.ListStauts.NORMAL); notifyDataSetChanged(); } } public String getArtistName(int pos){ Song songDataModel = getItem(pos); return songDataModel.getHeaderText(); } }