/**
*
*/
package fm.last.android.widget;
import java.net.URL;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
import fm.last.android.R;
import fm.last.android.utils.AsyncTaskEx;
import fm.last.util.UrlUtil;
/**
* @author sam
*
*/
public class AlbumArt extends ImageView {
private FetchArtTask _fetchTask;
private Bitmap _defaultImage;
private Bitmap _bitmap;
public AlbumArt(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
setDefaultImageResource(R.drawable.no_artwork);
}
public Bitmap getBitmap() {
return _bitmap;
}
@Override
public void setImageBitmap(Bitmap bmp) {
super.setImageBitmap(bmp);
_bitmap = bmp;
}
public void clear() {
setImageBitmap(_defaultImage);
}
public void cancel() {
if (_fetchTask != null)
_fetchTask.cancel(true);
}
public void setDefaultImageResource(int res) {
_defaultImage = BitmapFactory.decodeResource(getResources(), res);
setImageBitmap(_defaultImage);
}
public void fetch(String URL) {
setImageBitmap(_defaultImage);
if (_fetchTask != null)
_fetchTask.cancel(true);
_fetchTask = new FetchArtTask(URL);
_fetchTask.execute((Void) null);
}
private class FetchArtTask extends AsyncTaskEx<Void, Void, Boolean> {
Bitmap mBitmap = null;
String mURL = null;
public FetchArtTask(String url) {
super();
mURL = url;
Log.i("Last.fm", "Fetching art: " + url);
}
@Override
public Boolean doInBackground(Void... params) {
boolean success = false;
try {
mBitmap = UrlUtil.getImage(new URL(mURL));
success = true;
} catch (OutOfMemoryError e) {
mURL.replace("/_/", "/300x300/");
try {
mBitmap = UrlUtil.getImage(new URL(mURL));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Error e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
success = true;
} catch (Exception e) {
e.printStackTrace();
}
return success;
}
@Override
public void onPostExecute(Boolean result) {
if (result && !isCancelled()) {
setImageBitmap(mBitmap);
_fetchTask = null;
}
}
}
}