package com.facebook; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.EnumSet; class ImageDownloader { /** * Downloads the image specified in the passed in request. * If a callback is specified, it is guaranteed to be invoked on the calling thread. * @param request Request to process */ static void downloadAsync(ImageRequest request) { ImageDownloadTask downloadTask = new ImageDownloadTask(); downloadTask.execute(request); } private static class ImageDownloadTask extends AsyncTask<ImageRequest, Void, ImageResponse> { @Override protected ImageResponse doInBackground(ImageRequest... requests) { Bitmap bitmap = null; Exception error = null; ImageRequest request = requests[0]; boolean isCachedRedirect = false; if (!request.isCancelled()) { URL url = request.getImageUrl(); InputStream stream = null; try { if (request.isCachedRedirectAllowed()) { stream = ImageResponseCache.getCachedImageStream( url, request.getContext(), EnumSet.of(ImageResponseCache.Options.FOLLOW_REDIRECTS)); isCachedRedirect = stream != null; } if (!isCachedRedirect) { stream = ImageResponseCache.getImageStream( url, request.getContext(), ImageResponseCache.Options.NONE); } if (stream != null) { bitmap = BitmapFactory.decodeStream(stream); } } catch (IOException e) { error = e; } finally { Utility.closeQuietly(stream); } } return new ImageResponse(request, error, isCachedRedirect, bitmap); } @Override protected void onPostExecute(ImageResponse response) { super.onPostExecute(response); ImageRequest request = response.getRequest(); ImageRequest.Callback callback = request.getCallback(); if (!request.isCancelled() && callback != null) { callback.onCompleted(response); } } } }