Code rearrange and delete songs
This commit is contained in:
parent
f9cd2e8a2e
commit
00e3724ab4
15 changed files with 223 additions and 91 deletions
|
|
@ -12,13 +12,17 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
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.loader.AlbumLoader;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
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.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
|
import com.squareup.otto.Subscribe;
|
||||||
import com.squareup.picasso.Callback;
|
import com.squareup.picasso.Callback;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
|
|
@ -103,11 +107,15 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlbumAdapter(Activity activity, List<Album> objects) {
|
public AlbumAdapter(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
dataSet = objects;
|
//TODO shared prefs
|
||||||
|
|
||||||
usePalette = true;
|
usePalette = true;
|
||||||
|
loadDataSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadDataSet() {
|
||||||
|
dataSet = AlbumLoader.getAllAlbums(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyPalette(Bitmap bitmap, final TextView title, final TextView artist, final View footer) {
|
private void applyPalette(Bitmap bitmap, final TextView title, final TextView artist, final View footer) {
|
||||||
|
|
@ -139,4 +147,27 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
||||||
int defaultBarColor = activity.getResources().getColor(R.color.materialmusic_default_bar_color);
|
int defaultBarColor = activity.getResources().getColor(R.color.materialmusic_default_bar_color);
|
||||||
footer.setBackgroundColor(defaultBarColor);
|
footer.setBackgroundColor(defaultBarColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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:
|
||||||
|
loadDataSet();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,15 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
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.lastfm.artist.LastFMArtistThumbnailUrlLoader;
|
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader;
|
||||||
|
import com.kabouzeid.gramophone.loader.ArtistLoader;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
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 com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -25,9 +29,13 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
||||||
protected Activity activity;
|
protected Activity activity;
|
||||||
protected List<Artist> dataSet;
|
protected List<Artist> dataSet;
|
||||||
|
|
||||||
public ArtistAdapter(Activity activity, List<Artist> objects) {
|
public ArtistAdapter(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
dataSet = objects;
|
loadDataSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadDataSet() {
|
||||||
|
dataSet = ArtistLoader.getAllArtists(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -84,4 +92,27 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
||||||
NavigationUtil.goToArtist(activity, dataSet.get(getPosition()).id, artistPairs);
|
NavigationUtil.goToArtist(activity, dataSet.get(getPosition()).id, artistPairs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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.ARTISTS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
loadDataSet();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,16 @@ 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.DeletePlaylistDialogHelper;
|
import com.kabouzeid.gramophone.helper.DeletePlaylistDialogHelper;
|
||||||
import com.kabouzeid.gramophone.helper.RenamePlaylistDialogHelper;
|
import com.kabouzeid.gramophone.helper.RenamePlaylistDialogHelper;
|
||||||
|
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
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.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -28,9 +32,13 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
||||||
protected Activity activity;
|
protected Activity activity;
|
||||||
protected List<Playlist> dataSet;
|
protected List<Playlist> dataSet;
|
||||||
|
|
||||||
public PlaylistAdapter(Activity activity, List<Playlist> objects) {
|
public PlaylistAdapter(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
dataSet = objects;
|
loadDataSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadDataSet() {
|
||||||
|
dataSet = PlaylistLoader.getAllPlaylists(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -90,4 +98,27 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
||||||
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
|
NavigationUtil.goToPlaylist(activity, dataSet.get(getAdapterPosition()).id, sharedViews);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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,19 +11,23 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||||
|
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||||
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
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.ui.activities.tageditor.SongTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||||
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.squareup.otto.Subscribe;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
@ -37,9 +41,13 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
protected Activity activity;
|
protected Activity activity;
|
||||||
protected List<Song> dataSet;
|
protected List<Song> dataSet;
|
||||||
|
|
||||||
public SongAdapter(Activity activity, List<Song> objects) {
|
public SongAdapter(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
dataSet = objects;
|
loadDataSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadDataSet() {
|
||||||
|
dataSet = SongLoader.getAllSongs(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -96,24 +104,24 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_delete_from_disk:
|
case R.id.action_delete_from_disk:
|
||||||
Toast.makeText(activity, "This feature is not available yet", Toast.LENGTH_SHORT).show();
|
DeleteSongsDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition())).show();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_add_to_playlist:
|
case R.id.action_add_to_playlist:
|
||||||
AddToPlaylistDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition())).show();
|
AddToPlaylistDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition())).show();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_play_next:
|
case R.id.action_play_next:
|
||||||
MusicPlayerRemote.playNext(dataSet.get(getPosition()));
|
MusicPlayerRemote.playNext(dataSet.get(getAdapterPosition()));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_add_to_current_playing:
|
case R.id.action_add_to_current_playing:
|
||||||
MusicPlayerRemote.enqueue(dataSet.get(getPosition()));
|
MusicPlayerRemote.enqueue(dataSet.get(getAdapterPosition()));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_tag_editor:
|
case R.id.action_tag_editor:
|
||||||
Intent intent = new Intent(activity, SongTagEditorActivity.class);
|
Intent intent = new Intent(activity, SongTagEditorActivity.class);
|
||||||
intent.putExtra(AppKeys.E_ID, dataSet.get(getPosition()).id);
|
intent.putExtra(AppKeys.E_ID, dataSet.get(getAdapterPosition()).id);
|
||||||
activity.startActivity(intent);
|
activity.startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_details:
|
case R.id.action_details:
|
||||||
String songFilePath = SongFilePathLoader.getSongFilePath(activity, dataSet.get(getPosition()).id);
|
String songFilePath = SongFilePathLoader.getSongFilePath(activity, dataSet.get(getAdapterPosition()).id);
|
||||||
File songFile = new File(songFilePath);
|
File songFile = new File(songFilePath);
|
||||||
SongDetailDialogHelper.getDialog(activity, songFile).show();
|
SongDetailDialogHelper.getDialog(activity, songFile).show();
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -123,13 +131,13 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
};
|
};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsFabActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||||
NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_artist:
|
case R.id.action_go_to_artist:
|
||||||
Pair[] artistPairs = null;
|
Pair[] artistPairs = null;
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsFabActivity)
|
||||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
||||||
NavigationUtil.goToArtist(activity, dataSet.get(getPosition()).artistId, artistPairs);
|
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).artistId, artistPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -138,4 +146,27 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
popupMenu.show();
|
popupMenu.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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.SONGS_CHANGED:
|
||||||
|
case DataBaseChangedEvent.DATABASE_CHANGED:
|
||||||
|
loadDataSet();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.kabouzeid.gramophone.helper;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
|
import com.kabouzeid.gramophone.R;
|
||||||
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by karim on 23.03.15.
|
||||||
|
*/
|
||||||
|
public class DeleteSongsDialogHelper {
|
||||||
|
public static MaterialDialog getDialog(final Context context, final Song song) {
|
||||||
|
List<Song> tmpList = new ArrayList<>();
|
||||||
|
tmpList.add(song);
|
||||||
|
return getDialog(context, tmpList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MaterialDialog getDialog(final Context context, final List<Song> songs) {
|
||||||
|
String title = context.getResources().getString(R.string.delete_songs_1);
|
||||||
|
title = songs.size() > 1 ? title + songs.size() + context.getResources().getString(R.string.delete_songs_2) : title + songs.get(0).title + "?";
|
||||||
|
return new MaterialDialog.Builder(context)
|
||||||
|
.title(title)
|
||||||
|
.content(context.getResources().getString(R.string.delete_warning))
|
||||||
|
.positiveText(context.getResources().getString(R.string.ok))
|
||||||
|
.negativeText(context.getResources().getString(R.string.cancel))
|
||||||
|
.callback(new MaterialDialog.ButtonCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPositive(MaterialDialog dialog) {
|
||||||
|
super.onPositive(dialog);
|
||||||
|
dialog.dismiss();
|
||||||
|
MusicUtil.deleteTracks(context, songs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNegative(MaterialDialog dialog) {
|
||||||
|
super.onNegative(dialog);
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
}).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -477,20 +477,20 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSong(int position, Song song){
|
public void addSong(int position, Song song) {
|
||||||
playingQueue.add(position, song);
|
playingQueue.add(position, song);
|
||||||
originalPlayingQueue.add(position, song);
|
originalPlayingQueue.add(position, song);
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSong(Song song){
|
public void addSong(Song song) {
|
||||||
playingQueue.add(song);
|
playingQueue.add(song);
|
||||||
originalPlayingQueue.add(song);
|
originalPlayingQueue.add(song);
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeSong(int position){
|
public void removeSong(int position) {
|
||||||
if(getShuffleMode() == SHUFFLE_MODE_NONE){
|
if (getShuffleMode() == SHUFFLE_MODE_NONE) {
|
||||||
playingQueue.remove(position);
|
playingQueue.remove(position);
|
||||||
originalPlayingQueue.remove(position);
|
originalPlayingQueue.remove(position);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -499,12 +499,15 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeSong(Song song){
|
public void removeSong(Song song) {
|
||||||
while (playingQueue.contains(song)){
|
for (int i = 0; i < playingQueue.size(); i++) {
|
||||||
playingQueue.remove(song);
|
if (playingQueue.get(i).id == song.id) playingQueue.remove(i);
|
||||||
}
|
}
|
||||||
while (originalPlayingQueue.contains(song)){
|
for (int i = 0; i < originalPlayingQueue.size(); i++) {
|
||||||
originalPlayingQueue.remove(song);
|
if (originalPlayingQueue.get(i).id == song.id) originalPlayingQueue.remove(i);
|
||||||
|
}
|
||||||
|
if (song.id == currentSongId) {
|
||||||
|
playSong();
|
||||||
}
|
}
|
||||||
saveState();
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
@ -513,7 +516,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
final int currentPosition = getPosition();
|
final int currentPosition = getPosition();
|
||||||
Song songToMove = playingQueue.remove(from);
|
Song songToMove = playingQueue.remove(from);
|
||||||
playingQueue.add(to, songToMove);
|
playingQueue.add(to, songToMove);
|
||||||
if(getShuffleMode() == SHUFFLE_MODE_NONE) {
|
if (getShuffleMode() == SHUFFLE_MODE_NONE) {
|
||||||
Song tmpSong = originalPlayingQueue.remove(from);
|
Song tmpSong = originalPlayingQueue.remove(from);
|
||||||
originalPlayingQueue.add(to, tmpSong);
|
originalPlayingQueue.add(to, tmpSong);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,11 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
|
try {
|
||||||
|
App.bus.register(busEventListener);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
setUpFab();
|
setUpFab();
|
||||||
App.bus.register(busEventListener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpFab() {
|
private void setUpFab() {
|
||||||
|
|
@ -137,7 +140,10 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
App.bus.unregister(busEventListener);
|
try {
|
||||||
|
App.bus.unregister(busEventListener);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onMusicRemoteEvent(MusicRemoteEvent event) {
|
public void onMusicRemoteEvent(MusicRemoteEvent event) {
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,7 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.view.ViewConfiguration;
|
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.App;
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||||
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,6 @@ import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
|
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
|
||||||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by karim on 22.11.14.
|
* Created by karim on 22.11.14.
|
||||||
|
|
@ -35,12 +31,9 @@ public class AlbumViewFragment extends AbsMainActivityFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
List<Album> albums = AlbumLoader.getAllAlbums(getActivity());
|
|
||||||
AlbumAdapter albumAdapter = new AlbumAdapter(getActivity(), albums);
|
|
||||||
|
|
||||||
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
|
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
|
||||||
recyclerView.setAdapter(albumAdapter);
|
|
||||||
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
||||||
|
recyclerView.setAdapter(new AlbumAdapter(getActivity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@ import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.ArtistAdapter;
|
import com.kabouzeid.gramophone.adapter.ArtistAdapter;
|
||||||
import com.kabouzeid.gramophone.loader.ArtistLoader;
|
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ArtistViewFragment extends AbsMainActivityFragment {
|
public class ArtistViewFragment extends AbsMainActivityFragment {
|
||||||
public static final String TAG = ArtistViewFragment.class.getSimpleName();
|
public static final String TAG = ArtistViewFragment.class.getSimpleName();
|
||||||
|
|
@ -33,12 +29,9 @@ public class ArtistViewFragment extends AbsMainActivityFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
List<Artist> artists = ArtistLoader.getAllArtists(getActivity());
|
|
||||||
ArtistAdapter artistAdapter = new ArtistAdapter(getActivity(), artists);
|
|
||||||
|
|
||||||
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
|
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
|
||||||
recyclerView.setAdapter(artistAdapter);
|
|
||||||
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
||||||
|
recyclerView.setAdapter(new ArtistAdapter(getActivity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,8 @@ import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.App;
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.PlaylistAdapter;
|
import com.kabouzeid.gramophone.adapter.PlaylistAdapter;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
|
||||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
|
||||||
import com.squareup.otto.Subscribe;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class PlaylistViewFragment extends AbsMainActivityFragment {
|
public class PlaylistViewFragment extends AbsMainActivityFragment {
|
||||||
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
|
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
|
||||||
|
|
@ -41,24 +34,13 @@ public class PlaylistViewFragment extends AbsMainActivityFragment {
|
||||||
setUpAdapter();
|
setUpAdapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpAdapter(){
|
private void setUpAdapter() {
|
||||||
if(recyclerView != null) {
|
if (recyclerView != null) {
|
||||||
List<Playlist> playlists = PlaylistLoader.getAllPlaylists(getActivity());
|
PlaylistAdapter adapter = new PlaylistAdapter(getActivity());
|
||||||
PlaylistAdapter adapter = new PlaylistAdapter(getActivity(), playlists);
|
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
|
||||||
switch (event.getAction()) {
|
|
||||||
case DataBaseChangedEvent.PLAYLISTS_CHANGED:
|
|
||||||
case DataBaseChangedEvent.DATABASE_CHANGED:
|
|
||||||
setUpAdapter();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enableViews() {
|
public void enableViews() {
|
||||||
super.enableViews();
|
super.enableViews();
|
||||||
|
|
@ -70,16 +52,4 @@ public class PlaylistViewFragment extends AbsMainActivityFragment {
|
||||||
super.disableViews();
|
super.disableViews();
|
||||||
recyclerView.setEnabled(false);
|
recyclerView.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
App.bus.register(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
App.bus.unregister(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,6 @@ import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter;
|
import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter;
|
||||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by karim on 29.12.14.
|
* Created by karim on 29.12.14.
|
||||||
|
|
@ -35,12 +31,9 @@ public class SongViewFragment extends AbsMainActivityFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
List<Song> songs = SongLoader.getAllSongs(getActivity());
|
|
||||||
SongAdapter songAdapter = new SongAdapter(getActivity(), songs);
|
|
||||||
|
|
||||||
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
|
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
|
||||||
recyclerView.setAdapter(songAdapter);
|
|
||||||
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding());
|
||||||
|
recyclerView.setAdapter(new SongAdapter(getActivity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,18 @@ import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.ParcelFileDescriptor;
|
|
||||||
import android.provider.BaseColumns;
|
import android.provider.BaseColumns;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
|
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileDescriptor;
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -97,7 +97,7 @@ public class MusicUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void deleteTracks(final Context context, final List<Song> songs) {
|
public static void deleteTracks(final Context context, final List<Song> songs) {
|
||||||
final String[] projection = new String[] {
|
final String[] projection = new String[]{
|
||||||
BaseColumns._ID, MediaStore.MediaColumns.DATA
|
BaseColumns._ID, MediaStore.MediaColumns.DATA
|
||||||
};
|
};
|
||||||
final StringBuilder selection = new StringBuilder();
|
final StringBuilder selection = new StringBuilder();
|
||||||
|
|
@ -120,6 +120,7 @@ public class MusicUtil {
|
||||||
final int id = cursor.getInt(0);
|
final int id = cursor.getInt(0);
|
||||||
final Song song = SongLoader.getSong(context, id);
|
final Song song = SongLoader.getSong(context, id);
|
||||||
MusicPlayerRemote.removeFromQueue(song);
|
MusicPlayerRemote.removeFromQueue(song);
|
||||||
|
cursor.moveToNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2: Remove selected tracks from the database
|
// Step 2: Remove selected tracks from the database
|
||||||
|
|
@ -147,5 +148,6 @@ public class MusicUtil {
|
||||||
context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
|
context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
|
||||||
Toast.makeText(context, "Deleted " + songs.size() + " songs", Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, "Deleted " + songs.size() + " songs", Toast.LENGTH_SHORT).show();
|
||||||
//TODO add resource string
|
//TODO add resource string
|
||||||
|
App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.SONGS_CHANGED));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
android:foreground="?rect_selector">
|
android:foreground="?rect_selector">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:background="@color/materialmusic_default_bar_color"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
|
||||||
|
|
@ -85,5 +85,8 @@
|
||||||
<string name="create_playlist_failed">Could not create playlist\u0020</string>
|
<string name="create_playlist_failed">Could not create playlist\u0020</string>
|
||||||
<string name="delete_playlist">Delete playlist\u0020</string>
|
<string name="delete_playlist">Delete playlist\u0020</string>
|
||||||
<string name="rename_playlist">Rename playlist\u0020</string>
|
<string name="rename_playlist">Rename playlist\u0020</string>
|
||||||
|
<string name="delete_songs_1">Delete\u0020</string>
|
||||||
|
<string name="delete_songs_2">\u0020songs?</string>
|
||||||
|
<string name="delete_warning">"Warning: This operation can not be undone."</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue