Songs view shuffle all button
This commit is contained in:
parent
5e4f8c8f17
commit
07b9fbb599
4 changed files with 68 additions and 25 deletions
|
|
@ -23,21 +23,27 @@ 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.DataBaseChangedEvent;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
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.kabouzeid.gramophone.util.Util;
|
||||||
import com.squareup.otto.Subscribe;
|
import com.squareup.otto.Subscribe;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by karim on 27.11.14.
|
* Created by karim on 27.11.14.
|
||||||
*/
|
*/
|
||||||
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||||
|
private static final int SHUFFLE_BUTTON = 0;
|
||||||
|
private static final int SONG = 1;
|
||||||
|
|
||||||
protected Activity activity;
|
protected Activity activity;
|
||||||
protected List<Song> dataSet;
|
protected List<Song> dataSet;
|
||||||
|
|
||||||
|
|
@ -56,22 +62,38 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemViewType(int position) {
|
||||||
|
return position == 0 ? SHUFFLE_BUTTON : SONG;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
final Song song = dataSet.get(position);
|
if(getItemViewType(position) == SONG) {
|
||||||
|
final Song song = dataSet.get(position - 1);
|
||||||
|
|
||||||
holder.songTitle.setText(song.title);
|
holder.songTitle.setText(song.title);
|
||||||
holder.songInfo.setText(song.artistName);
|
holder.songInfo.setText(song.artistName);
|
||||||
|
|
||||||
Picasso.with(activity)
|
Picasso.with(activity)
|
||||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||||
.placeholder(R.drawable.default_album_art)
|
.placeholder(R.drawable.default_album_art)
|
||||||
.into(holder.albumArt);
|
.into(holder.albumArt);
|
||||||
|
} else {
|
||||||
|
int accentColor = Util.resolveColor(activity, R.attr.colorAccent);
|
||||||
|
holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase());
|
||||||
|
holder.songTitle.setTextColor(accentColor);
|
||||||
|
holder.songInfo.setVisibility(View.GONE);
|
||||||
|
holder.overflowButton.setVisibility(View.GONE);
|
||||||
|
holder.albumArt.setPadding(48, 48, 48, 48);
|
||||||
|
holder.albumArt.setColorFilter(accentColor);
|
||||||
|
holder.albumArt.setImageResource(R.drawable.ic_shuffle_white_48dp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return dataSet.size();
|
return dataSet.size() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||||
|
|
@ -90,7 +112,12 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
itemView.setOnClickListener(new View.OnClickListener() {
|
itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
MusicPlayerRemote.openQueue(dataSet, getPosition(), true);
|
if (getItemViewType() == SHUFFLE_BUTTON) {
|
||||||
|
MusicPlayerRemote.openQueue(dataSet, new Random().nextInt(dataSet.size()), true);
|
||||||
|
MusicPlayerRemote.forceSetShuffleMode(activity, MusicService.SHUFFLE_MODE_SHUFFLE);
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -102,26 +129,27 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
final int position = getAdapterPosition();
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_delete_from_disk:
|
case R.id.action_delete_from_disk:
|
||||||
DeleteSongsDialogHelper.getDialog(activity, dataSet.get(getAdapterPosition())).show();
|
DeleteSongsDialogHelper.getDialog(activity, dataSet.get(position)).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(position)).show();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_play_next:
|
case R.id.action_play_next:
|
||||||
MusicPlayerRemote.playNext(dataSet.get(getAdapterPosition()));
|
MusicPlayerRemote.playNext(dataSet.get(position));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_add_to_current_playing:
|
case R.id.action_add_to_current_playing:
|
||||||
MusicPlayerRemote.enqueue(dataSet.get(getAdapterPosition()));
|
MusicPlayerRemote.enqueue(dataSet.get(position));
|
||||||
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(getAdapterPosition()).id);
|
intent.putExtra(AppKeys.E_ID, dataSet.get(position).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(getAdapterPosition()).id);
|
String songFilePath = SongFilePathLoader.getSongFilePath(activity, dataSet.get(position).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;
|
||||||
|
|
@ -131,13 +159,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(getAdapterPosition()).albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, dataSet.get(position).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(getAdapterPosition()).artistId, artistPairs);
|
NavigationUtil.goToArtist(activity, dataSet.get(position).artistId, artistPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,23 @@ public class MusicPlayerRemote {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean setShuffleMode(final int shuffleMode) {
|
||||||
|
if (musicService != null) {
|
||||||
|
musicService.setShuffleMode(shuffleMode);
|
||||||
|
return true;
|
||||||
|
} return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void forceSetShuffleMode(final Context context, final int shuffleMode){
|
||||||
|
if (musicService != null) {
|
||||||
|
musicService.setShuffleMode(shuffleMode);
|
||||||
|
} else {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||||
|
.putInt(AppKeys.SP_SHUFFLE_MODE, shuffleMode)
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void playNext(Song song) {
|
public static void playNext(Song song) {
|
||||||
if (musicService != null) {
|
if (musicService != null) {
|
||||||
musicService.addSong(getPosition() + 1, song);
|
musicService.addSong(getPosition() + 1, song);
|
||||||
|
|
|
||||||
|
|
@ -691,21 +691,18 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setShuffleMode(final int shuffleMode) {
|
public void setShuffleMode(final int shuffleMode) {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
||||||
|
.putInt(AppKeys.SP_SHUFFLE_MODE, shuffleMode)
|
||||||
|
.apply();
|
||||||
switch (shuffleMode) {
|
switch (shuffleMode) {
|
||||||
case SHUFFLE_MODE_SHUFFLE:
|
case SHUFFLE_MODE_SHUFFLE:
|
||||||
this.shuffleMode = shuffleMode;
|
this.shuffleMode = shuffleMode;
|
||||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
|
||||||
.putInt(AppKeys.SP_SHUFFLE_MODE, shuffleMode)
|
|
||||||
.apply();
|
|
||||||
ShuffleHelper.makeShuffleList(this.playingQueue, getPosition());
|
ShuffleHelper.makeShuffleList(this.playingQueue, getPosition());
|
||||||
setPosition(0);
|
setPosition(0);
|
||||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.SHUFFLE_MODE_CHANGED);
|
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.SHUFFLE_MODE_CHANGED);
|
||||||
break;
|
break;
|
||||||
case SHUFFLE_MODE_NONE:
|
case SHUFFLE_MODE_NONE:
|
||||||
this.shuffleMode = shuffleMode;
|
this.shuffleMode = shuffleMode;
|
||||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
|
||||||
.putInt(AppKeys.SP_SHUFFLE_MODE, shuffleMode)
|
|
||||||
.apply();
|
|
||||||
playingQueue = new ArrayList<>(originalPlayingQueue);
|
playingQueue = new ArrayList<>(originalPlayingQueue);
|
||||||
int newPosition = 0;
|
int newPosition = 0;
|
||||||
for (Song song : playingQueue) {
|
for (Song song : playingQueue) {
|
||||||
|
|
|
||||||
|
|
@ -88,5 +88,6 @@
|
||||||
<string name="delete_songs_1">Delete\u0020</string>
|
<string name="delete_songs_1">Delete\u0020</string>
|
||||||
<string name="delete_songs_2">\u0020songs?</string>
|
<string name="delete_songs_2">\u0020songs?</string>
|
||||||
<string name="delete_warning">"Warning: This operation can not be undone."</string>
|
<string name="delete_warning">"Warning: This operation can not be undone."</string>
|
||||||
|
<string name="shuffle_all">Shuffle all</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue