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="play">Play</string>
<string name="expand">Expand</string>
<string name="settings">Preferences</string>
<string name="library">Media Library</string>
<string name="quit">Stop and Exit</string>

View File

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

View File

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