Add FancyMenu to ShowQueueFragment

This commit is contained in:
Adrian Ulrich 2018-11-12 10:41:23 +01:00
parent 893e96cbd4
commit 5e39f5ceec
3 changed files with 45 additions and 46 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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