package starter.kit.util;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.widget.ImageView;
public class ImageLoader {
private static ImageLoader SINGLETON = null;
private ImageLoaderInterface imageLoader;
private boolean mHandleAllUris = false;
private ImageLoader(ImageLoaderInterface loaderImpl) {
imageLoader = loaderImpl;
}
public static ImageLoader initialize(ImageLoaderInterface loaderImpl) {
SINGLETON = new ImageLoader(loaderImpl);
return SINGLETON;
}
public static ImageLoader getInstance() {
if (SINGLETON == null) {
SINGLETON = new ImageLoader(new AbstractImageLoader() {
});
}
return SINGLETON;
}
public ImageLoader withHandleAllUris(boolean handleAllUris) {
this.mHandleAllUris = handleAllUris;
return this;
}
public boolean displayImageView(ImageView imageView, Uri uri) {
if (consumed(uri)) {
Drawable placeHolder = placeholder(imageView, uri, null);
imageLoader.displayImageView(imageView, uri, placeHolder);
return true;
}
return false;
}
/**
* @return false if not consumed
*/
public boolean displayImageView(ImageView imageView, Uri uri, String tag) {
if (consumed(uri)) {
Drawable placeHolder = placeholder(imageView, uri, tag);
imageLoader.displayImageView(imageView, uri, placeHolder);
return true;
}
return false;
}
public boolean displayImageView(ImageView imageView, Uri uri, int width, int height, String tag) {
if (consumed(uri)) {
Drawable placeHolder = placeholder(imageView, uri, tag);
imageLoader.displayImageView(imageView, uri, placeHolder, width, height);
return true;
}
return false;
}
public void cancelImage(ImageView imageView) {
if (imageLoader != null) {
imageLoader.cancel(imageView);
}
}
public ImageLoaderInterface getImageLoader() {
return imageLoader;
}
public void setImageLoader(ImageLoaderInterface imageLoader) {
this.imageLoader = imageLoader;
}
private boolean consumed(Uri uri) {
//if we do not handle all uris and are not http or https we keep the original behavior
return mHandleAllUris || "http".equals(uri.getScheme()) || "https".equals(uri.getScheme());
}
private Drawable placeholder(ImageView imageView, Uri uri, String tag) {
if (imageLoader != null) {
if (TextUtils.isEmpty(tag)) {
return imageLoader.placeholder(imageView.getContext());
}
return imageLoader.placeholder(imageView.getContext(), tag);
}
return null;
}
public interface ImageLoaderInterface {
void displayImageView(ImageView imageView, Uri uri, Drawable placeholder);
void displayImageView(ImageView imageView, Uri uri, Drawable placeholder, int width, int height);
void cancel(ImageView imageView);
Drawable placeholder(Context ctx);
Drawable placeholder(Context context, String tag);
}
public static abstract class AbstractImageLoader implements ImageLoaderInterface {
@Override
public void displayImageView(ImageView imageView, Uri uri, Drawable placeholder) {
Log.i("ImageLoader", "you have not specified a ImageLoader implementation through the ImageLoader.initialize(ImageLoaderInterface) method");
}
@Override
public void displayImageView(ImageView imageView, Uri uri, Drawable placeholder, int width,
int height) {
Log.i("ImageLoader", "you have not specified a ImageLoader implementation through the ImageLoader.initialize(ImageLoaderInterface) method");
}
@Override
public void cancel(ImageView imageView) {
}
@Override
public Drawable placeholder(Context ctx) {
return null;
}
@Override
public Drawable placeholder(Context context, String tag) {
return null;
}
}
}