From 5e39f5ceecdab37eea99ca7b1a156512d86743b5 Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Mon, 12 Nov 2018 10:41:23 +0100 Subject: [PATCH] Add FancyMenu to ShowQueueFragment --- .../android/vanilla/LibraryActivity.java | 1 + .../android/vanilla/ShowQueueFragment.java | 70 ++++++++++++------- .../vanilla/SlidingPlaybackActivity.java | 20 ------ 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/LibraryActivity.java b/app/src/main/java/ch/blinkenlights/android/vanilla/LibraryActivity.java index ffb3ce08..476fbae5 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/LibraryActivity.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/LibraryActivity.java @@ -622,6 +622,7 @@ public class LibraryActivity private static final int CTX_MENU_PLUGINS = 11; private static final int CTX_MENU_SHOW_DETAILS = 12; private static final int CTX_MENU_ADD_TO_HOMESCREEN = 13; + private static final int CTX_MENU_ADD_TO_PLAYLIST = 14; /** * Creates a context menu for an adapter row. diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueFragment.java b/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueFragment.java index 094065a1..42de19e7 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueFragment.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/ShowQueueFragment.java @@ -17,6 +17,9 @@ package ch.blinkenlights.android.vanilla; +import ch.blinkenlights.android.vanilla.ui.FancyMenu; +import ch.blinkenlights.android.vanilla.ui.FancyMenuItem; + import android.annotation.SuppressLint; import android.app.Fragment; import android.content.Context; @@ -34,10 +37,11 @@ import com.mobeta.android.dslv.DragSortListView; public class ShowQueueFragment extends Fragment implements TimelineCallback, - AdapterView.OnItemClickListener, - DragSortListView.DropListener, - DragSortListView.RemoveListener, - MenuItem.OnMenuItemClickListener + AdapterView.OnItemClickListener, + AdapterView.OnItemLongClickListener, + DragSortListView.DropListener, + DragSortListView.RemoveListener, + FancyMenu.Callback { private DragSortListView mListView; @@ -57,7 +61,7 @@ public class ShowQueueFragment extends Fragment mListView.setDropListener(this); mListView.setRemoveListener(this); mListView.setOnItemClickListener(this); - mListView.setOnCreateContextMenuListener(this); + mListView.setOnItemLongClickListener(this); PlaybackService.addTimelineCallback(this); return view; @@ -83,42 +87,51 @@ public class ShowQueueFragment extends Fragment } - private final static int CTX_MENU_PLAY = 100; - private final static int CTX_MENU_ENQUEUE_ALBUM = 101; - private final static int CTX_MENU_ENQUEUE_ARTIST = 102; - private final static int CTX_MENU_ENQUEUE_GENRE = 103; - private final static int CTX_MENU_REMOVE = 104; - private final static int CTX_MENU_SHOW_DETAILS = 105; + private final static int CTX_MENU_PLAY = 100; + private final static int CTX_MENU_ENQUEUE_ALBUM = 101; + private final static int CTX_MENU_ENQUEUE_ARTIST = 102; + private final static int CTX_MENU_ENQUEUE_GENRE = 103; + private final static int CTX_MENU_REMOVE = 104; + private final static int CTX_MENU_SHOW_DETAILS = 105; + private final static int CTX_MENU_ADD_TO_PLAYLIST = 106; /** - * Called by Android on long press. Builds the long press context menu. + * Called on long-click on a adapeter row */ @Override - public void onCreateContextMenu(ContextMenu menu, View listView, ContextMenu.ContextMenuInfo absInfo) { - AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)absInfo; - Song song = playbackService().getSongByQueuePosition(info.position); + public boolean onItemLongClick(AdapterView parent, View view, int pos, long id) { + Song song = playbackService().getSongByQueuePosition(pos); Intent intent = new Intent(); intent.putExtra("id", song.id); intent.putExtra("type", MediaUtils.TYPE_SONG); - intent.putExtra("position", info.position); - menu.setHeaderTitle(song.title); - menu.add(0, CTX_MENU_PLAY, 0, R.string.play).setIntent(intent).setOnMenuItemClickListener(this); - menu.add(0, CTX_MENU_ENQUEUE_ALBUM, 0, R.string.enqueue_current_album).setIntent(intent).setOnMenuItemClickListener(this); - menu.add(0, CTX_MENU_ENQUEUE_ARTIST, 0, R.string.enqueue_current_artist).setIntent(intent).setOnMenuItemClickListener(this); - menu.add(0, CTX_MENU_ENQUEUE_GENRE, 0, R.string.enqueue_current_genre).setIntent(intent).setOnMenuItemClickListener(this); - menu.addSubMenu(0, SlidingPlaybackActivity.CTX_MENU_ADD_TO_PLAYLIST, 0, R.string.add_to_playlist).getItem().setIntent(intent); // handled by fragment parent - menu.add(0, CTX_MENU_SHOW_DETAILS, 0, R.string.details).setIntent(intent).setOnMenuItemClickListener(this); - menu.add(0, CTX_MENU_REMOVE, 0, R.string.remove).setIntent(intent).setOnMenuItemClickListener(this); + intent.putExtra("position", pos); + + FancyMenu fm = new FancyMenu(getContext(), this); + fm.show(getFragmentManager(), "ShowQueueFragmentContext"); + fm.setHeaderTitle(song.title); + + fm.add(CTX_MENU_PLAY, 0, R.drawable.menu_play, R.string.play).setIntent(intent); + + fm.addSpacer(0); + fm.add(CTX_MENU_ENQUEUE_ALBUM, 0, R.drawable.menu_enqueue, R.string.enqueue_current_album).setIntent(intent); + fm.add(CTX_MENU_ENQUEUE_ARTIST, 0, R.drawable.menu_enqueue, R.string.enqueue_current_artist).setIntent(intent); + fm.add(CTX_MENU_ENQUEUE_GENRE, 0, R.drawable.menu_enqueue, R.string.enqueue_current_genre).setIntent(intent); + fm.add(CTX_MENU_ADD_TO_PLAYLIST, 0, R.drawable.menu_add_to_playlist, R.string.add_to_playlist).setIntent(intent); + + fm.addSpacer(0); + fm.add(CTX_MENU_SHOW_DETAILS, 0, R.drawable.menu_details, R.string.details).setIntent(intent); + fm.add(CTX_MENU_REMOVE, 90, R.drawable.menu_remove, R.string.remove).setIntent(intent); + return true; } /** - * Called by Android after the User selected a MenuItem. + * Callback for FancyMenu clicks. * * @param item The selected menu item. */ @Override - public boolean onMenuItemClick(MenuItem item) { + public boolean onFancyItemSelected(FancyMenuItem item) { Intent intent = item.getIntent(); int pos = intent.getIntExtra("position", -1); @@ -143,6 +156,11 @@ public class ShowQueueFragment extends Fragment case CTX_MENU_REMOVE: remove(pos); break; + case CTX_MENU_ADD_TO_PLAYLIST: + PlaylistDialog.Callback callback = ((PlaylistDialog.Callback)getActivity()); + PlaylistDialog dialog = PlaylistDialog.newInstance(callback, intent, null); + dialog.show(getFragmentManager(), "PlaylistDialog"); + break; default: throw new IllegalArgumentException("Unhandled menu id received!"); // we could actually dispatch this to the hosting activity, but we do not need this for now. diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java b/app/src/main/java/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java index 7a1ea185..40748733 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java @@ -154,26 +154,6 @@ public class SlidingPlaybackActivity extends PlaybackActivity } - static final int CTX_MENU_ADD_TO_PLAYLIST = 300; - - @Override - public boolean onContextItemSelected(MenuItem item) { - if (item.getGroupId() != 0) - return super.onContextItemSelected(item); - - final Intent intent = item.getIntent(); - switch (item.getItemId()) { - case CTX_MENU_ADD_TO_PLAYLIST: { - PlaylistDialog dialog = PlaylistDialog.newInstance(this, intent, null); - dialog.show(getFragmentManager(), "PlaylistDialog"); - break; - } - default: - throw new IllegalArgumentException("Unhandled item id"); - } - return true; - } - /** * Called by PlaylistDialog.Callback to append data to * a playlist