OSDN Git Service

overhaul
[android-x86/packages-apps-Eleven.git] / src / com / andrew / apollo / adapters / RecentlyAddedAdapter.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.Constants;\r
16 import com.andrew.apollo.R;\r
17 import com.andrew.apollo.list.fragments.RecentlyAddedFragment;\r
18 import com.andrew.apollo.tasks.LastfmGetAlbumImages;\r
19 import com.andrew.apollo.tasks.ViewHolderTask;\r
20 import com.andrew.apollo.utils.ApolloUtils;\r
21 import com.andrew.apollo.utils.MusicUtils;\r
22 import com.andrew.apollo.views.ViewHolderList;\r
23 import com.androidquery.AQuery;\r
24 \r
25 /**\r
26  * @author Andrew Neal\r
27  */\r
28 public class RecentlyAddedAdapter extends SimpleCursorAdapter implements Constants {\r
29 \r
30     private AnimationDrawable mPeakOneAnimation, mPeakTwoAnimation;\r
31 \r
32     private WeakReference<ViewHolderList> holderReference;\r
33 \r
34     public RecentlyAddedAdapter(Context context, int layout, Cursor c, String[] from, int[] to,\r
35             int flags) {\r
36         super(context, layout, c, from, to, flags);\r
37     }\r
38 \r
39     @Override\r
40     public View getView(int position, View convertView, ViewGroup parent) {\r
41         final View view = super.getView(position, convertView, parent);\r
42         // ViewHolderList\r
43         ViewHolderList viewholder;\r
44 \r
45         if (view != null) {\r
46 \r
47             viewholder = new ViewHolderList(view);\r
48             holderReference = new WeakReference<ViewHolderList>(viewholder);\r
49             view.setTag(holderReference.get());\r
50 \r
51         } else {\r
52             viewholder = (ViewHolderList)convertView.getTag();\r
53         }\r
54         // AQuery\r
55         final AQuery aq = new AQuery(convertView);\r
56 \r
57         // Track name\r
58         String trackName = mCursor.getString(RecentlyAddedFragment.mTitleIndex);\r
59         holderReference.get().mViewHolderLineOne.setText(trackName);\r
60 \r
61         // Artist name\r
62         String artistName = mCursor.getString(RecentlyAddedFragment.mArtistIndex);\r
63         holderReference.get().mViewHolderLineTwo.setText(artistName);\r
64 \r
65         // Album name\r
66         String albumName = mCursor.getString(RecentlyAddedFragment.mAlbumIndex);\r
67 \r
68         // Match positions\r
69         holderReference.get().position = position;\r
70         if (aq.shouldDelay(position, view, parent, "")) {\r
71             holderReference.get().mViewHolderImage.setImageDrawable(null);\r
72         } else {\r
73             // Check for missing artwork and cache then cache it\r
74             if (ApolloUtils.getImageURL(albumName, ALBUM_IMAGE, mContext) == null) {\r
75                 new LastfmGetAlbumImages(mContext, null, 0).executeOnExecutor(\r
76                         AsyncTask.THREAD_POOL_EXECUTOR, artistName, albumName);\r
77             } else {\r
78                 new ViewHolderTask(holderReference.get(), null, position, mContext, 1, 0,\r
79                         holderReference.get().mViewHolderImage).executeOnExecutor(\r
80                         AsyncTask.THREAD_POOL_EXECUTOR, albumName);\r
81             }\r
82         }\r
83 \r
84         holderReference.get().mQuickContext.setVisibility(View.GONE);\r
85 \r
86         // Now playing indicator\r
87         long currentaudioid = MusicUtils.getCurrentAudioId();\r
88         long audioid = mCursor.getLong(RecentlyAddedFragment.mMediaIdIndex);\r
89         if (currentaudioid == audioid) {\r
90             holderReference.get().mPeakOne.setImageResource(R.anim.peak_meter_1);\r
91             holderReference.get().mPeakTwo.setImageResource(R.anim.peak_meter_2);\r
92             mPeakOneAnimation = (AnimationDrawable)holderReference.get().mPeakOne.getDrawable();\r
93             mPeakTwoAnimation = (AnimationDrawable)holderReference.get().mPeakTwo.getDrawable();\r
94             try {\r
95                 if (MusicUtils.mService.isPlaying()) {\r
96                     mPeakOneAnimation.start();\r
97                     mPeakTwoAnimation.start();\r
98                 } else {\r
99                     mPeakOneAnimation.stop();\r
100                     mPeakTwoAnimation.stop();\r
101                 }\r
102             } catch (RemoteException e) {\r
103                 e.printStackTrace();\r
104             }\r
105         } else {\r
106             holderReference.get().mPeakOne.setImageResource(0);\r
107             holderReference.get().mPeakTwo.setImageResource(0);\r
108         }\r
109         return view;\r
110     }\r
111 }\r