Android Open Source - RabbitEars Download Feed Image Task






From Project

Back to project page RabbitEars.

License

The source code is released under:

MIT License

If you think the Android project RabbitEars listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.fbs.rabbitears.tasks;
/* w  w  w  .ja va  2  s . co  m*/
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

import com.fbs.rabbitears.Config;
import com.fbs.rabbitears.R;
import com.fbs.rabbitears.helpers.FileHelper;
import com.fbs.rabbitears.models.Feed;
import com.fbs.rabbitears.utils.Size;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

/**
 * Feed Image Download Async
 */
public class DownloadFeedImageTask extends AsyncTask<ImageView, Void, Bitmap>
{
    private ImageView[]    views;
    private Feed           origin;
    private ProgressDialog dialog;

    /**
     * Constructor
     * @param origin Feed origin of request for image
     * @param dialog ProgressDialog dialog to close when finished
     */
    public DownloadFeedImageTask(Feed origin, ProgressDialog dialog)
    {
        this.origin = origin;
        this.dialog = dialog;
    }

    /**
     * Download image in background
     * @param views ImageView... image views to update on completion
     * @return Bitmap downloaded feed image
     */
    @Override
    protected Bitmap doInBackground(ImageView... views)
    {
        String fileName = origin.toString();

        Bitmap image = FileHelper.loadImageFromCache(fileName); // first try load from cache

        try
        {
            this.views = views;

            if (image == null) // if cache load was unsuccessful
            {
                image = downloadImage(new URL(origin.image)); // download and save to cache

                FileHelper.saveImageToCache(fileName, image);
            }
        }
        catch (Exception e)
        {
            // assign default image on error
            image = BitmapFactory.decodeResource(Config.getResources(), R.drawable.ic_feed);
        }

        return image;
    }

    /**
     * Update views on complete
     * @param bitmap Bitmap scaled downloaded feed image
     */
    @Override
    protected void onPostExecute(Bitmap bitmap)
    {
        super.onPostExecute(bitmap);

        origin.setCachedImage(bitmap);

        for (ImageView view : views)
        {
            try
            {
                view.setImageBitmap(bitmap);
            }
            catch (Exception e) { }
        }

        if (dialog != null && dialog.isShowing())
        {
            dialog.dismiss();
        }
    }

    /**
     * Download Image resource as scaled bitmap
     * @param imageUrl URL address of image resource
     * @return Bitmap downloaded image
     * @throws IOException
     */
    private Bitmap downloadImage(URL imageUrl)
            throws IOException
    {
        InputStream urlStream    = imageUrl.openStream();
        Bitmap      urlImage     = BitmapFactory.decodeStream(urlStream);
        Size<Integer, Integer> iconSize  = Config.getIconSize();
        Size<Integer, Integer> imageSize = new Size<Integer, Integer>(urlImage.getWidth(), urlImage.getHeight());

        while (imageSize.height > iconSize.height && imageSize.width > iconSize.width)
        {
            imageSize.height = (int)(imageSize.width  /1.2);
            imageSize.width  = (int)(imageSize.width  /1.2);
        }

        return Bitmap.createScaledBitmap(urlImage, imageSize.width,  imageSize.height, false);
    }
}




Java Source Code List

com.fbs.rabbitears.ApplicationTest.java
com.fbs.rabbitears.Config.java
com.fbs.rabbitears.RabbitEars.java
com.fbs.rabbitears.activities.BaseActivity.java
com.fbs.rabbitears.activities.FeedLister.java
com.fbs.rabbitears.activities.ItemLister.java
com.fbs.rabbitears.activities.ItemStreamer.java
com.fbs.rabbitears.activities.ItemViewer.java
com.fbs.rabbitears.activities.Settings.java
com.fbs.rabbitears.adapters.FeedArrayAdapter.java
com.fbs.rabbitears.adapters.FeedItemArrayAdapter.java
com.fbs.rabbitears.contracts.feed.Author.java
com.fbs.rabbitears.contracts.feed.Content.java
com.fbs.rabbitears.contracts.feed.Entry.java
com.fbs.rabbitears.contracts.feed.Feed.java
com.fbs.rabbitears.contracts.feed.Link.java
com.fbs.rabbitears.contracts.rss.Category.java
com.fbs.rabbitears.contracts.rss.Channel.java
com.fbs.rabbitears.contracts.rss.Enclosure.java
com.fbs.rabbitears.contracts.rss.Guid.java
com.fbs.rabbitears.contracts.rss.Image.java
com.fbs.rabbitears.contracts.rss.Item.java
com.fbs.rabbitears.contracts.rss.Rss.java
com.fbs.rabbitears.events.Event.java
com.fbs.rabbitears.events.FeedDownloadEvent.java
com.fbs.rabbitears.events.ItemProcessEvent.java
com.fbs.rabbitears.fragments.AddFeedDialog.java
com.fbs.rabbitears.fragments.BaseDialogFragment.java
com.fbs.rabbitears.helpers.DeserializationHelper.java
com.fbs.rabbitears.helpers.FileHelper.java
com.fbs.rabbitears.helpers.ModelHelper.java
com.fbs.rabbitears.helpers.ViewHelper.java
com.fbs.rabbitears.models.FeedItem.java
com.fbs.rabbitears.models.Feed.java
com.fbs.rabbitears.models.ItemMedia.java
com.fbs.rabbitears.tasks.DownloadFeedImageTask.java
com.fbs.rabbitears.tasks.DownloadFeedTask.java
com.fbs.rabbitears.tasks.ProcessFeedItemsTask.java
com.fbs.rabbitears.utils.RssParser.java
com.fbs.rabbitears.utils.Size.java
com.fbs.rabbitears.views.MediaStreamer.java