Added multi select everywhere else and auto updates every activity after the music database changed. Fix issue #4
This commit is contained in:
parent
f033819620
commit
3067d6d637
15 changed files with 380 additions and 76 deletions
|
|
@ -39,9 +39,21 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
||||||
private static final int TYPE_LAST = 3;
|
private static final int TYPE_LAST = 3;
|
||||||
|
|
||||||
private final AppCompatActivity activity;
|
private final AppCompatActivity activity;
|
||||||
private final List<Album> dataSet;
|
private ArrayList<Album> dataSet;
|
||||||
private final int listMargin;
|
private final int listMargin;
|
||||||
|
|
||||||
|
public ArtistAlbumAdapter(AppCompatActivity activity, ArrayList<Album> objects, @Nullable CabHolder cabHolder) {
|
||||||
|
super(cabHolder, R.menu.menu_media_selection);
|
||||||
|
this.activity = activity;
|
||||||
|
dataSet = objects;
|
||||||
|
listMargin = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateDataSet(ArrayList<Album> objects) {
|
||||||
|
dataSet = objects;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_artist_album, parent, false);
|
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_artist_album, parent, false);
|
||||||
|
|
@ -152,11 +164,4 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArtistAlbumAdapter(AppCompatActivity activity, List<Album> objects, @Nullable CabHolder cabHolder) {
|
|
||||||
super(cabHolder, R.menu.menu_media_selection);
|
|
||||||
this.activity = activity;
|
|
||||||
dataSet = objects;
|
|
||||||
listMargin = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
||||||
|
|
@ -19,10 +20,12 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.squareup.otto.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -139,4 +142,27 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
|
||||||
|
super.onDetachedFromRecyclerView(recyclerView);
|
||||||
|
App.bus.unregister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
|
||||||
|
super.onAttachedToRecyclerView(recyclerView);
|
||||||
|
App.bus.register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case DataBaseChangedEvent.PLAYLISTS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
loadDataSet();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import android.widget.ImageView;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
|
|
@ -20,11 +21,13 @@ import com.kabouzeid.gramophone.loader.ArtistLoader;
|
||||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
import com.squareup.otto.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -41,12 +44,14 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
||||||
|
|
||||||
private AppCompatActivity activity;
|
private AppCompatActivity activity;
|
||||||
private List results = Collections.emptyList();
|
private List results = Collections.emptyList();
|
||||||
|
private String query;
|
||||||
|
|
||||||
public SearchAdapter(AppCompatActivity activity) {
|
public SearchAdapter(AppCompatActivity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void search(String query) {
|
public void search(String query) {
|
||||||
|
this.query = query;
|
||||||
results = new ArrayList();
|
results = new ArrayList();
|
||||||
if (!query.trim().equals("")) {
|
if (!query.trim().equals("")) {
|
||||||
List songs = SongLoader.getSongs(activity, query);
|
List songs = SongLoader.getSongs(activity, query);
|
||||||
|
|
@ -224,4 +229,26 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
|
||||||
|
super.onDetachedFromRecyclerView(recyclerView);
|
||||||
|
App.bus.unregister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
|
||||||
|
super.onAttachedToRecyclerView(recyclerView);
|
||||||
|
App.bus.register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case DataBaseChangedEvent.ALBUMS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
search(query);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
||||||
|
|
||||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||||
protected final AppCompatActivity activity;
|
protected final AppCompatActivity activity;
|
||||||
protected final ArrayList<Song> dataSet;
|
protected ArrayList<Song> dataSet;
|
||||||
|
|
||||||
public AlbumSongAdapter(AppCompatActivity activity, ArrayList<Song> objects, @Nullable CabHolder cabHolder) {
|
public AlbumSongAdapter(AppCompatActivity activity, ArrayList<Song> objects, @Nullable CabHolder cabHolder) {
|
||||||
super(cabHolder, R.menu.menu_media_selection);
|
super(cabHolder, R.menu.menu_media_selection);
|
||||||
|
|
@ -38,6 +38,11 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
||||||
dataSet = objects;
|
dataSet = objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateDataSet(ArrayList<Song> objects){
|
||||||
|
dataSet = objects;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_album_song, parent, false);
|
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_album_song, parent, false);
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialcab.MaterialCab;
|
import com.afollestad.materialcab.MaterialCab;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
|
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||||
|
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
|
|
@ -47,6 +49,11 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
||||||
dataSet = songs;
|
dataSet = songs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateDataSet(ArrayList<Song> objects) {
|
||||||
|
dataSet = objects;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View getView(final int position, View convertView, ViewGroup parent) {
|
public View getView(final int position, View convertView, ViewGroup parent) {
|
||||||
final Song song = getItem(position);
|
final Song song = getItem(position);
|
||||||
|
|
@ -119,8 +126,18 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMultipleItemAction(MenuItem menuItem, ArrayList<Song> songs) {
|
private void onMultipleItemAction(MenuItem menuItem, ArrayList<Song> selection) {
|
||||||
|
switch (menuItem.getItemId()) {
|
||||||
|
case R.id.action_delete_from_disk:
|
||||||
|
DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS");
|
||||||
|
break;
|
||||||
|
case R.id.action_add_to_playlist:
|
||||||
|
AddToPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||||
|
break;
|
||||||
|
case R.id.action_add_to_current_playing:
|
||||||
|
MusicPlayerRemote.enqueue(selection);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void toggleChecked(Song song) {
|
protected void toggleChecked(Song song) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.kabouzeid.gramophone.adapter.songadapter;
|
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||||
|
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.util.Pair;
|
import android.support.v4.util.Pair;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
|
@ -12,14 +13,17 @@ import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
|
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||||
|
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||||
|
import com.kabouzeid.gramophone.dialogs.DeleteFromPlaylistDialog;
|
||||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
|
|
@ -29,17 +33,23 @@ import java.util.List;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapter.ViewHolder> {
|
public class PlaylistSongAdapter extends AbsMultiSelectAdapter<PlaylistSongAdapter.ViewHolder, PlaylistSong> {
|
||||||
|
|
||||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||||
protected final AppCompatActivity activity;
|
protected final AppCompatActivity activity;
|
||||||
protected final ArrayList<PlaylistSong> dataSet;
|
protected ArrayList<PlaylistSong> dataSet;
|
||||||
|
|
||||||
public PlaylistSongAdapter(AppCompatActivity activity, ArrayList<PlaylistSong> objects) {
|
public PlaylistSongAdapter(AppCompatActivity activity, ArrayList<PlaylistSong> objects, @Nullable CabHolder cabHolder) {
|
||||||
|
super(cabHolder, R.menu.menu_playlists_songs_selection);
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
dataSet = objects;
|
dataSet = objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateDataSet(ArrayList<PlaylistSong> objects) {
|
||||||
|
dataSet = objects;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||||
|
|
@ -48,8 +58,9 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
final Song song = dataSet.get(position);
|
final PlaylistSong song = dataSet.get(position);
|
||||||
|
|
||||||
|
holder.view.setActivated(isChecked(song));
|
||||||
holder.songTitle.setText(song.title);
|
holder.songTitle.setText(song.title);
|
||||||
holder.songInfo.setText(song.artistName);
|
holder.songInfo.setText(song.artistName);
|
||||||
ImageLoader.getInstance().displayImage(
|
ImageLoader.getInstance().displayImage(
|
||||||
|
|
@ -68,28 +79,45 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
||||||
return dataSet.size();
|
return dataSet.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
@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:
|
||||||
|
DeleteFromPlaylistDialog.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 songTitle;
|
||||||
final TextView songInfo;
|
final TextView songInfo;
|
||||||
final ImageView overflowButton;
|
final ImageView overflowButton;
|
||||||
final ImageView albumArt;
|
final ImageView albumArt;
|
||||||
|
final View view;
|
||||||
|
|
||||||
public ViewHolder(View itemView) {
|
public ViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
view = itemView;
|
||||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||||
|
view.setOnClickListener(this);
|
||||||
|
view.setOnLongClickListener(this);
|
||||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||||
overflowButton.setOnClickListener(this);
|
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||||
itemView.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
//noinspection unchecked
|
|
||||||
MusicPlayerRemote.openQueue((ArrayList<Song>) (List) dataSet, getAdapterPosition(), true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||||
|
|
@ -99,9 +127,7 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_delete_from_playlist:
|
case R.id.action_delete_from_playlist:
|
||||||
int position = getAdapterPosition();
|
DeleteFromPlaylistDialog.create(dataSet.get(getAdapterPosition())).show(activity.getSupportFragmentManager(), "DELETE_FROM_PLAYLIST");
|
||||||
PlaylistsUtil.removeFromPlaylist(activity, dataSet.remove(position));
|
|
||||||
notifyItemRemoved(position);
|
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_album:
|
case R.id.action_go_to_album:
|
||||||
Pair[] albumPairs = new Pair[]{
|
Pair[] albumPairs = new Pair[]{
|
||||||
|
|
@ -117,5 +143,23 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
||||||
});
|
});
|
||||||
popupMenu.show();
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
package com.kabouzeid.gramophone.dialogs;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.text.Html;
|
||||||
|
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
|
import com.kabouzeid.gramophone.R;
|
||||||
|
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
*/
|
||||||
|
public class DeleteFromPlaylistDialog extends DialogFragment {
|
||||||
|
|
||||||
|
public static DeleteFromPlaylistDialog create(PlaylistSong song) {
|
||||||
|
ArrayList<PlaylistSong> list = new ArrayList<>();
|
||||||
|
list.add(song);
|
||||||
|
return create(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DeleteFromPlaylistDialog create(ArrayList<PlaylistSong> songs) {
|
||||||
|
DeleteFromPlaylistDialog dialog = new DeleteFromPlaylistDialog();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putSerializable("songs", songs);
|
||||||
|
dialog.setArguments(args);
|
||||||
|
return dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
//noinspection unchecked
|
||||||
|
final ArrayList<PlaylistSong> songs = (ArrayList<PlaylistSong>) getArguments().getSerializable("songs");
|
||||||
|
int title;
|
||||||
|
CharSequence content;
|
||||||
|
if (songs.size() > 1) {
|
||||||
|
title = R.string.delete_songs_from_playlist_title;
|
||||||
|
content = Html.fromHtml(getString(R.string.delete_x_songs_from_playlist, songs.size()));
|
||||||
|
} else {
|
||||||
|
title = R.string.delete_song_from_playlist_title;
|
||||||
|
content = Html.fromHtml(getString(R.string.delete_song_x_from_playlist, songs.get(0).title));
|
||||||
|
}
|
||||||
|
return new MaterialDialog.Builder(getActivity())
|
||||||
|
.title(title)
|
||||||
|
.content(content)
|
||||||
|
.positiveText(R.string.delete_action)
|
||||||
|
.negativeText(android.R.string.cancel)
|
||||||
|
.callback(new MaterialDialog.ButtonCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPositive(MaterialDialog dialog) {
|
||||||
|
super.onPositive(dialog);
|
||||||
|
if (getActivity() == null)
|
||||||
|
return;
|
||||||
|
PlaylistsUtil.removeFromPlaylist(getActivity(), songs);
|
||||||
|
}
|
||||||
|
}).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,16 +9,15 @@ import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ArtistAlbumLoader {
|
public class ArtistAlbumLoader {
|
||||||
|
|
||||||
public static List<Album> getArtistAlbumList(final Context context, final int artistId) {
|
public static ArrayList<Album> getArtistAlbumList(final Context context, final int artistId) {
|
||||||
Cursor cursor = makeArtistAlbumCursor(context, artistId);
|
Cursor cursor = makeArtistAlbumCursor(context, artistId);
|
||||||
List<Album> albums = new ArrayList<>();
|
ArrayList<Album> albums = new ArrayList<>();
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
final int id = cursor.getInt(0);
|
final int id = cursor.getInt(0);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
|
|
@ -60,6 +61,8 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
private Album album;
|
private Album album;
|
||||||
|
|
||||||
private ObservableRecyclerView recyclerView;
|
private ObservableRecyclerView recyclerView;
|
||||||
|
private AlbumSongAdapter adapter;
|
||||||
|
private ArrayList<Song> songs;
|
||||||
private View statusBar;
|
private View statusBar;
|
||||||
private ImageView albumArtImageView;
|
private ImageView albumArtImageView;
|
||||||
private View songsBackgroundView;
|
private View songsBackgroundView;
|
||||||
|
|
@ -281,10 +284,10 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpSongsAdapter() {
|
private void setUpSongsAdapter() {
|
||||||
final ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id);
|
songs = AlbumSongLoader.getAlbumSongList(this, album.id);
|
||||||
final AlbumSongAdapter albumSongAdapter = new AlbumSongAdapter(this, songs, this);
|
adapter = new AlbumSongAdapter(this, songs, this);
|
||||||
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
||||||
recyclerView.setAdapter(albumSongAdapter);
|
recyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -348,6 +351,19 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case DataBaseChangedEvent.SONGS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.ALBUMS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
songs = AlbumSongLoader.getAlbumSongList(this, album.id);
|
||||||
|
adapter.updateDataSet(songs);
|
||||||
|
if (songs.size() < 1) finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
|
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ import com.kabouzeid.gramophone.misc.AppKeys;
|
||||||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
|
|
@ -56,7 +57,6 @@ import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListene
|
||||||
import com.squareup.otto.Subscribe;
|
import com.squareup.otto.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A lot of hackery is done in this activity. Changing things may will brake the whole activity.
|
* A lot of hackery is done in this activity. Changing things may will brake the whole activity.
|
||||||
|
|
@ -86,6 +86,9 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
private RecyclerView albumRecyclerView;
|
private RecyclerView albumRecyclerView;
|
||||||
private Spanned biography;
|
private Spanned biography;
|
||||||
private ArtistAlbumAdapter albumAdapter;
|
private ArtistAlbumAdapter albumAdapter;
|
||||||
|
private ArtistSongAdapter songAdapter;
|
||||||
|
private ArrayList<Song> songs;
|
||||||
|
private ArrayList<Album> albums;
|
||||||
|
|
||||||
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -211,8 +214,8 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset);
|
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset);
|
||||||
songListView.addHeaderView(songListHeader);
|
songListView.addHeaderView(songListHeader);
|
||||||
|
|
||||||
final ArrayList<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
|
songs = ArtistSongLoader.getArtistSongList(this, artist.id);
|
||||||
ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs, this);
|
songAdapter = new ArtistSongAdapter(this, songs, this);
|
||||||
songListView.setAdapter(songAdapter);
|
songListView.setAdapter(songAdapter);
|
||||||
|
|
||||||
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
|
|
@ -227,7 +230,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
|
|
||||||
private void setUpAlbumRecyclerView() {
|
private void setUpAlbumRecyclerView() {
|
||||||
albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
||||||
List<Album> albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
|
albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
|
||||||
albumAdapter = new ArtistAlbumAdapter(this, albums, this);
|
albumAdapter = new ArtistAlbumAdapter(this, albums, this);
|
||||||
albumRecyclerView.setAdapter(albumAdapter);
|
albumRecyclerView.setAdapter(albumAdapter);
|
||||||
}
|
}
|
||||||
|
|
@ -431,6 +434,22 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case DataBaseChangedEvent.SONGS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.ALBUMS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.ARTISTS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
songs = ArtistSongLoader.getArtistSongList(this, artist.id);
|
||||||
|
songAdapter.updateDataSet(songs);
|
||||||
|
albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
|
||||||
|
albumAdapter.updateDataSet(albums);
|
||||||
|
if (songs.size() < 1) finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
|
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,16 @@ import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import com.afollestad.materialcab.MaterialCab;
|
||||||
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
|
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
|
||||||
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||||
import com.kabouzeid.gramophone.misc.DragSortRecycler;
|
import com.kabouzeid.gramophone.misc.DragSortRecycler;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||||
|
|
@ -23,13 +27,17 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
import com.squareup.otto.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class PlaylistDetailActivity extends AbsFabActivity {
|
public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder {
|
||||||
|
|
||||||
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
||||||
private Playlist playlist;
|
private Playlist playlist;
|
||||||
|
private MaterialCab cab;
|
||||||
|
private PlaylistSongAdapter adapter;
|
||||||
|
private ArrayList<PlaylistSong> songs;
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -41,8 +49,8 @@ public class PlaylistDetailActivity extends AbsFabActivity {
|
||||||
getIntentExtras();
|
getIntentExtras();
|
||||||
|
|
||||||
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
||||||
final ArrayList<PlaylistSong> songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
|
songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
|
||||||
final PlaylistSongAdapter adapter = new PlaylistSongAdapter(this, songs);
|
adapter = new PlaylistSongAdapter(this, songs, this);
|
||||||
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
|
|
@ -72,6 +80,8 @@ public class PlaylistDetailActivity extends AbsFabActivity {
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setTitle(playlist.name);
|
getSupportActionBar().setTitle(playlist.name);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
App.bus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -123,4 +133,34 @@ public class PlaylistDetailActivity extends AbsFabActivity {
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
||||||
|
if (cab != null && cab.isActive()) cab.finish();
|
||||||
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
|
.setMenu(menu)
|
||||||
|
.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary())
|
||||||
|
.start(callback);
|
||||||
|
return cab;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
App.bus.unregister(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case DataBaseChangedEvent.PLAYLISTS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
|
||||||
|
adapter.updateDataSet(songs);
|
||||||
|
findViewById(android.R.id.empty).setVisibility(
|
||||||
|
songs.size() == 0 ? View.VISIBLE : View.GONE
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -146,20 +146,20 @@ public class PlaylistsUtil {
|
||||||
App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED));
|
App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void removeFromPlaylist(final Context context, final List<PlaylistSong> songs) {
|
public static void removeFromPlaylist(final Context context, final List<PlaylistSong> songs) {
|
||||||
// Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
|
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
|
||||||
// "external", songs.get(0).playlistId);
|
"external", songs.get(0).playlistId);
|
||||||
// String selectionArgs[] = new String[songs.size()];
|
String selectionArgs[] = new String[songs.size()];
|
||||||
// for (int i = 0; i < selectionArgs.length; i++) {
|
for (int i = 0; i < selectionArgs.length; i++) {
|
||||||
// selectionArgs[i] = String.valueOf(songs.get(i).idInPlayList);
|
selectionArgs[i] = String.valueOf(songs.get(i).idInPlayList);
|
||||||
// }
|
}
|
||||||
// String selection = MediaStore.Audio.Playlists.Members._ID + " in (";
|
String selection = MediaStore.Audio.Playlists.Members._ID + " in (";
|
||||||
// for (String selectionArg : selectionArgs) selection += "?, ";
|
for (String selectionArg : selectionArgs) selection += "?, ";
|
||||||
// selection = selection.substring(0, selection.length() - 2) + ")";
|
selection = selection.substring(0, selection.length() - 2) + ")";
|
||||||
//
|
|
||||||
// context.getContentResolver().delete(uri, selection, selectionArgs);
|
context.getContentResolver().delete(uri, selection, selectionArgs);
|
||||||
// App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED));
|
App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED));
|
||||||
// }
|
}
|
||||||
//
|
//
|
||||||
// public static int getSongCountForPlaylist(final Context context, final long playlistId) {
|
// public static int getSongCountForPlaylist(final Context context, final long playlistId) {
|
||||||
// Cursor c = context.getContentResolver().query(
|
// Cursor c = context.getContentResolver().query(
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,21 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingTop="@dimen/main_toolbar_padding_top">
|
android:paddingTop="@dimen/main_toolbar_padding_top">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
<android.support.v7.widget.Toolbar
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
style="@style/Toolbar"
|
style="@style/Toolbar"
|
||||||
android:background="?colorPrimary" />
|
android:background="@android:color/transparent" />
|
||||||
|
|
||||||
|
<ViewStub
|
||||||
|
android:id="@+id/cab_stub"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view"
|
android:id="@+id/recycler_view"
|
||||||
|
|
|
||||||
23
app/src/main/res/menu/menu_playlists_songs_selection.xml
Normal file
23
app/src/main/res/menu/menu_playlists_songs_selection.xml
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_add_to_playlist"
|
||||||
|
android:icon="@drawable/ic_playlist_add_white_24dp"
|
||||||
|
android:title="@string/action_add_to_playlist"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_add_to_current_playing"
|
||||||
|
android:icon="@drawable/ic_queue_white_24dp"
|
||||||
|
android:title="@string/action_add_to_playing_queue"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_delete_from_playlist"
|
||||||
|
android:icon="@drawable/ic_delete_white_24dp"
|
||||||
|
android:title="@string/action_delete_from_playlist"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
|
</menu>
|
||||||
|
|
@ -77,8 +77,16 @@
|
||||||
<string name="delete_x_songs"><![CDATA[
|
<string name="delete_x_songs"><![CDATA[
|
||||||
Do you want to delete <b>%1$d</b> songs?
|
Do you want to delete <b>%1$d</b> songs?
|
||||||
]]></string>
|
]]></string>
|
||||||
|
<string name="delete_song_x_from_playlist"><![CDATA[
|
||||||
|
Do you want to delete the song <b>%1$s</b> from the playlist?
|
||||||
|
]]></string>
|
||||||
|
<string name="delete_x_songs_from_playlist"><![CDATA[
|
||||||
|
Do you want to delete <b>%1$d</b> songs from the playlist?
|
||||||
|
]]></string>
|
||||||
<string name="delete_song_title">Delete Song</string>
|
<string name="delete_song_title">Delete Song</string>
|
||||||
<string name="delete_songs_title">Delete Songs</string>
|
<string name="delete_songs_title">Delete Songs</string>
|
||||||
|
<string name="delete_song_from_playlist_title">Delete Song from Playlist</string>
|
||||||
|
<string name="delete_songs_from_playlist_title">Delete Songs from Playlist</string>
|
||||||
<string name="rename_playlist_title">Rename Playlist</string>
|
<string name="rename_playlist_title">Rename Playlist</string>
|
||||||
<string name="delete_playlist_title">Delete Playlist</string>
|
<string name="delete_playlist_title">Delete Playlist</string>
|
||||||
<string name="delete_playlists_title">Delete Playlists</string>
|
<string name="delete_playlists_title">Delete Playlists</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue