MirrorLink: do not pre-cache root

This commit is contained in:
Adrian Ulrich 2015-12-21 17:30:06 +01:00
parent 05c6f013d0
commit 6df61daf2e

View File

@ -70,13 +70,7 @@ public class MirrorLinkMediaBrowserService extends MediaBrowserService implement
private MediaAdapter mPlaylistAdapter; private MediaAdapter mPlaylistAdapter;
private MediaAdapter mGenreAdapter; private MediaAdapter mGenreAdapter;
private MediaAdapter[] mMediaAdapters = new MediaAdapter[MediaUtils.TYPE_GENRE + 1]; private MediaAdapter[] mMediaAdapters = new MediaAdapter[MediaUtils.TYPE_GENRE + 1];
private List<MediaBrowser.MediaItem> mAlbums = new ArrayList<MediaBrowser.MediaItem>(); private List<MediaBrowser.MediaItem> mQueryResult = new ArrayList<MediaBrowser.MediaItem>();
private List<MediaBrowser.MediaItem> mArtists = new ArrayList<MediaBrowser.MediaItem>();
private List<MediaBrowser.MediaItem> mSongs = new ArrayList<MediaBrowser.MediaItem>();
private List<MediaBrowser.MediaItem> mPlaylists = new ArrayList<MediaBrowser.MediaItem>();
private List<MediaBrowser.MediaItem> mGenres = new ArrayList<MediaBrowser.MediaItem>();
private List<MediaBrowser.MediaItem> mFiltered = new ArrayList<MediaBrowser.MediaItem>();
private boolean mCatalogReady = false;
private final List<MediaBrowser.MediaItem> mMediaRoot = new ArrayList<MediaBrowser.MediaItem>(); private final List<MediaBrowser.MediaItem> mMediaRoot = new ArrayList<MediaBrowser.MediaItem>();
@ -347,36 +341,31 @@ public class MirrorLinkMediaBrowserService extends MediaBrowserService implement
protected Integer doInBackground(Void... params) { protected Integer doInBackground(Void... params) {
int result = ASYNCTASK_FAILED; int result = ASYNCTASK_FAILED;
try { try {
if(!mCatalogReady) { mQueryResult.clear();
runQuery(mArtists, MediaUtils.TYPE_ARTIST , mArtistAdapter); clearLimiters();
runQuery(mAlbums, MediaUtils.TYPE_ALBUM, mAlbumAdapter); if(parent.isTopAdapter()) {
runQuery(mSongs, MediaUtils.TYPE_SONG, mSongAdapter); runQuery(mQueryResult, parent.mType, mMediaAdapters[parent.mType]);
runQuery(mGenres, MediaUtils.TYPE_GENRE, mGenreAdapter); } else if (limiter != null) {
runQuery(mPlaylists, MediaUtils.TYPE_PLAYLIST, mPlaylistAdapter);
mCatalogReady = true;
}
if(limiter != null) {
mFiltered.clear();
switch(limiter.type) { switch(limiter.type) {
case MediaUtils.TYPE_ALBUM: case MediaUtils.TYPE_ALBUM:
mSongAdapter.setLimiter(limiter); mSongAdapter.setLimiter(limiter);
runQuery(mFiltered, MediaUtils.TYPE_SONG, mSongAdapter); runQuery(mQueryResult, MediaUtils.TYPE_SONG, mSongAdapter);
break; break;
case MediaUtils.TYPE_ARTIST: case MediaUtils.TYPE_ARTIST:
mAlbumAdapter.setLimiter(limiter); mAlbumAdapter.setLimiter(limiter);
runQuery(mFiltered, MediaUtils.TYPE_ALBUM, mAlbumAdapter); runQuery(mQueryResult, MediaUtils.TYPE_ALBUM, mAlbumAdapter);
break; break;
case MediaUtils.TYPE_SONG: case MediaUtils.TYPE_SONG:
mSongAdapter.setLimiter(limiter); mSongAdapter.setLimiter(limiter);
runQuery(mFiltered, MediaUtils.TYPE_SONG, mSongAdapter); runQuery(mQueryResult, MediaUtils.TYPE_SONG, mSongAdapter);
break; break;
case MediaUtils.TYPE_PLAYLIST: case MediaUtils.TYPE_PLAYLIST:
mPlaylistAdapter.setLimiter(limiter); mPlaylistAdapter.setLimiter(limiter);
runQuery(mFiltered, MediaUtils.TYPE_PLAYLIST, mPlaylistAdapter); runQuery(mQueryResult, MediaUtils.TYPE_PLAYLIST, mPlaylistAdapter);
break; break;
case MediaUtils.TYPE_GENRE: case MediaUtils.TYPE_GENRE:
mSongAdapter.setLimiter(limiter); mSongAdapter.setLimiter(limiter);
runQuery(mFiltered, MediaUtils.TYPE_SONG, mSongAdapter); runQuery(mQueryResult, MediaUtils.TYPE_SONG, mSongAdapter);
break; break;
} }
} }
@ -391,32 +380,7 @@ public class MirrorLinkMediaBrowserService extends MediaBrowserService implement
protected void onPostExecute(Integer current) { protected void onPostExecute(Integer current) {
List<MediaBrowser.MediaItem> items = null; List<MediaBrowser.MediaItem> items = null;
if (result != null) { if (result != null) {
if(parent.isTopAdapter()) { items = mQueryResult;
switch(parent.mType) {
case MediaUtils.TYPE_ALBUM:
items = mAlbums;
mAlbumAdapter.setLimiter(null);
break;
case MediaUtils.TYPE_ARTIST:
items = mArtists;
mArtistAdapter.setLimiter(null);
break;
case MediaUtils.TYPE_SONG:
items = mSongs;
mSongAdapter.setLimiter(null);
break;
case MediaUtils.TYPE_PLAYLIST:
items = mPlaylists;
mPlaylistAdapter.setLimiter(null);
break;
case MediaUtils.TYPE_GENRE:
items = mGenres;
mGenreAdapter.setLimiter(null);
break;
}
} else {
items = mFiltered;
}
if (current == ASYNCTASK_SUCCEEDED) { if (current == ASYNCTASK_SUCCEEDED) {
result.sendResult(items); result.sendResult(items);
} else { } else {
@ -427,6 +391,13 @@ public class MirrorLinkMediaBrowserService extends MediaBrowserService implement
}.execute(); }.execute();
} }
private void clearLimiters() {
for(MediaAdapter adapter : mMediaAdapters) {
adapter.setLimiter(null);
}
}
private Uri getArtUri(int mediaType, String id) { private Uri getArtUri(int mediaType, String id) {
switch(mediaType) { switch(mediaType) {
case MediaUtils.TYPE_SONG: case MediaUtils.TYPE_SONG:
@ -462,12 +433,8 @@ public class MirrorLinkMediaBrowserService extends MediaBrowserService implement
return; return;
} }
final int flags = (mediaType != MediaUtils.TYPE_SONG) final int flags = (mediaType == MediaUtils.TYPE_SONG || mediaType == MediaUtils.TYPE_PLAYLIST) ? MediaBrowser.MediaItem.FLAG_PLAYABLE : MediaBrowser.MediaItem.FLAG_BROWSABLE;
&& (mediaType != MediaUtils.TYPE_PLAYLIST) ?
MediaBrowser.MediaItem.FLAG_BROWSABLE : MediaBrowser.MediaItem.FLAG_PLAYABLE;
final int count = cursor.getCount(); final int count = cursor.getCount();
for (int j = 0; j != count; ++j) { for (int j = 0; j != count; ++j) {
cursor.moveToPosition(j); cursor.moveToPosition(j);
final String id = cursor.getString(0); final String id = cursor.getString(0);