OSDN Git Service

b7f22b171ab38d5b1c30b412144c3581ec12ec26
[android-x86/packages-apps-Eleven.git] / src / com / andrew / apollo / adapters / AlbumAdapter.java
1 \r
2 package com.andrew.apollo.adapters;\r
3 \r
4 import java.lang.ref.WeakReference;\r
5 \r
6 import android.content.Context;\r
7 import android.database.Cursor;\r
8 import android.graphics.drawable.AnimationDrawable;\r
9 import android.os.AsyncTask;\r
10 import android.os.RemoteException;\r
11 import android.support.v4.widget.SimpleCursorAdapter;\r
12 import android.view.View;\r
13 import android.view.ViewGroup;\r
14 \r
15 import com.andrew.apollo.R;\r
16 import com.andrew.apollo.grid.fragments.AlbumsFragment;\r
17 import com.andrew.apollo.tasks.LastfmGetAlbumImages;\r
18 import com.andrew.apollo.tasks.ViewHolderTask;\r
19 import com.andrew.apollo.utils.ApolloUtils;\r
20 import com.andrew.apollo.utils.MusicUtils;\r
21 import com.andrew.apollo.views.ViewHolderGrid;\r
22 import com.androidquery.AQuery;\r
23 \r
24 import static com.andrew.apollo.Constants.ALBUM_IMAGE;\r
25 \r
26 /**\r
27  * @author Andrew Neal\r
28  */\r
29 public class AlbumAdapter extends SimpleCursorAdapter {\r
30 \r
31     private AnimationDrawable mPeakOneAnimation, mPeakTwoAnimation;\r
32 \r
33     private WeakReference<ViewHolderGrid> holderReference;\r
34 \r
35     public AlbumAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {\r
36         super(context, layout, c, from, to, flags);\r
37     }\r
38 \r
39     @Override\r
40     public View getView(final int position, View convertView, ViewGroup parent) {\r
41         final View view = super.getView(position, convertView, parent);\r
42         // ViewHolderGrid\r
43         final ViewHolderGrid viewholder;\r
44 \r
45         if (view != null) {\r
46 \r
47             viewholder = new ViewHolderGrid(view);\r
48             holderReference = new WeakReference<ViewHolderGrid>(viewholder);\r
49             view.setTag(holderReference.get());\r
50 \r
51         } else {\r
52             viewholder = (ViewHolderGrid)convertView.getTag();\r
53         }\r
54 \r
55         // AQuery\r
56         final AQuery aq = new AQuery(view);\r
57 \r
58         // Album name\r
59         String albumName = mCursor.getString(AlbumsFragment.mAlbumNameIndex);\r
60         holderReference.get().mViewHolderLineOne.setText(albumName);\r
61 \r
62         // Artist name\r
63         String artistName = mCursor.getString(AlbumsFragment.mArtistNameIndex);\r
64         holderReference.get().mViewHolderLineTwo.setText(artistName);\r
65 \r
66         // Match positions\r
67         holderReference.get().position = position;\r
68         if (aq.shouldDelay(position, view, parent, "")) {\r
69             holderReference.get().mViewHolderImage.setImageDrawable(null);\r
70         } else {\r
71             // Check for missing album images and cache them\r
72             if (ApolloUtils.getImageURL(albumName, ALBUM_IMAGE, mContext) == null) {\r
73                 new LastfmGetAlbumImages(mContext, null, 0).executeOnExecutor(\r
74                         AsyncTask.THREAD_POOL_EXECUTOR, artistName, albumName);\r
75             } else {\r
76                 new ViewHolderTask(null, holderReference.get(), position, mContext, 1, 1,\r
77                         holderReference.get().mViewHolderImage).executeOnExecutor(\r
78                         AsyncTask.THREAD_POOL_EXECUTOR, albumName);\r
79             }\r
80         }\r
81         // Now playing indicator\r
82         long currentalbumid = MusicUtils.getCurrentAlbumId();\r
83         long albumid = mCursor.getLong(AlbumsFragment.mAlbumIdIndex);\r
84         if (currentalbumid == albumid) {\r
85             holderReference.get().mPeakOne.setImageResource(R.anim.peak_meter_1);\r
86             holderReference.get().mPeakTwo.setImageResource(R.anim.peak_meter_2);\r
87             mPeakOneAnimation = (AnimationDrawable)holderReference.get().mPeakOne.getDrawable();\r
88             mPeakTwoAnimation = (AnimationDrawable)holderReference.get().mPeakTwo.getDrawable();\r
89             try {\r
90                 if (MusicUtils.mService.isPlaying()) {\r
91                     mPeakOneAnimation.start();\r
92                     mPeakTwoAnimation.start();\r
93                 } else {\r
94                     mPeakOneAnimation.stop();\r
95                     mPeakTwoAnimation.stop();\r
96                 }\r
97             } catch (RemoteException e) {\r
98                 e.printStackTrace();\r
99             }\r
100         } else {\r
101             holderReference.get().mPeakOne.setImageResource(0);\r
102             holderReference.get().mPeakTwo.setImageResource(0);\r
103         }\r
104         return view;\r
105     }\r
106 }\r