Add an expand menu action

This commit is contained in:
Christopher Eby 2010-03-20 17:21:52 -05:00
parent 5fda18dc67
commit 2dcb8eb0e4
3 changed files with 46 additions and 23 deletions

View File

@ -7,6 +7,7 @@
<string name="enqueue">Enqueue</string> <string name="enqueue">Enqueue</string>
<string name="play">Play</string> <string name="play">Play</string>
<string name="expand">Expand</string>
<string name="settings">Preferences</string> <string name="settings">Preferences</string>
<string name="library">Media Library</string> <string name="library">Media Library</string>
<string name="quit">Stop and Exit</string> <string name="quit">Stop and Exit</string>

View File

@ -63,17 +63,17 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
mExpanderListener = expanderListener; mExpanderListener = expanderListener;
} }
public final boolean hasExpanders()
{
return mExpanderListener != null;
}
@Override @Override
public boolean hasStableIds() public boolean hasStableIds()
{ {
return true; return true;
} }
public int getPrimaryField()
{
return mPrimaryField;
}
public View getView(int position, View convertView, ViewGroup parent) public View getView(int position, View convertView, ViewGroup parent)
{ {
MediaView view = null; 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); 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; mData = data;
invalidate(); 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 @Override
public boolean onTouchEvent(MotionEvent event) 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; return false;
} }
} }

View File

@ -165,22 +165,26 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
startService(intent); 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) public void onItemClick(AdapterView<?> list, View view, int pos, long id)
{ {
MediaAdapter adapter = (MediaAdapter)list.getAdapter(); MediaAdapter.MediaView mediaView = (MediaAdapter.MediaView)view;
SongData data = ((MediaAdapter.MediaView)view).getExpanderData(); if (mediaView.isExpanderPressed())
if (data != null) { expand(mediaView);
int field = adapter.getPrimaryField(); else
SongData.Field limiter = new SongData.Field(field, data); sendSongIntent(((MediaAdapter)list.getAdapter()).buildSongIntent(mDefaultAction, pos));
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));
}
} }
public void afterTextChanged(Editable editable) 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_PLAY = 0;
private static final int MENU_ENQUEUE = 1; private static final int MENU_ENQUEUE = 1;
private static final int MENU_EXPAND = 2;
@Override @Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) 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; 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_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)); 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 @Override
public boolean onContextItemSelected(MenuItem item) public boolean onContextItemSelected(MenuItem item)
{ {
if (item.getItemId() == MENU_EXPAND) {
expand((MediaAdapter.MediaView)((AdapterView.AdapterContextMenuInfo)item.getMenuInfo()).targetView);
return true;
}
Intent intent = item.getIntent(); Intent intent = item.getIntent();
if (mDefaultIsLastAction) if (mDefaultIsLastAction)
mDefaultAction = intent.getIntExtra("action", PlaybackService.ACTION_PLAY); mDefaultAction = intent.getIntExtra("action", PlaybackService.ACTION_PLAY);