5 package com.andrew.apollo.tasks;
\r
7 import java.lang.ref.WeakReference;
\r
8 import java.util.ArrayList;
\r
10 import android.content.Context;
\r
11 import android.database.Cursor;
\r
12 import android.net.Uri;
\r
13 import android.os.AsyncTask;
\r
14 import android.provider.BaseColumns;
\r
15 import android.provider.MediaStore.Audio;
\r
16 import android.provider.MediaStore.Audio.AlbumColumns;
\r
18 import com.andrew.apollo.utils.ApolloUtils;
\r
20 import static com.andrew.apollo.Constants.ALBUM_IMAGE;
\r
23 * @author Andrew Neal
\r
24 * @returns A String[] of all the artists and albums on a device in default
\r
25 * album order that are then fed into the Last.fm API
\r
27 public class FetchAlbumImages {
\r
29 private final Context mContext;
\r
31 private final WeakReference<Context> contextReference;
\r
33 private final int choice;
\r
35 public FetchAlbumImages(Context context, int opt) {
\r
36 contextReference = new WeakReference<Context>(context);
\r
37 mContext = contextReference.get();
\r
42 * @return album names in default album sort order
\r
44 public String[] getAlbumArtists() {
\r
45 String[] projection = new String[] {
\r
46 BaseColumns._ID, AlbumColumns.ARTIST
\r
48 String sortOrder = Audio.Albums.DEFAULT_SORT_ORDER;
\r
49 Uri uri = Audio.Albums.EXTERNAL_CONTENT_URI;
\r
50 Cursor c = mContext.getContentResolver().query(uri, projection, null, null, sortOrder);
\r
51 ArrayList<String> artistIds = new ArrayList<String>();
\r
53 int count = c.getCount();
\r
55 final int ARTIST_IDX = c.getColumnIndex(AlbumColumns.ARTIST);
\r
56 for (int i = 0; i < count; i++) {
\r
57 c.moveToPosition(i);
\r
58 artistIds.add(c.getString(ARTIST_IDX));
\r
64 return artistIds.toArray(new String[artistIds.size()]);
\r
68 * @author Andrew Neal
\r
69 * @returns artist names in default album sort order that are then fed into
\r
70 * the Last.fm API along with @getAlbumArtists()
\r
72 public class getAlbums extends AsyncTask<Void, Integer, String[]> {
\r
75 protected String[] doInBackground(Void... params) {
\r
76 String[] projection = new String[] {
\r
77 BaseColumns._ID, AlbumColumns.ALBUM
\r
79 String sortOrder = Audio.Albums.DEFAULT_SORT_ORDER;
\r
80 Uri uri = Audio.Albums.EXTERNAL_CONTENT_URI;
\r
81 Cursor c = mContext.getContentResolver().query(uri, projection, null, null, sortOrder);
\r
82 ArrayList<String> artistIds = new ArrayList<String>();
\r
84 int count = c.getCount();
\r
86 final int ARTIST_IDX = c.getColumnIndex(AlbumColumns.ALBUM);
\r
87 for (int i = 0; i < count; i++) {
\r
88 c.moveToPosition(i);
\r
89 artistIds.add(c.getString(ARTIST_IDX));
\r
95 return artistIds.toArray(new String[artistIds.size()]);
\r
99 protected void onPostExecute(String[] result) {
\r
100 for (int i = 0; i < result.length; i++) {
\r
101 // Only download images we don't already have
\r
102 if (choice == 0 && result != null) {
\r
103 if (ApolloUtils.getImageURL(result[i], ALBUM_IMAGE, mContext) == null) {
\r
104 new LastfmGetAlbumImages(mContext, null, 0).executeOnExecutor(
\r
105 AsyncTask.THREAD_POOL_EXECUTOR, getAlbumArtists()[i], result[i]);
\r
107 } else if (choice == 1 && result != null) {
\r
108 // Unless the user wants to grab new images
\r
109 new LastfmGetAlbumImages(mContext, null, 0).executeOnExecutor(
\r
110 AsyncTask.THREAD_POOL_EXECUTOR, getAlbumArtists()[i], result[i]);
\r
113 super.onPostExecute(result);
\r
120 public void runTask() {
\r
121 new getAlbums().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);
\r