Add an expand menu action
This commit is contained in:
parent
5fda18dc67
commit
2dcb8eb0e4
@ -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>
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user