summaryrefslogtreecommitdiffstats
path: root/src/org/lineageos/eleven/loaders/ArtistLoader.java
diff options
context:
space:
mode:
authorMichael Bestas <mkbestas@lineageos.org>2018-01-22 21:02:42 +0200
committerMichael Bestas <mkbestas@lineageos.org>2018-01-23 19:35:52 +0200
commita907407e035b52e8dcdd4ac3ae48b533c7942d5a (patch)
treeef031b8478effd2fd828495832260359486950f4 /src/org/lineageos/eleven/loaders/ArtistLoader.java
parentda200d369e4e43f2587273e9dd7af9c91048cf68 (diff)
downloadandroid_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.tar.gz
android_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.tar.bz2
android_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.zip
Eleven: rebrand step 1: update paths
Change-Id: Iab35e4024e20c48e7439e78d1c6efe0ef4f730ca
Diffstat (limited to 'src/org/lineageos/eleven/loaders/ArtistLoader.java')
-rw-r--r--src/org/lineageos/eleven/loaders/ArtistLoader.java145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/org/lineageos/eleven/loaders/ArtistLoader.java b/src/org/lineageos/eleven/loaders/ArtistLoader.java
new file mode 100644
index 0000000..4b04030
--- /dev/null
+++ b/src/org/lineageos/eleven/loaders/ArtistLoader.java
@@ -0,0 +1,145 @@
+/*
+ * 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.MediaStore;
+import android.provider.MediaStore.Audio.Artists;
+
+import com.cyanogenmod.eleven.model.Artist;
+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 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();
+
+ /**
+ * 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
+ Cursor cursor = makeArtistCursor(getContext());
+ // Gather the data
+ if (cursor != null && cursor.moveToFirst()) {
+ do {
+ // Copy the artist id
+ final long id = cursor.getLong(0);
+
+ // Copy the artist name
+ final String artistName = cursor.getString(1);
+
+ // Copy the number of albums
+ final int albumCount = cursor.getInt(2);
+
+ // Copy the number of songs
+ final int songCount = cursor.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);
+
+ if (cursor instanceof SortedCursor) {
+ artist.mBucketLabel = (String)((SortedCursor) cursor).getExtraData();
+ }
+
+ mArtistsList.add(artist);
+ } while (cursor.moveToNext());
+ }
+ // Close the cursor
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+
+ return mArtistsList;
+ }
+
+ /**
+ * For string-based sorts, return the localized store sort parameter, otherwise return null
+ * @param sortOrder the song ordering preference selected by the user
+ */
+ private static LocalizedStore.SortParameter getSortParameter(String sortOrder) {
+ if (sortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_A_Z) ||
+ sortOrder.equals(SortOrder.ArtistSortOrder.ARTIST_Z_A)) {
+ return LocalizedStore.SortParameter.Artist;
+ }
+
+ return null;
+ }
+ /**
+ * 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) {
+ // requested artist ordering
+ final String artistSortOrder = PreferenceUtils.getInstance(context).getArtistSortOrder();
+
+ Cursor cursor = context.getContentResolver().query(Artists.EXTERNAL_CONTENT_URI,
+ new String[] {
+ /* 0 */
+ Artists._ID,
+ /* 1 */
+ Artists.ARTIST,
+ /* 2 */
+ Artists.NUMBER_OF_ALBUMS,
+ /* 3 */
+ Artists.NUMBER_OF_TRACKS
+ }, null, null, artistSortOrder);
+
+ // if our sort is a localized-based sort, grab localized data from the store
+ final SortParameter sortParameter = getSortParameter(artistSortOrder);
+ if (sortParameter != null && cursor != null) {
+ final boolean descending = MusicUtils.isSortOrderDesending(artistSortOrder);
+ return LocalizedStore.getInstance(context).getLocalizedSort(cursor, Artists._ID,
+ SortParameter.Artist, sortParameter, descending, true);
+ }
+
+ return cursor;
+ }
+}