Fixed another playing queue related bug

This commit is contained in:
Karim Abou Zeid 2015-12-24 21:35:49 +01:00
commit cbe8751ce0
3 changed files with 37 additions and 22 deletions

View file

@ -167,7 +167,7 @@ public class MusicPlayerRemote {
*/ */
public static void openQueue(final ArrayList<Song> queue, final int startPosition, final boolean startPlaying) { public static void openQueue(final ArrayList<Song> queue, final int startPosition, final boolean startPlaying) {
if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) { if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) {
musicService.openAndPlayQueue(queue, startPosition, startPlaying); musicService.openQueue(queue, startPosition, startPlaying);
} }
} }
@ -280,7 +280,13 @@ public class MusicPlayerRemote {
public static boolean playNext(Song song) { public static boolean playNext(Song song) {
if (musicService != null) { if (musicService != null) {
musicService.addSong(getPosition() + 1, song); if (getPlayingQueue().size() > 0) {
musicService.addSong(getPosition() + 1, song);
} else {
ArrayList<Song> queue = new ArrayList<>();
queue.add(song);
openQueue(queue, 0, false);
}
Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show(); Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@ -289,7 +295,13 @@ public class MusicPlayerRemote {
public static boolean enqueue(Song song) { public static boolean enqueue(Song song) {
if (musicService != null) { if (musicService != null) {
musicService.addSong(song); if (getPlayingQueue().size() > 0) {
musicService.addSong(song);
} else {
ArrayList<Song> queue = new ArrayList<>();
queue.add(song);
openQueue(queue, 0, false);
}
Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show(); Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show();
return true; return true;
} }
@ -298,7 +310,11 @@ public class MusicPlayerRemote {
public static boolean enqueue(@NonNull ArrayList<Song> songs) { public static boolean enqueue(@NonNull ArrayList<Song> songs) {
if (musicService != null) { if (musicService != null) {
musicService.addSongs(songs); if (getPlayingQueue().size() > 0) {
musicService.addSongs(songs);
} else {
openQueue(songs, 0, false);
}
final String toast = songs.size() == 1 ? musicService.getResources().getString(R.string.added_title_to_playing_queue) : musicService.getResources().getString(R.string.added_x_titles_to_playing_queue, songs.size()); final String toast = songs.size() == 1 ? musicService.getResources().getString(R.string.added_title_to_playing_queue) : musicService.getResources().getString(R.string.added_x_titles_to_playing_queue, songs.size());
Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show(); Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show();
return true; return true;

View file

@ -550,7 +550,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
} }
public void openAndPlayQueue(@Nullable final ArrayList<Song> playingQueue, final int startPosition, final boolean startPlaying) { public void openQueue(@Nullable final ArrayList<Song> playingQueue, final int startPosition, final boolean startPlaying) {
if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue.size()) { if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue.size()) {
originalPlayingQueue = playingQueue; originalPlayingQueue = playingQueue;
this.playingQueue = new ArrayList<>(originalPlayingQueue); this.playingQueue = new ArrayList<>(originalPlayingQueue);
@ -562,6 +562,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
if (startPlaying) { if (startPlaying) {
playSongAt(position); playSongAt(position);
} else {
setPosition(position);
} }
notifyChange(QUEUE_CHANGED); notifyChange(QUEUE_CHANGED);
} }

View file

@ -79,8 +79,8 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
protected abstract View createContentView(); protected abstract View createContentView();
@Override @Override
public void onPlayingMetaChanged() { public void onQueueChanged() {
super.onPlayingMetaChanged(); super.onQueueChanged();
hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty()); hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty());
} }
@ -148,24 +148,21 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
return slidingUpPanelLayout == null || slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED; return slidingUpPanelLayout == null || slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED;
} }
public void hideBottomBar(boolean hide) { public void hideBottomBar(final boolean hide) {
if (hide) { slidingUpPanelLayout.post(new Runnable() {
slidingUpPanelLayout.setPanelHeight(0); @Override
slidingUpPanelLayout.post(new Runnable() { public void run() {
@Override if (hide) {
public void run() {
slidingUpPanelLayout.setPanelHeight(0); slidingUpPanelLayout.setPanelHeight(0);
} if (slidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.COLLAPSED) {
}); slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
} else { }
slidingUpPanelLayout.setPanelHeight(getResources().getDimensionPixelSize(R.dimen.mini_player_height)); } else {
slidingUpPanelLayout.post(new Runnable() {
@Override
public void run() {
slidingUpPanelLayout.setPanelHeight(getResources().getDimensionPixelSize(R.dimen.mini_player_height)); slidingUpPanelLayout.setPanelHeight(getResources().getDimensionPixelSize(R.dimen.mini_player_height));
} }
});
} }
});
} }
protected View wrapSlidingMusicPanel(@LayoutRes int resId) { protected View wrapSlidingMusicPanel(@LayoutRes int resId) {