package com.aviary.android.feather.async_tasks; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import android.os.AsyncTask; import com.aviary.android.feather.Constants; import com.aviary.android.feather.library.log.LoggerFactory; import com.aviary.android.feather.library.log.LoggerFactory.Logger; import com.aviary.android.feather.library.log.LoggerFactory.LoggerType; import com.aviary.android.feather.library.utils.DecodeUtils; import com.aviary.android.feather.library.utils.ImageLoader; import com.aviary.android.feather.library.utils.ImageLoader.ImageSizes; // TODO: Auto-generated Javadoc /** * Load an Image bitmap asynchronous. * * @author alessandro */ public class DownloadImageAsyncTask extends AsyncTask<Context, Void, Bitmap> { /** * The listener interface for receiving onImageDownload events. The class that is interested in processing a onImageDownload * event implements this interface, and the object created with that class is registered with a component using the component's * <code>addOnImageDownloadListener<code> method. When * the onImageDownload event occurs, that object's appropriate * method is invoked. * * @see OnImageDownloadEvent */ public static interface OnImageDownloadListener { /** * On download start. */ void onDownloadStart(); /** * On download complete. * * @param result * the result */ void onDownloadComplete( Bitmap result, ImageSizes sizes ); /** * On download error. * * @param error * the error */ void onDownloadError( String error ); }; private OnImageDownloadListener mListener; private Uri mUri; private String error; private ImageLoader.ImageSizes mImageSize; /** * Instantiates a new download image async task. * * @param uri * the uri */ public DownloadImageAsyncTask( Uri uri ) { super(); mUri = uri; } /** * Sets the on load listener. * * @param listener * the new on load listener */ public void setOnLoadListener( OnImageDownloadListener listener ) { mListener = listener; } @Override protected void onPreExecute() { super.onPreExecute(); if ( mListener != null ) mListener.onDownloadStart(); mImageSize = new ImageLoader.ImageSizes(); } @Override protected Bitmap doInBackground( Context... params ) { Context context = params[0]; try { final int max_size = Constants.getManagedMaxImageSize(); return DecodeUtils.decode( context, mUri, max_size, max_size, mImageSize ); } catch ( Exception e ) { Logger logger = LoggerFactory.getLogger( "DownloadImageTask", LoggerType.ConsoleLoggerType ); logger.error( "error", e.getMessage() ); error = e.getMessage(); } return null; } @Override protected void onPostExecute( Bitmap result ) { super.onPostExecute( result ); if ( mListener != null ) { if ( result != null ) { mListener.onDownloadComplete( result, mImageSize ); } else { mListener.onDownloadError( error ); } } if ( mImageSize.getOriginalSize() == null ) { mImageSize.setOriginalSize( mImageSize.getNewSize() ); } mListener = null; mUri = null; error = null; } }