package com.naman14.timber.adapters; import android.app.Activity; import android.graphics.Bitmap; import android.support.v7.graphics.Palette; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.afollestad.appthemeengine.Config; import com.naman14.timber.R; import com.naman14.timber.dataloaders.LastAddedLoader; import com.naman14.timber.dataloaders.PlaylistSongLoader; import com.naman14.timber.dataloaders.SongLoader; import com.naman14.timber.dataloaders.TopTracksLoader; import com.naman14.timber.models.Playlist; import com.naman14.timber.models.Song; import com.naman14.timber.utils.Constants; import com.naman14.timber.utils.Helpers; import com.naman14.timber.utils.NavigationUtils; import com.naman14.timber.utils.PreferencesUtility; import com.naman14.timber.utils.TimberUtils; 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.SimpleImageLoadingListener; import java.util.List; import java.util.Random; /** * Created by naman on 31/10/16. */ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ItemHolder> { private List<Playlist> arraylist; private Activity mContext; private boolean isGrid; private boolean showAuto; private int songCountInt; private long firstAlbumID = -1; private int foregroundColor; int[] foregroundColors = {R.color.pink_transparent, R.color.green_transparent, R.color.blue_transparent, R.color.red_transparent, R.color.purple_transparent}; public PlaylistAdapter(Activity context, List<Playlist> arraylist) { this.arraylist = arraylist; this.mContext = context; this.isGrid = PreferencesUtility.getInstance(mContext).getPlaylistView() == Constants.PLAYLIST_VIEW_GRID; this.showAuto = PreferencesUtility.getInstance(mContext).showAutoPlaylist(); Random random = new Random(); int rndInt = random.nextInt(foregroundColors.length); foregroundColor = foregroundColors[rndInt]; } @Override public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) { if (isGrid) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_album_grid, null); ItemHolder ml = new ItemHolder(v); return ml; } else { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_album_list, null); ItemHolder ml = new ItemHolder(v); return ml; } } @Override public void onBindViewHolder(final ItemHolder itemHolder, int i) { final Playlist localItem = arraylist.get(i); itemHolder.title.setText(localItem.name); String s = getAlbumArtUri(i, localItem.id); itemHolder.albumArt.setTag(firstAlbumID); ImageLoader.getInstance().displayImage(s, itemHolder.albumArt, new DisplayImageOptions.Builder().cacheInMemory(true) .showImageOnFail(R.drawable.ic_empty_music2) .resetViewBeforeLoading(true) .build(), new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (isGrid) { new Palette.Builder(loadedImage).generate(new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch swatch = palette.getVibrantSwatch(); if (swatch != null) { int color = swatch.getRgb(); itemHolder.footer.setBackgroundColor(color); int textColor = TimberUtils.getBlackWhiteColor(swatch.getTitleTextColor()); itemHolder.title.setTextColor(textColor); itemHolder.artist.setTextColor(textColor); } else { Palette.Swatch mutedSwatch = palette.getMutedSwatch(); if (mutedSwatch != null) { int color = mutedSwatch.getRgb(); itemHolder.footer.setBackgroundColor(color); int textColor = TimberUtils.getBlackWhiteColor(mutedSwatch.getTitleTextColor()); itemHolder.title.setTextColor(textColor); itemHolder.artist.setTextColor(textColor); } } } }); } } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { if (isGrid) { itemHolder.footer.setBackgroundColor(0); if (mContext != null) { int textColorPrimary = Config.textColorPrimary(mContext, Helpers.getATEKey(mContext)); itemHolder.title.setTextColor(textColorPrimary); itemHolder.artist.setTextColor(textColorPrimary); } } } }); itemHolder.artist.setText(" " + String.valueOf(songCountInt) + " " + mContext.getString(R.string.songs)); if (TimberUtils.isLollipop()) itemHolder.albumArt.setTransitionName("transition_album_art" + i); } private String getAlbumArtUri(int position, long id) { if (mContext != null) { firstAlbumID = -1; if (showAuto) { switch (position) { case 0: List<Song> lastAddedSongs = LastAddedLoader.getLastAddedSongs(mContext); songCountInt = lastAddedSongs.size(); if (songCountInt != 0) { firstAlbumID = lastAddedSongs.get(0).albumId; return TimberUtils.getAlbumArtUri(firstAlbumID).toString(); } else return "nosongs"; case 1: TopTracksLoader recentloader = new TopTracksLoader(mContext, TopTracksLoader.QueryType.RecentSongs); List<Song> recentsongs = SongLoader.getSongsForCursor(TopTracksLoader.getCursor()); songCountInt = recentsongs.size(); if (songCountInt != 0) { firstAlbumID = recentsongs.get(0).albumId; return TimberUtils.getAlbumArtUri(firstAlbumID).toString(); } else return "nosongs"; case 2: TopTracksLoader topTracksLoader = new TopTracksLoader(mContext, TopTracksLoader.QueryType.TopTracks); List<Song> topsongs = SongLoader.getSongsForCursor(TopTracksLoader.getCursor()); songCountInt = topsongs.size(); if (songCountInt != 0) { firstAlbumID = topsongs.get(0).albumId; return TimberUtils.getAlbumArtUri(firstAlbumID).toString(); } else return "nosongs"; default: List<Song> playlistsongs = PlaylistSongLoader.getSongsInPlaylist(mContext, id); songCountInt = playlistsongs.size(); if (songCountInt != 0) { firstAlbumID = playlistsongs.get(0).albumId; return TimberUtils.getAlbumArtUri(firstAlbumID).toString(); } else return "nosongs"; } } else { List<Song> playlistsongs = PlaylistSongLoader.getSongsInPlaylist(mContext, id); songCountInt = playlistsongs.size(); if (songCountInt != 0) { firstAlbumID = playlistsongs.get(0).albumId; return TimberUtils.getAlbumArtUri(firstAlbumID).toString(); } else return "nosongs"; } } return null; } @Override public int getItemCount() { return (null != arraylist ? arraylist.size() : 0); } public void updateDataSet(List<Playlist> arraylist) { this.arraylist.clear(); this.arraylist.addAll(arraylist); notifyDataSetChanged(); } public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { protected TextView title, artist; protected ImageView albumArt; protected View footer; public ItemHolder(View view) { super(view); this.title = (TextView) view.findViewById(R.id.album_title); this.artist = (TextView) view.findViewById(R.id.album_artist); this.albumArt = (ImageView) view.findViewById(R.id.album_art); this.footer = view.findViewById(R.id.footer); view.setOnClickListener(this); } @Override public void onClick(View v) { NavigationUtils.navigateToPlaylistDetail(mContext, getPlaylistType(getAdapterPosition()), (long) albumArt.getTag(), String.valueOf(title.getText()), foregroundColor, arraylist.get(getAdapterPosition()).id, null); } } private String getPlaylistType(int position) { if (showAuto) { switch (position) { case 0: return Constants.NAVIGATE_PLAYLIST_LASTADDED; case 1: return Constants.NAVIGATE_PLAYLIST_RECENT; case 2: return Constants.NAVIGATE_PLAYLIST_TOPTRACKS; default: return Constants.NAVIGATE_PLAYLIST_USERCREATED; } } else return Constants.NAVIGATE_PLAYLIST_USERCREATED; } }