diff --git a/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java b/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java
index 67e31b31..4a8d7393 100644
--- a/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java
+++ b/src/ch/blinkenlights/android/vanilla/LibraryPagerAdapter.java
@@ -313,26 +313,26 @@ public class LibraryPagerAdapter
switch (type) {
case MediaUtils.TYPE_ARTIST:
- adapter = mArtistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ARTIST, null, looper);
+ adapter = mArtistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ARTIST, null, activity, looper);
mArtistAdapter.setExpandable(mSongsPosition != -1 || mAlbumsPosition != -1);
mArtistHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
break;
case MediaUtils.TYPE_ALBUM:
- adapter = mAlbumAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ALBUM, mPendingAlbumLimiter, looper);
+ adapter = mAlbumAdapter = new MediaAdapter(activity, MediaUtils.TYPE_ALBUM, mPendingAlbumLimiter, activity, looper);
mAlbumAdapter.setExpandable(mSongsPosition != -1);
mPendingAlbumLimiter = null;
mAlbumHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
break;
case MediaUtils.TYPE_SONG:
- adapter = mSongAdapter = new MediaAdapter(activity, MediaUtils.TYPE_SONG, mPendingSongLimiter, looper);
+ adapter = mSongAdapter = new MediaAdapter(activity, MediaUtils.TYPE_SONG, mPendingSongLimiter, activity, looper);
mPendingSongLimiter = null;
mSongHeader = header = (LinearLayout)inflater.inflate(R.layout.library_row_expandable, null);
break;
case MediaUtils.TYPE_PLAYLIST:
- adapter = mPlaylistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_PLAYLIST, null, looper);
+ adapter = mPlaylistAdapter = new MediaAdapter(activity, MediaUtils.TYPE_PLAYLIST, null, activity, looper);
break;
case MediaUtils.TYPE_GENRE:
- adapter = mGenreAdapter = new MediaAdapter(activity, MediaUtils.TYPE_GENRE, null, looper);
+ adapter = mGenreAdapter = new MediaAdapter(activity, MediaUtils.TYPE_GENRE, null, activity, looper);
mGenreAdapter.setExpandable(mSongsPosition != -1);
break;
case MediaUtils.TYPE_FILE:
diff --git a/src/ch/blinkenlights/android/vanilla/MediaAdapter.java b/src/ch/blinkenlights/android/vanilla/MediaAdapter.java
index ecc0e898..456aa903 100644
--- a/src/ch/blinkenlights/android/vanilla/MediaAdapter.java
+++ b/src/ch/blinkenlights/android/vanilla/MediaAdapter.java
@@ -68,6 +68,10 @@ public class MediaAdapter
/**
* A context to use.
*/
+ private final Context mContext;
+ /**
+ * The library activity to use.
+ */
private final LibraryActivity mActivity;
/**
* A LayoutInflater to use.
@@ -146,20 +150,30 @@ public class MediaAdapter
* Construct a MediaAdapter representing the given type
of
* media.
*
- * @param activity The LibraryActivity that will contain this adapter.
+ * @param context The Context used to access the content model.
* @param type The type of media to represent. Must be one of the
* Song.TYPE_* constants. This determines which content provider to query
* and what fields to display in the views.
* @param limiter An initial limiter to use
+ * @param activity The LibraryActivity that will contain this adapter - may be null
+ * @param looper The looper to use for image processing - may be null
+ *
*/
- public MediaAdapter(LibraryActivity activity, int type, Limiter limiter, Looper looper)
+ public MediaAdapter(Context context, int type, Limiter limiter, LibraryActivity activity, Looper looper)
{
+ mContext = context;
mActivity = activity;
mType = type;
mLimiter = limiter;
- mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mLooper = looper;
+ if (mActivity != null) {
+ mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ } else {
+ mInflater = null; // not running inside an activity
+ }
+
+
mCoverCacheType = MediaUtils.TYPE_INVALID;
String coverCacheKey = "0"; // SQL dummy entry
@@ -267,7 +281,7 @@ public class MediaAdapter
// Magic sort mode: sort by playcount
if (sortStringRaw == SORT_MAGIC_PLAYCOUNT) {
- ArrayList topSongs = (new PlayCountsHelper(mActivity)).getTopSongs(4096);
+ ArrayList topSongs = (new PlayCountsHelper(mContext)).getTopSongs(4096);
int sortWeight = -1 * topSongs.size(); // Sort mode is actually reversed (default: mostplayed -> leastplayed)
StringBuilder sb = new StringBuilder("CASE WHEN _id=0 THEN 0"); // include dummy statement in initial string -> topSongs may be empty
@@ -340,9 +354,9 @@ public class MediaAdapter
}
@Override
- public Object query()
+ public Cursor query()
{
- return buildQuery(mProjection, false).runQuery(mActivity.getContentResolver());
+ return buildQuery(mProjection, false).runQuery(mContext.getContentResolver());
}
@Override