View as function now working in all fragments. (Except playlist fragment because it makes no sense there.)

This commit is contained in:
Karim Abou Zeid 2015-07-15 17:12:33 +02:00
commit cee223cdbb
11 changed files with 203 additions and 30 deletions

View file

@ -67,10 +67,6 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
notifyDataSetChanged();
}
public List<Album> getDataSet() {
return dataSet;
}
public void swapDataSet(List<Album> dataSet) {
this.dataSet = dataSet;
notifyDataSetChanged();

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.adapter.artist;
import android.graphics.Bitmap;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -21,10 +22,17 @@ import com.kabouzeid.gramophone.loader.ArtistSongLoader;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList;
import java.util.List;
@ -33,27 +41,34 @@ import java.util.List;
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolder, Artist> {
private static final int FADE_IN_TIME = 500;
protected final AppCompatActivity activity;
protected ArrayList<Artist> dataSet;
protected int itemLayoutRes;
public ArtistAdapter(@NonNull AppCompatActivity activity, ArrayList<Artist> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
protected boolean usePalette = false;
public ArtistAdapter(@NonNull AppCompatActivity activity, ArrayList<Artist> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, cabHolder, R.menu.menu_media_selection);
this.activity = activity;
this.dataSet = dataSet;
this.itemLayoutRes = itemLayoutRes;
this.usePalette = usePalette;
setHasStableIds(true);
}
public ArrayList<Artist> getDataSet() {
return dataSet;
}
public void swapDataSet(ArrayList<Artist> dataSet) {
this.dataSet = dataSet;
notifyDataSetChanged();
}
public void usePalette(boolean usePalette) {
this.usePalette = usePalette;
notifyDataSetChanged();
}
@Override
public long getItemId(int position) {
return dataSet.get(position).id;
@ -73,6 +88,15 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final Artist artist = dataSet.get(position);
final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
setColors(defaultBarColor, holder);
boolean isChecked = isChecked(artist);
holder.itemView.setActivated(isChecked);
if (holder.selectedIndicator != null) {
holder.selectedIndicator.setVisibility(isChecked ? View.VISIBLE : View.GONE);
}
if (holder.title != null) {
holder.title.setText(artist.name);
}
@ -92,10 +116,51 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.showImageOnFail(R.drawable.default_artist_image)
.build()
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
return bitmap;
}
})
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME) {
@Override
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
boolean loadedFromMemoryCache = loadedFrom == LoadedFrom.MEMORY_CACHE;
if (loadedFromMemoryCache) {
imageAware.setImageBitmap(bitmap);
} else {
super.display(bitmap, imageAware, loadedFrom);
}
if (usePalette)
setColors(holder.paletteColor, holder);
}
})
.build(),
new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
if (usePalette)
setColors(defaultBarColor, holder);
}
}
);
}
private void setColors(int color, ViewHolder holder) {
if (holder.paletteColorContainer != null) {
holder.paletteColorContainer.setBackgroundColor(color);
int textColor = ColorUtil.getTextColorForBackground(color);
if (holder.title != null) {
holder.title.setTextColor(textColor);
}
if (holder.text != null) {
holder.text.setTextColor(textColor);
}
}
}
@Override
public int getItemCount() {
return dataSet.size();

View file

@ -19,8 +19,8 @@ public class AlbumSongAdapter extends SongAdapter {
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
public AlbumSongAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, cabHolder);
public AlbumSongAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
}
@Override

View file

@ -25,8 +25,8 @@ public class PlaylistSongAdapter extends SongAdapter {
public static final String TAG = PlaylistSongAdapter.class.getSimpleName();
public PlaylistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<PlaylistSong> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
super(activity, (ArrayList<Song>) (List) dataSet, itemLayoutRes, cabHolder);
public PlaylistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<PlaylistSong> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, (ArrayList<Song>) (List) dataSet, itemLayoutRes, usePalette, cabHolder);
overrideMultiSelectMenuRes(R.menu.menu_playlists_songs_selection);
}

View file

@ -28,8 +28,8 @@ public class SmartPlaylistSongAdapter extends SongAdapter {
return dataSet.get(position).id;
}
public SmartPlaylistSongAdapter(AppCompatActivity activity, @NonNull ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, cabHolder);
public SmartPlaylistSongAdapter(AppCompatActivity activity, @NonNull ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
overrideMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection);
}

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.adapter.song;
import android.graphics.Bitmap;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -21,11 +22,17 @@ import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
import java.util.ArrayList;
@ -42,11 +49,14 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
protected int itemLayoutRes;
public SongAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
protected boolean usePalette = false;
public SongAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, cabHolder, R.menu.menu_media_selection);
this.activity = activity;
this.dataSet = dataSet;
this.itemLayoutRes = itemLayoutRes;
this.usePalette = usePalette;
setHasStableIds(true);
}
@ -55,6 +65,11 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
notifyDataSetChanged();
}
public void usePalette(boolean usePalette) {
this.usePalette = usePalette;
notifyDataSetChanged();
}
public ArrayList<Song> getDataSet() {
return dataSet;
}
@ -79,6 +94,15 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final Song song = dataSet.get(position);
final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
setColors(defaultBarColor, holder);
boolean isChecked = isChecked(song);
holder.itemView.setActivated(isChecked);
if (holder.selectedIndicator != null) {
holder.selectedIndicator.setVisibility(isChecked ? View.VISIBLE : View.GONE);
}
if (holder.title != null) {
holder.title.setText(getSongTitle(song));
}
@ -93,12 +117,50 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
.cacheInMemory(true)
.showImageOnFail(R.drawable.default_album_art)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME, true, true, false))
.build()
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
holder.paletteColor = ColorUtil.generateColor(activity, bitmap);
return bitmap;
}
})
.displayer(new FadeInBitmapDisplayer(FADE_IN_TIME) {
@Override
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
boolean loadedFromMemoryCache = loadedFrom == LoadedFrom.MEMORY_CACHE;
if (loadedFromMemoryCache) {
imageAware.setImageBitmap(bitmap);
} else {
super.display(bitmap, imageAware, loadedFrom);
}
if (usePalette)
setColors(holder.paletteColor, holder);
}
})
.build(),
new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
if (usePalette)
setColors(defaultBarColor, holder);
}
}
);
}
}
holder.itemView.setActivated(isChecked(song));
private void setColors(int color, ViewHolder holder) {
if (holder.paletteColorContainer != null) {
holder.paletteColorContainer.setBackgroundColor(color);
int textColor = ColorUtil.getTextColorForBackground(color);
if (holder.title != null) {
holder.title.setTextColor(textColor);
}
if (holder.text != null) {
holder.text.setTextColor(textColor);
}
}
}
protected String getSongTitle(Song song) {

View file

@ -294,7 +294,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
}
private void setUpSongsAdapter() {
adapter = new AlbumSongAdapter(this, loadSongDataSet(), R.layout.item_list, this);
adapter = new AlbumSongAdapter(this, loadSongDataSet(), R.layout.item_list, false, this);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(adapter);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {

View file

@ -75,9 +75,9 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
private void setUpRecyclerView() {
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
if (playlist instanceof AbsSmartPlaylist) {
adapter = new SmartPlaylistSongAdapter(this, loadSmartPlaylistDataSet(), R.layout.item_list, this);
adapter = new SmartPlaylistSongAdapter(this, loadSmartPlaylistDataSet(), R.layout.item_list, false, this);
} else {
adapter = new PlaylistSongAdapter(this, loadPlaylistDataSet(), R.layout.item_list, this);
adapter = new PlaylistSongAdapter(this, loadPlaylistDataSet(), R.layout.item_list, false, this);
DragSortRecycler dragSortRecycler = new DragSortRecycler();
dragSortRecycler.setViewHandleId(R.id.image);

View file

@ -26,7 +26,7 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewLayoutModeFrag
getMainActivity(),
AlbumLoader.getAllAlbums(getActivity()),
getItemLayout(),
PreferenceUtil.getInstance(getActivity()).albumColoredFooters(),
loadUsePalette(),
getMainActivity());
}

View file

@ -6,18 +6,19 @@ import android.support.v7.widget.GridLayoutManager;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.artist.ArtistAdapter;
import com.kabouzeid.gramophone.loader.ArtistLoader;
import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment<ArtistAdapter, GridLayoutManager> {
public class ArtistViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment<ArtistAdapter, GridLayoutManager> {
public static final String TAG = ArtistViewFragment.class.getSimpleName();
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
return new GridLayoutManager(getActivity(), 2);
return new GridLayoutManager(getActivity(), getColumnNumber());
}
@NonNull
@ -26,7 +27,8 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment<Arti
return new ArtistAdapter(
getMainActivity(),
ArtistLoader.getAllArtists(getActivity()),
R.layout.item_grid,
getItemLayout(),
loadUsePalette(),
getMainActivity());
}
@ -39,4 +41,25 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment<Arti
public void onMediaStoreChanged() {
getAdapter().swapDataSet(ArtistLoader.getAllArtists(getActivity()));
}
@Override
protected int loadLayoutMode() {
return PreferenceUtil.getInstance(getActivity()).getArtistLayoutMode();
}
@Override
protected void saveLayoutMode(int layoutMode) {
PreferenceUtil.getInstance(getActivity()).setArtistLayoutMode(layoutMode);
}
@Override
public void setUsePaletteAndSaveValue(boolean usePalette) {
getAdapter().usePalette(usePalette);
PreferenceUtil.getInstance(getActivity()).setArtistColoredFooters(usePalette);
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).artistColoredFooters();
}
}

View file

@ -6,24 +6,30 @@ import android.support.v7.widget.GridLayoutManager;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.SongAdapter;
import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SongViewFragment extends AbsMainActivityRecyclerViewFragment<SongAdapter, GridLayoutManager> {
public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment<SongAdapter, GridLayoutManager> {
public static final String TAG = SongViewFragment.class.getSimpleName();
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
return new GridLayoutManager(getActivity(), 1);
return new GridLayoutManager(getActivity(), getColumnNumber());
}
@NonNull
@Override
protected SongAdapter createAdapter() {
return new SongAdapter(getMainActivity(), SongLoader.getAllSongs(getActivity()), R.layout.item_list, getMainActivity());
return new SongAdapter(
getMainActivity(),
SongLoader.getAllSongs(getActivity()),
getItemLayout(),
loadUsePalette(),
getMainActivity());
}
@Override
@ -35,4 +41,25 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment<SongAd
public void onMediaStoreChanged() {
getAdapter().swapDataSet(SongLoader.getAllSongs(getActivity()));
}
@Override
protected int loadLayoutMode() {
return PreferenceUtil.getInstance(getActivity()).getSongLayoutMode();
}
@Override
protected void saveLayoutMode(int layoutMode) {
PreferenceUtil.getInstance(getActivity()).setSongLayoutMode(layoutMode);
}
@Override
public void setUsePaletteAndSaveValue(boolean usePalette) {
getAdapter().usePalette(usePalette);
PreferenceUtil.getInstance(getActivity()).setSongColoredFooters(usePalette);
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).songColoredFooters();
}
}