OSDN Git Service

Apollo: Add Greek translation
[android-x86/packages-apps-Eleven.git] / src / com / andrew / apollo / tasks / FetchAlbumImages.java
1 /**\r
2  * \r
3  */\r
4 \r
5 package com.andrew.apollo.tasks;\r
6 \r
7 import java.lang.ref.WeakReference;\r
8 import java.util.ArrayList;\r
9 \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
17 \r
18 import com.andrew.apollo.utils.ApolloUtils;\r
19 \r
20 import static com.andrew.apollo.Constants.ALBUM_IMAGE;\r
21 \r
22 /**\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
26  */\r
27 public class FetchAlbumImages {\r
28 \r
29     private final Context mContext;\r
30 \r
31     private final WeakReference<Context> contextReference;\r
32 \r
33     private final int choice;\r
34 \r
35     public FetchAlbumImages(Context context, int opt) {\r
36         contextReference = new WeakReference<Context>(context);\r
37         mContext = contextReference.get();\r
38         choice = opt;\r
39     }\r
40 \r
41     /**\r
42      * @return album names in default album sort order\r
43      */\r
44     public String[] getAlbumArtists() {\r
45         String[] projection = new String[] {\r
46                 BaseColumns._ID, AlbumColumns.ARTIST\r
47         };\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
52         if (c != null) {\r
53             int count = c.getCount();\r
54             if (count > 0) {\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
59                 }\r
60             }\r
61             c.close();\r
62             c = null;\r
63         }\r
64         return artistIds.toArray(new String[artistIds.size()]);\r
65     }\r
66 \r
67     /**\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
71      */\r
72     public class getAlbums extends AsyncTask<Void, Integer, String[]> {\r
73 \r
74         @Override\r
75         protected String[] doInBackground(Void... params) {\r
76             String[] projection = new String[] {\r
77                     BaseColumns._ID, AlbumColumns.ALBUM\r
78             };\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
83             if (c != null) {\r
84                 int count = c.getCount();\r
85                 if (count > 0) {\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
90                     }\r
91                 }\r
92                 c.close();\r
93                 c = null;\r
94             }\r
95             return artistIds.toArray(new String[artistIds.size()]);\r
96         }\r
97 \r
98         @Override\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
106                     }\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
111                 }\r
112             }\r
113             super.onPostExecute(result);\r
114         }\r
115     }\r
116 \r
117     /**\r
118      * Fetch album art\r
119      */\r
120     public void runTask() {\r
121         new getAlbums().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);\r
122     }\r
123 }\r