Add option to jump to albums, artists and genres in fullplaybackactivity

This commit is contained in:
Adrian Ulrich 2017-04-02 17:08:25 +02:00
parent f1aa25556f
commit ffe0fe55df
5 changed files with 63 additions and 25 deletions

View File

@ -275,6 +275,8 @@ THE SOFTWARE.
<string name="enqueue_current_album">Enqueue album</string>
<string name="enqueue_current_artist">Enqueue artist</string>
<string name="enqueue_current_genre">Enqueue genre</string>
<string name="enqueue_current">Enqueue…</string>
<string name="more_from_current">More from…</string>
<string name="empty_the_queue">Empty queue</string>
<string name="show_queue">Show queue</string>
<string name="hide_queue">Hide queue</string>

View File

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

View File

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

View File

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

View File

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