summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/eleven/loaders/ArtistLoader.java
diff options
context:
space:
mode:
authorlinus_lee <llee@cyngn.com>2014-11-20 16:39:38 -0800
committerlinus_lee <llee@cyngn.com>2014-12-09 12:23:20 -0800
commit71810ebb2bf8fd792c92487fe87f9dbebefc8541 (patch)
tree42a4d11ba03a4c7af843edc0b45375b17c64053c /src/com/cyanogenmod/eleven/loaders/ArtistLoader.java
parentf199f983c9a5e2f4434b85273d1da0d609c33228 (diff)
downloadandroid_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.tar.gz
android_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.tar.bz2
android_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.zip
Update Eleven headers and namespace for open source
Change-Id: I82caf2ebf991998e67f546ff2ac7eaf2b30dc6be
Diffstat (limited to 'src/com/cyanogenmod/eleven/loaders/ArtistLoader.java')
-rw-r--r--src/com/cyanogenmod/eleven/loaders/ArtistLoader.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/eleven/loaders/ArtistLoader.java b/src/com/cyanogenmod/eleven/loaders/ArtistLoader.java
new file mode 100644
index 0000000..b5f57d4
--- /dev/null
+++ b/src/com/cyanogenmod/eleven/loaders/ArtistLoader.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2012 Andrew Neal
+ * Copyright (C) 2014 The CyanogenMod Project
+ * Licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
+ * or agreed to in writing, software distributed under the License is
+ * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+package com.cyanogenmod.eleven.loaders;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.provider.BaseColumns;
+import android.provider.MediaStore;
+import android.provider.MediaStore.Audio.ArtistColumns;
+
+import com.cyanogenmod.eleven.model.Artist;
+import com.cyanogenmod.eleven.sectionadapter.SectionCreator;
+import com.cyanogenmod.eleven.utils.Lists;
+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;
+
+/**
+ * Used to query {@link MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI} and
+ * return the artists on a user's device.
+ *
+ * @author Andrew Neal (andrewdneal@gmail.com)
+ */
+public class ArtistLoader extends SectionCreator.SimpleListLoader<Artist> {
+
+ /**
+ * The result
+ */
+ private ArrayList<Artist> mArtistsList = Lists.newArrayList();
+
+ /**
+ * The {@link Cursor} used to run the query.
+ */
+ private Cursor mCursor;
+
+ /**
+ * Constructor of <code>ArtistLoader</code>
+ *
+ * @param context The {@link Context} to use
+ */
+ public ArtistLoader(final Context context) {
+ super(context);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public List<Artist> loadInBackground() {
+ // Create the Cursor
+ mCursor = makeArtistCursor(getContext());
+ // Gather the data
+ if (mCursor != null && mCursor.moveToFirst()) {
+ do {
+ // Copy the artist id
+ final long id = mCursor.getLong(0);
+
+ // Copy the artist name
+ final String artistName = mCursor.getString(1);
+
+ // Copy the number of albums
+ final int albumCount = mCursor.getInt(2);
+
+ // Copy the number of songs
+ final int songCount = mCursor.getInt(3);
+
+ // as per designer's request, don't show unknown artist
+ if (MediaStore.UNKNOWN_STRING.equals(artistName)) {
+ continue;
+ }
+
+ // Create a new artist
+ final Artist artist = new Artist(id, artistName, songCount, albumCount);
+
+ mArtistsList.add(artist);
+ } while (mCursor.moveToNext());
+ }
+ // Close the cursor
+ if (mCursor != null) {
+ mCursor.close();
+ mCursor = null;
+ }
+
+ // requested artist ordering
+ String artistSortOrder = PreferenceUtils.getInstance(mContext).getArtistSortOrder();
+ // run a custom localized sort to try to fit items in to header buckets more nicely
+ if (shouldEvokeCustomSortRoutine(artistSortOrder)) {
+ mArtistsList = SortUtils.localizeSortList(mArtistsList, artistSortOrder);
+ }
+
+ return mArtistsList;
+ }
+
+ /**
+ * Evoke custom sorting routine if the sorting attribute is a String. MediaProvider's sort
+ * can be trusted in other instances
+ * @param sortOrder
+ * @return
+ */
+ private boolean shouldEvokeCustomSortRoutine(String sortOrder) {
+ return sortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_A_Z) ||
+ sortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_Z_A);
+ }
+
+ /**
+ * Creates the {@link Cursor} used to run the query.
+ *
+ * @param context The {@link Context} to use.
+ * @return The {@link Cursor} used to run the artist query.
+ */
+ public static final Cursor makeArtistCursor(final Context context) {
+ return context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
+ new String[] {
+ /* 0 */
+ BaseColumns._ID,
+ /* 1 */
+ ArtistColumns.ARTIST,
+ /* 2 */
+ ArtistColumns.NUMBER_OF_ALBUMS,
+ /* 3 */
+ ArtistColumns.NUMBER_OF_TRACKS
+ }, null, null, PreferenceUtils.getInstance(context).getArtistSortOrder());
+ }
+}