diff --git a/res/values/translatable.xml b/res/values/translatable.xml
index 14f692d3..17138686 100644
--- a/res/values/translatable.xml
+++ b/res/values/translatable.xml
@@ -275,6 +275,8 @@ THE SOFTWARE.
Enqueue album
Enqueue artist
Enqueue genre
+ Enqueue…
+ More from…
Empty queue
Show queue
Hide queue
diff --git a/src/ch/blinkenlights/android/vanilla/FullPlaybackActivity.java b/src/ch/blinkenlights/android/vanilla/FullPlaybackActivity.java
index 39fec19c..92f94b9a 100644
--- a/src/ch/blinkenlights/android/vanilla/FullPlaybackActivity.java
+++ b/src/ch/blinkenlights/android/vanilla/FullPlaybackActivity.java
@@ -36,6 +36,7 @@ import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.SubMenu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
@@ -298,14 +299,23 @@ public class FullPlaybackActivity extends SlidingPlaybackActivity
{
super.onCreateOptionsMenu(menu);
menu.add(0, MENU_DELETE, 30, R.string.delete);
- menu.add(0, MENU_ENQUEUE_ALBUM, 30, R.string.enqueue_current_album);
- menu.add(0, MENU_ENQUEUE_ARTIST, 30, R.string.enqueue_current_artist);
- menu.add(0, MENU_ENQUEUE_GENRE, 30, R.string.enqueue_current_genre);
+ SubMenu enqueueMenu = menu.addSubMenu(0, MENU_ENQUEUE, 30, R.string.enqueue_current);
+ SubMenu moreMenu = menu.addSubMenu(0, MENU_MORE, 30, R.string.more_from_current);
menu.add(0, MENU_ADD_TO_PLAYLIST, 30, R.string.add_to_playlist);
menu.add(0, MENU_SHARE, 30, R.string.share);
menu.add(0, MENU_PLUGINS, 30, R.string.plugins);
mFavorites = menu.add(0, MENU_SONG_FAVORITE, 0, R.string.add_to_favorites).setIcon(R.drawable.btn_rating_star_off_mtrl_alpha).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ // Subitems of 'enqueue...'
+ enqueueMenu.add(0, MENU_ENQUEUE_ALBUM, 30, R.string._album);
+ enqueueMenu.add(0, MENU_ENQUEUE_ARTIST, 30, R.string._artist);
+ enqueueMenu.add(0, MENU_ENQUEUE_GENRE, 30, R.string._genre);
+
+ // Subitems of 'more from...'
+ moreMenu.add(0, MENU_MORE_ALBUM, 30, R.string._album);
+ moreMenu.add(0, MENU_MORE_ARTIST, 30, R.string._artist);
+ moreMenu.add(0, MENU_MORE_GENRE, 30, R.string._genre);
+
// ensure that mFavorites is updated
mHandler.sendEmptyMessage(MSG_LOAD_FAVOURITE_INFO);
return true;
@@ -318,8 +328,16 @@ public class FullPlaybackActivity extends SlidingPlaybackActivity
switch (item.getItemId()) {
case android.R.id.home:
- case MENU_LIBRARY:
- openLibrary(null);
+ openLibrary(null, -1);
+ break;
+ case MENU_MORE_ALBUM:
+ openLibrary(song, MediaUtils.TYPE_ALBUM);
+ break;
+ case MENU_MORE_ARTIST:
+ openLibrary(song, MediaUtils.TYPE_ARTIST);
+ break;
+ case MENU_MORE_GENRE:
+ openLibrary(song, MediaUtils.TYPE_GENRE);
break;
case MENU_ENQUEUE_ALBUM:
PlaybackService.get(this).enqueueFromSong(song, MediaUtils.TYPE_ALBUM);
@@ -396,7 +414,7 @@ public class FullPlaybackActivity extends SlidingPlaybackActivity
@Override
public boolean onSearchRequested()
{
- openLibrary(null);
+ openLibrary(null, -1);
return false;
}
@@ -639,7 +657,7 @@ public class FullPlaybackActivity extends SlidingPlaybackActivity
} else if (view == mCoverView) {
performAction(mCoverPressAction);
} else if (view.getId() == R.id.info_table) {
- openLibrary(mCurrentSong);
+ openLibrary(mCurrentSong, MediaUtils.TYPE_ALBUM);
} else {
super.onClick(view);
}
diff --git a/src/ch/blinkenlights/android/vanilla/LibraryActivity.java b/src/ch/blinkenlights/android/vanilla/LibraryActivity.java
index 2a13c3aa..dd69302b 100644
--- a/src/ch/blinkenlights/android/vanilla/LibraryActivity.java
+++ b/src/ch/blinkenlights/android/vanilla/LibraryActivity.java
@@ -185,7 +185,7 @@ public class LibraryActivity
pager.setCurrentItem(page);
}
- loadAlbumIntent(getIntent());
+ loadLimiterIntent(getIntent());
bindControlButtons();
}
@@ -230,22 +230,22 @@ public class LibraryActivity
}
/**
- * If the given intent has album data, set a limiter built from that
+ * If the given intent has type data, set a limiter built from that
* data.
*/
- private void loadAlbumIntent(Intent intent)
+ private void loadLimiterIntent(Intent intent)
{
- long albumId = intent.getLongExtra("albumId", -1);
- if (albumId != -1) {
- String[] fields = { intent.getStringExtra("artist"), intent.getStringExtra("album") };
- String data = String.format("album_id=%d", albumId);
- Limiter limiter = new Limiter(MediaUtils.TYPE_ALBUM, fields, data);
+ int type = intent.getIntExtra("type", -1);
+ long id = intent.getLongExtra("id", -1);
+ if (type != -1 && id != -1) {
+ MediaAdapter adapter = new MediaAdapter(this, type, null, null);
+ adapter.commitQuery(adapter.query());
+ Limiter limiter = adapter.buildLimiter(id);
int tab = mPagerAdapter.setLimiter(limiter);
if (tab == -1 || tab == mViewPager.getCurrentItem())
updateLimiterViews();
else
mViewPager.setCurrentItem(tab);
-
}
}
@@ -256,7 +256,7 @@ public class LibraryActivity
return;
checkForLaunch(intent);
- loadAlbumIntent(intent);
+ loadLimiterIntent(intent);
}
@Override
diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java b/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
index fc204b51..5cf84dd4 100644
--- a/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
+++ b/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
@@ -393,9 +393,9 @@ public abstract class PlaybackActivity extends Activity
static final int MENU_SORT = 1;
static final int MENU_PREFS = 2;
- static final int MENU_LIBRARY = 3;
- static final int MENU_PLAYBACK = 5;
- static final int MENU_SEARCH = 7;
+ static final int MENU_PLAYBACK = 3;
+ static final int MENU_SEARCH = 4;
+ static final int MENU_ENQUEUE = 7; // toplevel menu, has no action
static final int MENU_ENQUEUE_ALBUM = 8;
static final int MENU_ENQUEUE_ARTIST = 9;
static final int MENU_ENQUEUE_GENRE = 10;
@@ -409,6 +409,10 @@ public abstract class PlaybackActivity extends Activity
static final int MENU_SHARE = 18;
static final int MENU_GO_HOME = 19;
static final int MENU_PLUGINS = 20; // used in FullPlaybackActivity
+ static final int MENU_MORE = 21; // toplevel menu, has no own action
+ static final int MENU_MORE_ALBUM = 22;
+ static final int MENU_MORE_ARTIST = 23;
+ static final int MENU_MORE_GENRE = 24;
@Override
public boolean onCreateOptionsMenu(Menu menu)
@@ -633,15 +637,29 @@ public abstract class PlaybackActivity extends Activity
* Open the library activity.
*
* @param song If non-null, will open the library focused on this song.
+ * @param type the media type to switch to for 'song'
*/
- public void openLibrary(Song song)
+ public void openLibrary(Song song, int type)
{
Intent intent = new Intent(this, LibraryActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (song != null) {
- intent.putExtra("albumId", song.albumId);
- intent.putExtra("album", song.album);
- intent.putExtra("artist", song.artist);
+ long id = -1;
+ switch(type) {
+ case MediaUtils.TYPE_ARTIST:
+ id = song.artistId;
+ break;
+ case MediaUtils.TYPE_ALBUM:
+ id = song.albumId;
+ break;
+ case MediaUtils.TYPE_GENRE:
+ id = MediaUtils.queryGenreForSong(this, song.id);
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid media type " + type);
+ }
+ intent.putExtra("type", type);
+ intent.putExtra("id", id);
}
startActivity(intent);
}
diff --git a/src/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java b/src/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java
index 6a8d1a5b..672059c5 100644
--- a/src/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java
+++ b/src/ch/blinkenlights/android/vanilla/SlidingPlaybackActivity.java
@@ -331,7 +331,7 @@ public class SlidingPlaybackActivity extends PlaybackActivity
return; // not initialized yet
final int[] slide_visible = {MENU_HIDE_QUEUE, MENU_CLEAR_QUEUE, MENU_EMPTY_QUEUE, MENU_SAVE_QUEUE};
- final int[] slide_hidden = {MENU_SHOW_QUEUE, MENU_SORT, MENU_DELETE, MENU_ENQUEUE_ALBUM, MENU_ENQUEUE_ARTIST, MENU_ENQUEUE_GENRE, MENU_ADD_TO_PLAYLIST, MENU_SHARE};
+ final int[] slide_hidden = {MENU_SHOW_QUEUE, MENU_SORT, MENU_DELETE, MENU_ENQUEUE, MENU_MORE, MENU_ADD_TO_PLAYLIST, MENU_SHARE};
for (int id : slide_visible) {
MenuItem item = mMenu.findItem(id);