Minor Bugfixes and playing queue actions

This commit is contained in:
Karim Abou Zeid 2015-03-16 18:58:24 +01:00
commit f7bc62a2df
17 changed files with 138 additions and 44 deletions

View file

@ -35,7 +35,7 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
public View getView(final int position, View convertView, ViewGroup parent) {
final Song song = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_playlist, parent, false);
@ -57,11 +57,19 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
@Override
public void onClick(final View v) {
PopupMenu popupMenu = new PopupMenu(activity, v);
popupMenu.inflate(R.menu.menu_song);
popupMenu.inflate(R.menu.menu_playing_queue_song);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_remove_from_playing_queue:
MusicPlayerRemote.removeFromQueue(position);
notifyDataSetChanged();
return true;
case R.id.action_play_next:
MusicPlayerRemote.playNext(song);
notifyDataSetChanged();
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AppKeys.E_ID, song.id);
@ -76,7 +84,7 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
NavigationUtil.goToAlbum(activity, song.albumId, null);
return true;
case R.id.action_go_to_artist:
NavigationUtil.goToAlbum(activity, song.artistId, null);
NavigationUtil.goToArtist(activity, song.artistId, null);
return true;
}
return false;

View file

@ -88,6 +88,11 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<AlbumSongAdapter.View
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_play_next:
MusicPlayerRemote.playNext(dataSet.get(getPosition()));
return true;
case R.id.action_add_to_current_playing:
MusicPlayerRemote.enqueue(dataSet.get(getPosition()));
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AppKeys.E_ID, dataSet.get(getPosition()).id);

View file

@ -13,6 +13,7 @@ import android.widget.PopupMenu;
import android.widget.TextView;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
@ -66,6 +67,12 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_play_next:
MusicPlayerRemote.playNext(song);
return true;
case R.id.action_add_to_current_playing:
MusicPlayerRemote.enqueue(song);
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AppKeys.E_ID, song.id);

View file

@ -93,6 +93,12 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_play_next:
MusicPlayerRemote.playNext(dataSet.get(getPosition()));
return true;
case R.id.action_add_to_current_playing:
MusicPlayerRemote.enqueue(dataSet.get(getPosition()));
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(activity, SongTagEditorActivity.class);
intent.putExtra(AppKeys.E_ID, dataSet.get(getPosition()).id);

View file

@ -7,8 +7,10 @@ import android.content.ServiceConnection;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
import com.kabouzeid.gramophone.model.Song;
@ -214,16 +216,29 @@ public class MusicPlayerRemote {
return false;
}
public static void playNext(Song song) {
if (musicService != null) {
musicService.addSong(getPosition() + 1, song);
Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show();
}
}
public static void enqueue(Song song) {
if (musicService != null) {
musicService.addSong(song);
Toast.makeText(musicService, musicService.getResources().getString(R.string.added_title_to_playing_queue), Toast.LENGTH_SHORT).show();
}
}
public static void removeFromQueue(int position) {
if (musicService != null) {
musicService.removeSong(position);
}
}
public static void moveSong(int from, int to) {
final int currentPosition = getPosition();
Song songToMove = getPlayingQueue().remove(from);
getPlayingQueue().add(to, songToMove);
if (from > currentPosition && to <= currentPosition) {
setPosition(getPosition() + 1);
} else if (from < currentPosition && to >= currentPosition) {
setPosition(getPosition() - 1);
} else if (from == currentPosition) {
setPosition(to);
if(musicService != null){
musicService.moveSong(from, to);
}
}

View file

@ -477,6 +477,46 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
saveState();
}
public void addSong(int position, Song song){
playingQueue.add(position, song);
originalPlayingQueue.add(position, song);
saveState();
}
public void addSong(Song song){
playingQueue.add(song);
originalPlayingQueue.add(song);
saveState();
}
public void removeSong(int position){
if(getShuffleMode() == SHUFFLE_MODE_NONE){
playingQueue.remove(position);
originalPlayingQueue.remove(position);
} else {
originalPlayingQueue.remove(playingQueue.remove(position));
}
saveState();
}
public void moveSong(int from, int to) {
final int currentPosition = getPosition();
Song songToMove = playingQueue.remove(from);
playingQueue.add(to, songToMove);
if(getShuffleMode() == SHUFFLE_MODE_NONE) {
Song tmpSong = originalPlayingQueue.remove(from);
originalPlayingQueue.add(to, tmpSong);
}
if (from > currentPosition && to <= currentPosition) {
setPosition(getPosition() + 1);
} else if (from < currentPosition && to >= currentPosition) {
setPosition(getPosition() - 1);
} else if (from == currentPosition) {
setPosition(to);
}
saveState();
}
public long getCurrentSongId() {
return currentSongId;
}

View file

@ -6,6 +6,7 @@ import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.util.Pair;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.Toolbar;
@ -259,6 +260,9 @@ public class AlbumDetailActivity extends AbsFabActivity {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_playing_queue:
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_settings:
return true;
case R.id.action_current_playing:
@ -270,7 +274,9 @@ public class AlbumDetailActivity extends AbsFabActivity {
startActivity(intent);
return true;
case R.id.action_go_to_artist:
NavigationUtil.goToArtist(this, album.artistId, null);
Pair[] artistPairs = null;
artistPairs = getSharedViewsWithFab(artistPairs);
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
return true;
}
return super.onOptionsItemSelected(item);

View file

@ -312,6 +312,9 @@ public class ArtistDetailActivity extends AbsFabActivity {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_playing_queue:
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_biography:
if(biography != null){
getBiographyDialog().show();

View file

@ -240,12 +240,7 @@ public class MainActivity extends AbsFabActivity
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
return true;
case R.id.action_playing_queue:
final MaterialDialog materialDialog = PlayingQueueDialogHelper.getDialog(this);
if (materialDialog != null) {
materialDialog.show();
} else {
Toast.makeText(this, getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
NavigationUtil.openPlayingQueueDialog(this);
return true;
}
return super.onOptionsItemSelected(item);

View file

@ -392,12 +392,7 @@ public class MusicControllerActivity extends AbsFabActivity {
super.onBackPressed();
return true;
case R.id.action_playing_queue:
final MaterialDialog materialDialog = PlayingQueueDialogHelper.getDialog(this);
if (materialDialog != null) {
materialDialog.show();
} else {
Toast.makeText(this, getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_tag_editor:
Intent intent = new Intent(this, SongTagEditorActivity.class);
@ -410,10 +405,10 @@ public class MusicControllerActivity extends AbsFabActivity {
SongDetailDialogHelper.getDialog(this, songFile).show();
return true;
case R.id.action_go_to_album:
NavigationUtil.goToAlbum(this, song.albumId, null);
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithFab(null));
return true;
case R.id.action_go_to_artist:
NavigationUtil.goToAlbum(this, song.artistId, null);
NavigationUtil.goToArtist(this, song.artistId, getSharedViewsWithFab(null));
return true;
}

View file

@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.app.Fragment;
import android.os.Build;
import android.view.ViewConfiguration;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;

View file

@ -7,8 +7,10 @@ import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.PlayingQueueDialogHelper;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity;
@ -20,7 +22,7 @@ import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
*/
public class NavigationUtil {
public static void goToArtist(final Activity activity, final int artistId, final Pair[] sharedViews) {
if(activity instanceof ArtistDetailActivity){
if (activity instanceof ArtistDetailActivity) {
return;
}
if ((activity instanceof KabViewsDisableAble && ((KabViewsDisableAble) activity).areViewsEnabled()) || !(activity instanceof KabViewsDisableAble)) {
@ -40,7 +42,7 @@ public class NavigationUtil {
}
public static void goToAlbum(final Activity activity, final int albumId, final Pair[] sharedViews) {
if(activity instanceof AlbumDetailActivity){
if (activity instanceof AlbumDetailActivity) {
return;
}
if ((activity instanceof KabViewsDisableAble && ((KabViewsDisableAble) activity).areViewsEnabled()) || !(activity instanceof KabViewsDisableAble)) {
@ -60,7 +62,7 @@ public class NavigationUtil {
}
public static void openCurrentPlayingIfPossible(final Activity activity, final Pair[] sharedViews) {
if (activity instanceof MusicControllerActivity){
if (activity instanceof MusicControllerActivity) {
activity.onBackPressed();
return;
}
@ -82,4 +84,13 @@ public class NavigationUtil {
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
}
public static void openPlayingQueueDialog(final Activity activity) {
final MaterialDialog materialDialog = PlayingQueueDialogHelper.getDialog(activity);
if (materialDialog != null) {
materialDialog.show();
} else {
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
}
}

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.util;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.database.Cursor;
@ -13,22 +12,13 @@ import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.util.TypedValue;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity;
import com.kabouzeid.gramophone.ui.activities.ArtistDetailActivity;
import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
/**
* Created by karim on 12.12.14.

View file

@ -9,6 +9,12 @@
android:title="@string/action_current_playing"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_playing_queue"
android:icon="@drawable/ic_queue_music_white_24dp"
android:title="@string/action_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_go_to_artist"
android:title="@string/action_go_to_artist"

View file

@ -9,6 +9,12 @@
android:title="@string/action_current_playing"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_playing_queue"
android:icon="@drawable/ic_queue_music_white_24dp"
android:title="@string/action_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_biography"
android:title="@string/biography"

View file

@ -9,10 +9,7 @@
android:id="@+id/action_remove_from_playing_queue"
android:title="@string/action_remove_from_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_add_to_current_playing"
android:title="@string/action_add_to_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_add_to_playlist"
android:title="@string/action_add_to_playlist"

View file

@ -71,5 +71,8 @@
<string name="updated_artist_image_for">Updated artist image for</string>
<string name="updating">Updating…</string>
<string name="loading">Loading…</string>
<string name="added_title_to_playing_queue">Added 1 title to the playing queue.</string>
<string name="added_titles_to_playing_queue_1">Added </string>
<string name="added_titles_to_playing_queue_2"> titles to the playing queue.</string>
</resources>