package com.octo.android.robospice.sample.request; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import roboguice.util.temp.Ln; import android.content.Context; import android.graphics.Bitmap; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.request.CachedSpiceRequest; import com.octo.android.robospice.request.simple.BitmapRequest; import com.octo.android.robospice.sample.model.FlickrPhoto; /** * A customizable RoboSpice requests factory to download images from Flickr. * @author David Stemmer */ public class FlickrImageRequestFactory { private final Context context; private int targetWidth = -1; private int targetHeight = -1; private String photoSizeSuffix; public static final String SMALL_THUMB_SQUARE = "s"; public static final String LARGE_THUMB_SQUARE = "q"; public static final String THUMBNAIL = "t"; public static final String SMALL_240 = "m"; public static final String SMALL_320 = "n"; public static final String MEDIUM_500 = "-"; public static final String MEDIUM_640 = "z"; public static final String MEDIUM_800 = "c"; public static final String LARGE_1024 = "b"; public static final String ORIGINAL = "o"; public FlickrImageRequestFactory(Context context) { this.context = context; } public FlickrImageRequestFactory setSampleSize(int height, int width) { targetWidth = width; targetHeight = height; return this; } public FlickrImageRequestFactory setPhotoFormat(String format) { photoSizeSuffix = format; return this; } public CachedSpiceRequest<Bitmap> create(FlickrPhoto photoSource) { String photoUrlFormat = "http://farm%s.staticflickr.com/%s/%s_%s_%s.jpg"; String photoUrl = String.format(photoUrlFormat, photoSource.getFarm(), photoSource.getServer(), photoSource.getId(), photoSource.getSecret(), photoSizeSuffix); File cacheFile = null; String filename = null; try { filename = URLEncoder.encode(photoUrl, "UTF-8"); cacheFile = new File(context.getCacheDir(), filename); } catch (UnsupportedEncodingException e) { Ln.e(e); } BitmapRequest request = new BitmapRequest(photoUrl, targetWidth, targetHeight, cacheFile); return new CachedSpiceRequest<Bitmap>(request, filename, DurationInMillis.ONE_MINUTE * 10); } public int getTargetHeight() { return targetHeight; } public int getTargetWidth() { return targetWidth; } }