Playlists multi select
This commit is contained in:
parent
ab678b43ca
commit
b4105b6cc0
13 changed files with 189 additions and 33 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -18,7 +19,7 @@ public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder,
|
|||
private ArrayList<I> checked;
|
||||
private int menuRes;
|
||||
|
||||
public AbsMultiSelectAdapter(CabHolder cabHolder, int menuRes) {
|
||||
public AbsMultiSelectAdapter(@Nullable CabHolder cabHolder, int menuRes) {
|
||||
this.cabHolder = cabHolder;
|
||||
checked = new ArrayList<>();
|
||||
this.menuRes = menuRes;
|
||||
|
|
@ -40,8 +41,10 @@ public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder,
|
|||
}
|
||||
|
||||
private void openCabIfNecessary() {
|
||||
if (cab == null || !cab.isActive()) {
|
||||
cab = cabHolder.openCab(menuRes, this);
|
||||
if (cabHolder != null) {
|
||||
if (cab == null || !cab.isActive()) {
|
||||
cab = cabHolder.openCab(menuRes, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.adapter;
|
|||
import android.annotation.TargetApi;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.graphics.Palette;
|
||||
|
|
@ -184,7 +185,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
}
|
||||
}
|
||||
|
||||
public AlbumAdapter(AppCompatActivity activity, CabHolder cabHolder) {
|
||||
public AlbumAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
usePalette = PreferenceUtils.getInstance(activity).coloredAlbumFootersEnabled();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -39,7 +40,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
protected final AppCompatActivity activity;
|
||||
protected List<Artist> dataSet;
|
||||
|
||||
public ArtistAdapter(AppCompatActivity activity, CabHolder cabHolder) {
|
||||
public ArtistAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
loadDataSet();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -11,24 +12,32 @@ import android.widget.PopupMenu;
|
|||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHolder> {
|
||||
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
|
||||
|
||||
public static final String TAG = PlaylistAdapter.class.getSimpleName();
|
||||
protected final AppCompatActivity activity;
|
||||
protected List<Playlist> dataSet;
|
||||
|
||||
public PlaylistAdapter(AppCompatActivity activity) {
|
||||
public PlaylistAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(cabHolder, R.menu.menu_playlists_selection);
|
||||
this.activity = activity;
|
||||
loadDataSet();
|
||||
}
|
||||
|
|
@ -45,7 +54,9 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
|||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||
holder.playlistName.setText(dataSet.get(position).name);
|
||||
final Playlist playlist = dataSet.get(position);
|
||||
holder.playlistName.setText(playlist.name);
|
||||
holder.view.setActivated(isChecked(playlist));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -53,15 +64,46 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
|||
return dataSet.size();
|
||||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
@Override
|
||||
protected Playlist getIdentifier(int position) {
|
||||
return dataSet.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMultipleItemAction(MenuItem menuItem, ArrayList<Playlist> selection) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.action_delete_playlist:
|
||||
DeletePlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST");
|
||||
break;
|
||||
case R.id.action_add_to_playlist:
|
||||
AddToPlaylistDialog.create(getSongList(selection)).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
break;
|
||||
case R.id.action_add_to_current_playing:
|
||||
MusicPlayerRemote.enqueue(getSongList(selection));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Song> getSongList(List<Playlist> playlists) {
|
||||
final ArrayList<Song> songs = new ArrayList<>();
|
||||
for (Playlist playlist : playlists) {
|
||||
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;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
playlistName = (TextView) itemView.findViewById(R.id.playlist_name);
|
||||
menu = itemView.findViewById(R.id.menu);
|
||||
itemView.setOnClickListener(this);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
menu.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
|
@ -81,10 +123,20 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
|||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Pair[] sharedViews = null;
|
||||
if (activity instanceof AbsFabActivity)
|
||||
sharedViews = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
||||
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
|
||||
if (isInQuickSelectMode()) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
Pair[] sharedViews = null;
|
||||
if (activity instanceof AbsFabActivity)
|
||||
sharedViews = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
||||
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue