package in.srain.cube.image; import android.content.Context; import in.srain.cube.app.lifecycle.IComponentContainer; import in.srain.cube.app.lifecycle.LifeCycleComponentManager; import in.srain.cube.file.FileUtil; import in.srain.cube.image.iface.*; import in.srain.cube.image.impl.*; /** * @author http://www.liaohuqiu.net */ public class ImageLoaderFactory { private static ImageProvider sMutableImageProvider; private static ImageProvider sStableImageProvider; private static ImageResizer sDefaultImageResizer; private static ImageTaskExecutor sDefaultImageTaskExecutor; private static ImageLoadHandler sDefaultImageLoadHandler; public static void init(Context context) { int mutableDiskCacheSizeInKB = 1024 * 10; int stableDiskCacheSizeInKB = 1024 * 10; float percent = 0.2f; int memoryCacheSizeInKB = Math.round(percent * Runtime.getRuntime().maxMemory() / 1024); init(context, mutableDiskCacheSizeInKB, stableDiskCacheSizeInKB, memoryCacheSizeInKB); } public static void init(Context context, int mutableDiskCacheSizeInKB, int stableDiskCacheSizeInKB, int memoryCacheSizeInKB) { FileUtil.CacheDirInfo dirInfo1 = FileUtil.getDiskCacheDir(context, "mutable_image", mutableDiskCacheSizeInKB * 1024); FileUtil.CacheDirInfo dirInfo2 = FileUtil.getDiskCacheDir(context, "stable_image", stableDiskCacheSizeInKB * 1024); ImageFileProvider mutableImageFileProvider = new LruImageFileProvider(dirInfo1.realSize, dirInfo1.path); ImageFileProvider stableImageFileProvider = new LruImageFileProvider(dirInfo2.realSize, dirInfo2.path); ImageMemoryCache defaultMemoryCache = new DefaultMemoryCache(memoryCacheSizeInKB); mutableImageFileProvider.initDiskCacheAsync(); stableImageFileProvider.initDiskCacheAsync(); sMutableImageProvider = new ImageProvider(context, defaultMemoryCache, mutableImageFileProvider); sStableImageProvider = new ImageProvider(context, defaultMemoryCache, stableImageFileProvider); } public static ImageLoader createStableImageLoader(Context context) { return createStableImageLoader(context, sDefaultImageLoadHandler); } public static ImageLoader createStableImageLoader(Context context, ImageLoadHandler imageLoadHandler) { return createInner(context, sStableImageProvider, imageLoadHandler); } public static ImageLoader create(Context context) { return createMutableImageLoader(context, sDefaultImageLoadHandler); } public static ImageLoader create(Context context, ImageLoadHandler imageLoadHandler) { return createMutableImageLoader(context, imageLoadHandler); } public static ImageLoader createMutableImageLoader(Context context) { return createMutableImageLoader(context, sDefaultImageLoadHandler); } public static ImageLoader createMutableImageLoader(Context context, ImageLoadHandler imageLoadHandler) { return createInner(context, sMutableImageProvider, imageLoadHandler); } private static ImageLoader createInner(Context context, ImageProvider imageProvider, ImageLoadHandler imageLoadHandler) { return create(context, imageProvider, sDefaultImageTaskExecutor, sDefaultImageResizer, imageLoadHandler); } private static ImageLoader create(Context context, ImageProvider imageProvider, ImageTaskExecutor imageTaskExecutor, ImageResizer imageResizer, ImageLoadHandler imageLoadHandler) { if (imageProvider == null) { imageProvider = ImageProvider.getDefault(context); } if (imageTaskExecutor == null) { imageTaskExecutor = DefaultImageTaskExecutor.getInstance(); } if (imageResizer == null) { imageResizer = DefaultImageResizer.getInstance(); } if (imageLoadHandler == null) { imageLoadHandler = new DefaultImageLoadHandler(context); } ImageLoader imageLoader = new ImageLoader(context, imageProvider, imageTaskExecutor, imageResizer, imageLoadHandler); if (context instanceof IComponentContainer) { LifeCycleComponentManager.tryAddComponentToContainer(imageLoader, context); } return imageLoader; } public static void setDefaultImageResizer(ImageResizer imageResizer) { sDefaultImageResizer = imageResizer; } public static void setDefaultImageTaskExecutor(ImageTaskExecutor imageTaskExecutor) { sDefaultImageTaskExecutor = imageTaskExecutor; } public static void setDefaultImageLoadHandler(ImageLoadHandler imageLoadHandler) { sDefaultImageLoadHandler = imageLoadHandler; } public static void setDefaultImageProvider(ImageProvider imageProvider) { sMutableImageProvider = imageProvider; } public static void setMutableImageProvider(ImageProvider imageProvider) { sMutableImageProvider = imageProvider; } public static void setStableImageProvider(ImageProvider imageProvider) { sMutableImageProvider = imageProvider; } }