Last added playlist half working. More to come tomorrow.
This commit is contained in:
parent
cf921dc02f
commit
65c879d64e
47 changed files with 1000 additions and 317 deletions
|
|
@ -29,6 +29,10 @@ public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder,
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
protected void setMultiSelectMenuRes(int menuRes) {
|
||||
this.menuRes = menuRes;
|
||||
}
|
||||
|
||||
protected void toggleChecked(final int position) {
|
||||
if (cabHolder != null) {
|
||||
openCabIfNecessary();
|
||||
|
|
@ -52,7 +56,7 @@ public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder,
|
|||
}
|
||||
}
|
||||
|
||||
private void uncheckAll() {
|
||||
private void unCheckAll() {
|
||||
checked.clear();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
|
@ -74,13 +78,13 @@ public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder,
|
|||
public boolean onCabItemClicked(MenuItem menuItem) {
|
||||
onMultipleItemAction(menuItem, new ArrayList<>(checked));
|
||||
cab.finish();
|
||||
uncheckAll();
|
||||
unCheckAll();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCabFinished(MaterialCab materialCab) {
|
||||
uncheckAll();
|
||||
unCheckAll();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import android.view.LayoutInflater;
|
|||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
|
@ -21,7 +22,9 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
|
|||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.LastAddedPlaylist;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.SmartPlaylist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
|
@ -30,12 +33,19 @@ import com.squareup.otto.Subscribe;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
|
||||
|
||||
public static final String TAG = PlaylistAdapter.class.getSimpleName();
|
||||
|
||||
private int VIEW_TYPE_SMART = 0;
|
||||
private int VIEW_TYPE_DEFAULT = 1;
|
||||
|
||||
protected final AppCompatActivity activity;
|
||||
protected List<Playlist> dataSet;
|
||||
|
||||
|
|
@ -46,12 +56,15 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
}
|
||||
|
||||
public void loadDataSet() {
|
||||
dataSet = PlaylistLoader.getAllPlaylists(activity);
|
||||
dataSet = new ArrayList<>();
|
||||
dataSet.add(new LastAddedPlaylist(activity));
|
||||
dataSet.addAll(PlaylistLoader.getAllPlaylists(activity));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_playlist, parent, false);
|
||||
int layoutRes = viewType == VIEW_TYPE_DEFAULT ? R.layout.item_list_playlist : R.layout.item_list_smart_playlist;
|
||||
View view = LayoutInflater.from(activity).inflate(layoutRes, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
|
|
@ -60,6 +73,19 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
final Playlist playlist = dataSet.get(position);
|
||||
holder.playlistName.setText(playlist.name);
|
||||
holder.view.setActivated(isChecked(playlist));
|
||||
holder.icon.setImageResource(getIconRes(playlist));
|
||||
}
|
||||
|
||||
private int getIconRes(Playlist playlist) {
|
||||
if (playlist instanceof SmartPlaylist) {
|
||||
return ((SmartPlaylist) playlist).iconRes;
|
||||
}
|
||||
return R.drawable.ic_queue_music_white_24dp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return dataSet.get(position) instanceof SmartPlaylist ? VIEW_TYPE_SMART : VIEW_TYPE_DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -90,28 +116,35 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
private ArrayList<Song> getSongList(List<Playlist> playlists) {
|
||||
final ArrayList<Song> songs = new ArrayList<>();
|
||||
for (Playlist playlist : playlists) {
|
||||
songs.addAll(PlaylistSongLoader.getPlaylistSongList(activity, playlist.id));
|
||||
if (playlist instanceof SmartPlaylist) {
|
||||
songs.addAll(((SmartPlaylist) playlist).getSongs(activity));
|
||||
} else {
|
||||
songs.addAll(PlaylistSongLoader.getPlaylistSongList(activity, playlist.id));
|
||||
}
|
||||
}
|
||||
return songs;
|
||||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
public final TextView playlistName;
|
||||
private final View menu;
|
||||
private final View view;
|
||||
@InjectView(R.id.playlist_name)
|
||||
TextView playlistName;
|
||||
@InjectView(R.id.menu)
|
||||
View menu;
|
||||
@InjectView(R.id.playlist_icon)
|
||||
ImageView icon;
|
||||
View view;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.inject(this, itemView);
|
||||
view = itemView;
|
||||
playlistName = (TextView) itemView.findViewById(R.id.playlist_name);
|
||||
menu = itemView.findViewById(R.id.menu);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
menu.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, view);
|
||||
popupMenu.inflate(R.menu.menu_item_playlist);
|
||||
popupMenu.inflate(getItemViewType() == VIEW_TYPE_SMART ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
|
|
@ -132,7 +165,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
Pair[] sharedViews = null;
|
||||
if (activity instanceof AbsFabActivity)
|
||||
sharedViews = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
||||
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
|
||||
Playlist playlist = dataSet.get(getAdapterPosition());
|
||||
NavigationUtil.goToPlaylist(activity, playlist, sharedViews);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,156 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public abstract class AbsPlaylistSongAdapter<S extends Song> extends AbsMultiSelectAdapter<PlaylistSongViewHolder, S> implements PlaylistSongViewHolder.onViewHolderClickListener, PlaylistSongViewHolder.onViewHolderLongClickListener, PlaylistSongViewHolder.onViewHolderMenuItemClickListener {
|
||||
|
||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||
protected final AppCompatActivity activity;
|
||||
protected ArrayList<S> dataSet;
|
||||
|
||||
public AbsPlaylistSongAdapter(AppCompatActivity activity, ArrayList<S> objects, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_playlists_songs_selection);
|
||||
setMultiSelectMenuRes(getMultiSelectMenuRes());
|
||||
this.activity = activity;
|
||||
dataSet = objects;
|
||||
}
|
||||
|
||||
public void updateDataSet(ArrayList<S> objects) {
|
||||
dataSet = objects;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected int getMultiSelectMenuRes() {
|
||||
return R.menu.menu_playlists_songs_selection;
|
||||
}
|
||||
|
||||
protected int getSongMenuRes() {
|
||||
return R.menu.menu_item_playlist_song;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlaylistSongViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||
return new PlaylistSongViewHolder(this, view, getSongMenuRes());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final PlaylistSongViewHolder holder, int position) {
|
||||
final S song = dataSet.get(position);
|
||||
|
||||
holder.view.setActivated(isChecked(song));
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getAlbumArtUri(song.albumId).toString(),
|
||||
holder.albumArt,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
.resetViewBeforeLoading(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return dataSet.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected S getIdentifier(int position) {
|
||||
return dataSet.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMultipleItemAction(MenuItem menuItem, ArrayList<S> selection) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
onDeleteFromPlaylist(selection);
|
||||
break;
|
||||
case R.id.action_add_to_playlist:
|
||||
onAddToPlaylist(selection);
|
||||
break;
|
||||
case R.id.action_add_to_current_playing:
|
||||
onAddToCurrentPlaying(selection);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v, int adapterPosition) {
|
||||
if (isInQuickSelectMode()) {
|
||||
toggleChecked(adapterPosition);
|
||||
} else {
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.openQueue((ArrayList<Song>) (List) dataSet, adapterPosition, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View v, int adapterPosition) {
|
||||
toggleChecked(adapterPosition);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item, PlaylistSongViewHolder viewHolder, int adapterPosition) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
onDeleteFromPlaylist(dataSet.get(adapterPosition));
|
||||
return true;
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(viewHolder.albumArt, activity.getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(adapterPosition).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(adapterPosition), item);
|
||||
}
|
||||
|
||||
protected void onDeleteFromPlaylist(S song) {
|
||||
|
||||
}
|
||||
|
||||
protected void onDeleteFromPlaylist(ArrayList<S> songs) {
|
||||
|
||||
}
|
||||
|
||||
protected void onAddToPlaylist(ArrayList<S> songs) {
|
||||
//noinspection unchecked
|
||||
AddToPlaylistDialog.create((ArrayList<Song>) (List) songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
}
|
||||
|
||||
protected void onAddToCurrentPlaying(ArrayList<S> songs) {
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.enqueue((ArrayList<Song>) (List) songs);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,165 +1,32 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.RemoveFromPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistSongAdapter extends AbsMultiSelectAdapter<PlaylistSongAdapter.ViewHolder, PlaylistSong> {
|
||||
|
||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||
protected final AppCompatActivity activity;
|
||||
protected ArrayList<PlaylistSong> dataSet;
|
||||
public class PlaylistSongAdapter extends AbsPlaylistSongAdapter<PlaylistSong> {
|
||||
|
||||
public PlaylistSongAdapter(AppCompatActivity activity, ArrayList<PlaylistSong> objects, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_playlists_songs_selection);
|
||||
this.activity = activity;
|
||||
dataSet = objects;
|
||||
}
|
||||
|
||||
public void updateDataSet(ArrayList<PlaylistSong> objects) {
|
||||
dataSet = objects;
|
||||
notifyDataSetChanged();
|
||||
super(activity, objects, cabHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||
return new ViewHolder(view);
|
||||
protected void onDeleteFromPlaylist(ArrayList<PlaylistSong> songs) {
|
||||
super.onDeleteFromPlaylist(songs);
|
||||
RemoveFromPlaylistDialog.create(songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final PlaylistSong song = dataSet.get(position);
|
||||
|
||||
holder.view.setActivated(isChecked(song));
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getAlbumArtUri(song.albumId).toString(),
|
||||
holder.albumArt,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
.resetViewBeforeLoading(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return dataSet.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PlaylistSong getIdentifier(int position) {
|
||||
return dataSet.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMultipleItemAction(MenuItem menuItem, ArrayList<PlaylistSong> selection) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_FROM_PLAYLIST");
|
||||
break;
|
||||
case R.id.action_add_to_playlist:
|
||||
//noinspection unchecked
|
||||
AddToPlaylistDialog.create((ArrayList<Song>) (List) selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
break;
|
||||
case R.id.action_add_to_current_playing:
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.enqueue((ArrayList<Song>) (List) selection);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
final TextView songTitle;
|
||||
final TextView songInfo;
|
||||
final ImageView overflowButton;
|
||||
final ImageView albumArt;
|
||||
final View view;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(R.menu.menu_item_playlist_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
RemoveFromPlaylistDialog.create(dataSet.get(getAdapterPosition())).show(activity.getSupportFragmentManager(), "DELETE_FROM_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isInQuickSelectMode()) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.openQueue((ArrayList<Song>) (List) dataSet, getAdapterPosition(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
return true;
|
||||
}
|
||||
protected void onDeleteFromPlaylist(PlaylistSong song) {
|
||||
super.onDeleteFromPlaylist(song);
|
||||
RemoveFromPlaylistDialog.create(song).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistSongViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
final TextView songTitle;
|
||||
final TextView songInfo;
|
||||
final ImageView overflowButton;
|
||||
final ImageView albumArt;
|
||||
final View view;
|
||||
|
||||
final AbsPlaylistSongAdapter adapter;
|
||||
|
||||
public PlaylistSongViewHolder(final AbsPlaylistSongAdapter adapter, View itemView, final int songMenu) {
|
||||
super(itemView);
|
||||
this.adapter = adapter;
|
||||
view = itemView;
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(adapter.activity, v);
|
||||
popupMenu.inflate(songMenu);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
return adapter.onMenuItemClick(item, PlaylistSongViewHolder.this, getAdapterPosition());
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
adapter.onClick(v, getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
return adapter.onLongClick(v, getAdapterPosition());
|
||||
}
|
||||
|
||||
protected interface onViewHolderMenuItemClickListener {
|
||||
boolean onMenuItemClick(MenuItem item, PlaylistSongViewHolder viewHolder, int adapterPosition);
|
||||
}
|
||||
|
||||
protected interface onViewHolderClickListener {
|
||||
void onClick(View v, int adapterPosition);
|
||||
}
|
||||
|
||||
protected interface onViewHolderLongClickListener {
|
||||
boolean onLongClick(View v, int adapterPosition);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter.smartplaylist;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.LastAddedPlaylist;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class LastAddedSongAdapter extends SmartPlaylistSongAdapter {
|
||||
|
||||
public LastAddedSongAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, new LastAddedPlaylist(activity), cabHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMultiSelectMenuRes() {
|
||||
return R.menu.menu_last_added_playlist_songs_selection;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSongMenuRes() {
|
||||
return R.menu.menu_item_last_added_playlist_song;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter.smartplaylist;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.SmartPlaylist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public abstract class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter<Song> {
|
||||
private SmartPlaylist playlist;
|
||||
|
||||
public SmartPlaylistSongAdapter(AppCompatActivity activity, SmartPlaylist playlist, @Nullable CabHolder cabHolder) {
|
||||
super(activity, playlist.getSongs(activity), cabHolder);
|
||||
this.playlist = playlist;
|
||||
}
|
||||
|
||||
public void updateDataSet() {
|
||||
updateDataSet(playlist.getSongs(activity));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue