From 2dcb8eb0e46d69f1c8bb83f0ab1628d21a106b3f Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Sat, 20 Mar 2010 17:21:52 -0500 Subject: [PATCH] Add an expand menu action --- res/values/strings.xml | 1 + src/org/kreed/vanilla/MediaAdapter.java | 28 +++++++++++------ src/org/kreed/vanilla/SongSelector.java | 40 ++++++++++++++++--------- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 5977f31f..c8ba7058 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7,6 +7,7 @@ Enqueue Play + Expand Preferences Media Library Stop and Exit diff --git a/src/org/kreed/vanilla/MediaAdapter.java b/src/org/kreed/vanilla/MediaAdapter.java index 95ccadf4..4a5d8a0e 100644 --- a/src/org/kreed/vanilla/MediaAdapter.java +++ b/src/org/kreed/vanilla/MediaAdapter.java @@ -63,17 +63,17 @@ public class MediaAdapter extends BaseAdapter implements Filterable { mExpanderListener = expanderListener; } + public final boolean hasExpanders() + { + return mExpanderListener != null; + } + @Override public boolean hasStableIds() { return true; } - public int getPrimaryField() - { - return mPrimaryField; - } - public View getView(int position, View convertView, ViewGroup parent) { MediaView view = null; @@ -346,21 +346,31 @@ public class MediaAdapter extends BaseAdapter implements Filterable { canvas.drawText(mData.getField(mPrimaryField), padding, padding + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint); } - public void updateMedia(SongData data) + public final void updateMedia(SongData data) { mData = data; invalidate(); } - public SongData getExpanderData() + public final int getPrimaryField() { - return mExpanderPressed ? mData : null; + return mPrimaryField; + } + + public final SongData getExpanderData() + { + return mData; + } + + public final boolean isExpanderPressed() + { + return mExpanderPressed; } @Override public boolean onTouchEvent(MotionEvent event) { - mExpanderPressed = mExpanderListener != null && event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2; + mExpanderPressed = event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2; return false; } } diff --git a/src/org/kreed/vanilla/SongSelector.java b/src/org/kreed/vanilla/SongSelector.java index a642e1d2..ebfe2dc3 100644 --- a/src/org/kreed/vanilla/SongSelector.java +++ b/src/org/kreed/vanilla/SongSelector.java @@ -165,22 +165,26 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick startService(intent); } + private void expand(MediaAdapter.MediaView view) + { + SongData data = view.getExpanderData(); + int field = view.getPrimaryField(); + SongData.Field limiter = new SongData.Field(field, data); + for (int i = field; i != 3; ++i) { + MediaAdapter tabAdapter = getAdapter(i); + tabAdapter.hideAll(); + tabAdapter.setLimiter(limiter); + } + mTabHost.setCurrentTab(field); + } + public void onItemClick(AdapterView list, View view, int pos, long id) { - MediaAdapter adapter = (MediaAdapter)list.getAdapter(); - SongData data = ((MediaAdapter.MediaView)view).getExpanderData(); - if (data != null) { - int field = adapter.getPrimaryField(); - SongData.Field limiter = new SongData.Field(field, data); - for (int i = field; i != 3; ++i) { - MediaAdapter tabAdapter = getAdapter(i); - tabAdapter.hideAll(); - tabAdapter.setLimiter(limiter); - } - mTabHost.setCurrentTab(field); - } else { - sendSongIntent(adapter.buildSongIntent(mDefaultAction, pos)); - } + MediaAdapter.MediaView mediaView = (MediaAdapter.MediaView)view; + if (mediaView.isExpanderPressed()) + expand(mediaView); + else + sendSongIntent(((MediaAdapter)list.getAdapter()).buildSongIntent(mDefaultAction, pos)); } public void afterTextChanged(Editable editable) @@ -258,6 +262,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick private static final int MENU_PLAY = 0; private static final int MENU_ENQUEUE = 1; + private static final int MENU_EXPAND = 2; @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) @@ -266,11 +271,18 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick int pos = (int)((AdapterView.AdapterContextMenuInfo)info).position; menu.add(0, MENU_PLAY, 0, R.string.play).setIntent(adapter.buildSongIntent(PlaybackService.ACTION_PLAY, pos)); menu.add(0, MENU_ENQUEUE, 0, R.string.enqueue).setIntent(adapter.buildSongIntent(PlaybackService.ACTION_ENQUEUE, pos)); + if (adapter.hasExpanders()) + menu.add(0, MENU_EXPAND, 0, R.string.expand); } @Override public boolean onContextItemSelected(MenuItem item) { + if (item.getItemId() == MENU_EXPAND) { + expand((MediaAdapter.MediaView)((AdapterView.AdapterContextMenuInfo)item.getMenuInfo()).targetView); + return true; + } + Intent intent = item.getIntent(); if (mDefaultIsLastAction) mDefaultAction = intent.getIntExtra("action", PlaybackService.ACTION_PLAY);