X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcom%2Fcyanogenmod%2Feleven%2Floaders%2FAlbumLoader.java;h=5532a350d96d523ae803f053f64cdd72aea45b80;hb=7124d4f4b75906869f3002906bc8dbb0d2fd2d3c;hp=b66145a079c8d17cf20d7f2049d69f16e026fc16;hpb=71810ebb2bf8fd792c92487fe87f9dbebefc8541;p=android-x86%2Fpackages-apps-Eleven.git diff --git a/src/com/cyanogenmod/eleven/loaders/AlbumLoader.java b/src/com/cyanogenmod/eleven/loaders/AlbumLoader.java index b66145a..5532a35 100644 --- a/src/com/cyanogenmod/eleven/loaders/AlbumLoader.java +++ b/src/com/cyanogenmod/eleven/loaders/AlbumLoader.java @@ -15,16 +15,19 @@ package com.cyanogenmod.eleven.loaders; import android.content.Context; import android.database.Cursor; +import android.net.Uri; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AlbumColumns; import com.cyanogenmod.eleven.model.Album; +import com.cyanogenmod.eleven.provider.LocalizedStore; +import com.cyanogenmod.eleven.provider.LocalizedStore.SortParameter; import com.cyanogenmod.eleven.sectionadapter.SectionCreator; import com.cyanogenmod.eleven.utils.Lists; +import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.PreferenceUtils; import com.cyanogenmod.eleven.utils.SortOrder; -import com.cyanogenmod.eleven.utils.SortUtils; import java.util.ArrayList; import java.util.List; @@ -48,12 +51,25 @@ public class AlbumLoader extends SectionCreator.SimpleListLoader { private Cursor mCursor; /** - * Constructor of AlbumLoader - * + * Additional selection filter + */ + protected Long mArtistId; + + /** * @param context The {@link Context} to use */ public AlbumLoader(final Context context) { + this(context, null); + } + + /** + * @param context The {@link Context} to use + * @param artistId The artistId to filter against or null if none + */ + public AlbumLoader(final Context context, final Long artistId) { super(context); + + mArtistId = artistId; } /** @@ -62,7 +78,7 @@ public class AlbumLoader extends SectionCreator.SimpleListLoader { @Override public List loadInBackground() { // Create the Cursor - mCursor = makeAlbumCursor(getContext()); + mCursor = makeAlbumCursor(getContext(), mArtistId); // Gather the data if (mCursor != null && mCursor.moveToFirst()) { do { @@ -89,6 +105,10 @@ public class AlbumLoader extends SectionCreator.SimpleListLoader { // Create a new album final Album album = new Album(id, albumName, artist, songCount, year); + if (mCursor instanceof SortedCursor) { + album.mBucketLabel = (String)((SortedCursor)mCursor).getExtraData(); + } + // Add everything up mAlbumsList.add(album); } while (mCursor.moveToNext()); @@ -99,37 +119,40 @@ public class AlbumLoader extends SectionCreator.SimpleListLoader { mCursor = null; } - // requested album ordering - String albumSortOrder = PreferenceUtils.getInstance(mContext).getAlbumSortOrder(); - - // run a custom localized sort to try to fit items in to header buckets more nicely - if (shouldEvokeCustomSortRoutine(albumSortOrder)) { - mAlbumsList = SortUtils.localizeSortList(mAlbumsList, albumSortOrder); - } - return mAlbumsList; } /** - * Evoke custom sorting routine if the sorting attribute is a String. MediaProvider's sort - * can be trusted in other instances - * @param sortOrder - * @return + * For string-based sorts, return the localized store sort parameter, otherwise return null + * @param sortOrder the song ordering preference selected by the user */ - private boolean shouldEvokeCustomSortRoutine(String sortOrder) { - return sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_A_Z) || - sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_Z_A) || - sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_ARTIST); + private static LocalizedStore.SortParameter getSortParameter(String sortOrder) { + if (sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_A_Z) || + sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_Z_A)) { + return LocalizedStore.SortParameter.Album; + } else if (sortOrder.equals(SortOrder.AlbumSortOrder.ALBUM_ARTIST)) { + return LocalizedStore.SortParameter.Artist; + } + + return null; } /** * Creates the {@link Cursor} used to run the query. * * @param context The {@link Context} to use. + * @param artistId The artistId we want to find albums for or null if we want all albums * @return The {@link Cursor} used to run the album query. */ - public static final Cursor makeAlbumCursor(final Context context) { - return context.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, + public static final Cursor makeAlbumCursor(final Context context, final Long artistId) { + // requested album ordering + final String albumSortOrder = PreferenceUtils.getInstance(context).getAlbumSortOrder(); + Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; + if (artistId != null) { + uri = MediaStore.Audio.Artists.Albums.getContentUri("external", artistId); + } + + Cursor cursor = context.getContentResolver().query(uri, new String[] { /* 0 */ BaseColumns._ID, @@ -141,6 +164,16 @@ public class AlbumLoader extends SectionCreator.SimpleListLoader { AlbumColumns.NUMBER_OF_SONGS, /* 4 */ AlbumColumns.FIRST_YEAR - }, null, null, PreferenceUtils.getInstance(context).getAlbumSortOrder()); + }, null, null, albumSortOrder); + + // if our sort is a localized-based sort, grab localized data from the store + final SortParameter sortParameter = getSortParameter(albumSortOrder); + if (sortParameter != null && cursor != null) { + final boolean descending = MusicUtils.isSortOrderDesending(albumSortOrder); + return LocalizedStore.getInstance(context).getLocalizedSort(cursor, BaseColumns._ID, + SortParameter.Album, sortParameter, descending, artistId == null); + } + + return cursor; } }