1d76f655fc29c5b3858d6657f22a5c656c3143767Sam Juddpackage com.bumptech.glide; 2d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 3fcca8d79a3a04e71924d06799de2af46c923a84eSam Juddimport android.annotation.TargetApi; 48a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Juddimport android.app.Activity; 50e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Juddimport android.content.ComponentCallbacks2; 6d76f655fc29c5b3858d6657f22a5c656c3143767Sam Juddimport android.content.Context; 70ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Juddimport android.graphics.Bitmap; 877e0200ba76c89177b6ec8c781f4f8f86984989bSam Juddimport android.graphics.drawable.BitmapDrawable; 9b44604067356bb73cae3c910ac0e0044d26974a5Sam Juddimport android.graphics.drawable.Drawable; 104e8c4e61ae9f011c1bfccbace9c24aee61865bf0Sam Juddimport android.net.Uri; 11fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddimport android.os.ParcelFileDescriptor; 128a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Juddimport android.support.v4.app.Fragment; 138a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Juddimport android.support.v4.app.FragmentActivity; 14e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Juddimport android.util.Log; 15b44604067356bb73cae3c910ac0e0044d26974a5Sam Juddimport android.view.View; 16d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Juddimport android.widget.ImageView; 1729f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddimport com.android.volley.RequestQueue; 18127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.engine.Engine; 19127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 20127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.engine.cache.DiskCache; 21127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.engine.cache.MemoryCache; 229fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.GenericLoaderFactory; 23127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.model.GlideUrl; 24dbb67f826b0e76645c809be6d589e9dcb8271324Sam Juddimport com.bumptech.glide.load.model.ImageVideoWrapper; 259fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.ModelLoader; 269fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.ModelLoaderFactory; 279fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorFileLoader; 289fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorModelLoader; 299fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorResourceLoader; 309fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorStringLoader; 319fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorUriLoader; 329fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamFileLoader; 339fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamModelLoader; 349fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamResourceLoader; 359fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamStringLoader; 369fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamUriLoader; 379fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.stream.StreamUrlLoader; 3870db081bbc0a80737f457c6388f4af4c1391f5f5Sam Juddimport com.bumptech.glide.load.resource.bitmap.CenterCrop; 39be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.bitmap.FileDescriptorBitmapDataLoadProvider; 4070db081bbc0a80737f457c6388f4af4c1391f5f5Sam Juddimport com.bumptech.glide.load.resource.bitmap.FitCenter; 41be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.bitmap.ImageVideoDataLoadProvider; 42be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.bitmap.StreamBitmapDataLoadProvider; 43cbba04826bfaf4f8055f922bc41937572983c17fSam Juddimport com.bumptech.glide.load.resource.gif.GifData; 44be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.gif.GifDataLoadProvider; 45cbba04826bfaf4f8055f922bc41937572983c17fSam Juddimport com.bumptech.glide.load.resource.gif.GifDrawable; 46fc3f03260933d96fae33a43846860f226dd661feSam Juddimport com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapper; 4770db081bbc0a80737f457c6388f4af4c1391f5f5Sam Juddimport com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperTransformation; 48be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.gifbitmap.ImageVideoGifDataLoadProvider; 49be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.transcode.BitmapDrawableTranscoder; 5044b89ba468c3f0f996bf1497d2f55fc9b50de0e8Sam Juddimport com.bumptech.glide.load.resource.transcode.GifBitmapWrapperDrawableTranscoder; 5144b89ba468c3f0f996bf1497d2f55fc9b50de0e8Sam Juddimport com.bumptech.glide.load.resource.transcode.GifDataDrawableTranscoder; 52be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 53be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Juddimport com.bumptech.glide.load.resource.transcode.TranscoderFactory; 548a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Juddimport com.bumptech.glide.manager.RequestManagerRetriever; 5595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddimport com.bumptech.glide.provider.DataLoadProviderFactory; 56531667420f0cb59e01e0ae5928392469006148ddSam Juddimport com.bumptech.glide.request.GlideAnimation; 579fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.Request; 58785dc5ee71beeb3ebd77ea73b313eeaf057ae112Sam Juddimport com.bumptech.glide.request.target.ImageViewTargetFactory; 599fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.target.Target; 609fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.request.target.ViewTarget; 612d923581ee57592181845aa98231eec988fab9f6Sam Juddimport com.bumptech.glide.volley.VolleyUrlLoader; 62d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 63d76f655fc29c5b3858d6657f22a5c656c3143767Sam Juddimport java.io.File; 640ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Juddimport java.io.InputStream; 65d76f655fc29c5b3858d6657f22a5c656c3143767Sam Juddimport java.net.URL; 6678790c322a30ac2e62498b79bdc965832bf2342dSam Judd 67d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd/** 6844e0516ee31912216c9e668c255f2d5baf86ac6dSam Judd * A singleton to present a simple static interface for building requests with {@link BitmapRequestBuilder} and maintaining 690e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * an {@link Engine}, {@link BitmapPool}, {@link DiskCache} and {@link MemoryCache}. 7056e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd * 71058ef77ccc7fd40a80a2da72dc97695c7dda2c0bSam Judd * <p> 7256e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd * Note - This class is not thread safe. 73058ef77ccc7fd40a80a2da72dc97695c7dda2c0bSam Judd * </p> 74d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd */ 75d76f655fc29c5b3858d6657f22a5c656c3143767Sam Juddpublic class Glide { 760e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd // 250 MB 770e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd static final int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024; 780e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 790e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd private static final String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache"; 80e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd private static final String TAG = "Glide"; 8129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd private static Glide GLIDE; 820e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 83c95a13d712f57271047e467d367e1145517b0c2aSam Judd private final GenericLoaderFactory loaderFactory = new GenericLoaderFactory(); 8429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd private final RequestQueue requestQueue; 85b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd private final Engine engine; 8627eb05702fd4531d6974640c62df1d569629edb6Sam Judd private final BitmapPool bitmapPool; 870e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd private final MemoryCache memoryCache; 8895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private final ImageViewTargetFactory imageViewTargetFactory = new ImageViewTargetFactory(); 8995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private final TranscoderFactory transcoderFactory = new TranscoderFactory(); 9095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private final DataLoadProviderFactory dataLoadProviderFactory; 9170db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd private final CenterCrop bitmapCenterCrop; 9270db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd private final GifBitmapWrapperTransformation drawableCenterCrop; 9370db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd private final FitCenter bitmapFitCenter; 9470db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd private final GifBitmapWrapperTransformation drawableFitCenter; 950e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 960e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd /** 970e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * Try to get the external cache directory if available and default to the internal. Use a default name for the 980e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * cache directory if no name is provided 990e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * 1000e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @param context A context 1010e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @return A File representing the default disk cache directory 1020e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd */ 1030e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd public static File getPhotoCacheDir(Context context) { 1040e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd return getPhotoCacheDir(context, DEFAULT_DISK_CACHE_DIR); 1050e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 1060e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 1070e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd /** 1080e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * Try to get the external cache directory if available and default to the internal. Use a default name for the 1090e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * cache directory if no name is provided 1100e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * 1110e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @param context A context 1120e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @param cacheName The name of the subdirectory in which to store the cache 1130e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @return A File representing the default disk cache directory 1140e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd */ 1150e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd @SuppressWarnings("ResultOfMethodCallIgnored") 1160e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd public static File getPhotoCacheDir(Context context, String cacheName) { 1170e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd File cacheDir = context.getCacheDir(); 1180e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd if (cacheDir != null) { 1190e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd File result = new File(cacheDir, cacheName); 1200e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd result.mkdirs(); 1210e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd return result; 1220e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 1230e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd if (Log.isLoggable(TAG, Log.ERROR)) { 1240e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd Log.e(TAG, "default disk cache dir is null"); 1250e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 1260e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd return null; 1270e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 128d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 12956e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd /** 13056e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd * Get the singleton. 13156e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd * 13256e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd * @return the singleton 13356e62046cf9e1bd2d341b6455a9b81b5757e269cSam Judd */ 13429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd public static Glide get(Context context) { 13529f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd if (GLIDE == null) { 13629f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd GLIDE = new GlideBuilder(context).createGlide(); 13729f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd } 13829f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd 139d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd return GLIDE; 140d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd } 141d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 1429f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd /** 1439f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * Returns false if the {@link Glide} singleton has not yet been created and can therefore be setup using 1449f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * {@link #setup(GlideBuilder)}. 1459f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * 1469f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * @see #setup(GlideBuilder) 1479f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd */ 14829f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd public static boolean isSetup() { 14929f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd return GLIDE != null; 15029f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd } 15129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd 1529f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd /** 1539f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * Creates the {@link Glide} singleton using the given builder. Can be used to set options like cache sizes and 1549f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * locations. 1559f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * 1569f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * @see #isSetup() 1579f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * 1589f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * @param builder The builder. 1599f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * @throws IllegalArgumentException if the Glide singleton has already been created. 1609f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd */ 16129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd public static void setup(GlideBuilder builder) { 1620e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd if (isSetup()) { 16329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd throw new IllegalArgumentException("Glide is already setup, check with isSetup() first"); 16429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd } 16529f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd 16629f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd GLIDE = builder.createGlide(); 16729f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd } 16829f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd 169b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd static void tearDown() { 170b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd GLIDE = null; 171b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd } 172b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd 17377e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd Glide(Engine engine, RequestQueue requestQueue, MemoryCache memoryCache, BitmapPool bitmapPool, 174be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd Context context) { 175b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd this.engine = engine; 17629f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd this.requestQueue = requestQueue; 17727eb05702fd4531d6974640c62df1d569629edb6Sam Judd this.bitmapPool = bitmapPool; 1780e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd this.memoryCache = memoryCache; 179c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd 18095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd dataLoadProviderFactory = new DataLoadProviderFactory(); 181be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd 182cbba04826bfaf4f8055f922bc41937572983c17fSam Judd dataLoadProviderFactory.register(InputStream.class, Bitmap.class, new StreamBitmapDataLoadProvider(bitmapPool)); 18395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd dataLoadProviderFactory.register(ParcelFileDescriptor.class, Bitmap.class, 18495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd new FileDescriptorBitmapDataLoadProvider(bitmapPool)); 185be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd 186be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd ImageVideoDataLoadProvider imageVideoDataLoadProvider = new ImageVideoDataLoadProvider(bitmapPool); 187be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd dataLoadProviderFactory.register(ImageVideoWrapper.class, Bitmap.class, imageVideoDataLoadProvider); 188be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd 189be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd GifDataLoadProvider gifDataLoadProvider = new GifDataLoadProvider(context, bitmapPool); 190cbba04826bfaf4f8055f922bc41937572983c17fSam Judd dataLoadProviderFactory.register(InputStream.class, GifData.class, gifDataLoadProvider); 191cbba04826bfaf4f8055f922bc41937572983c17fSam Judd 192fc3f03260933d96fae33a43846860f226dd661feSam Judd dataLoadProviderFactory.register(ImageVideoWrapper.class, GifBitmapWrapper.class, 193be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd new ImageVideoGifDataLoadProvider(imageVideoDataLoadProvider, gifDataLoadProvider)); 194c8c79d03924a757c29bbe7df5bc07b3cf8e02a83Sam Judd 195896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(File.class, ParcelFileDescriptor.class, new FileDescriptorFileLoader.Factory()); 196896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(File.class, InputStream.class, new StreamFileLoader.Factory()); 197896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(Integer.class, ParcelFileDescriptor.class, new FileDescriptorResourceLoader.Factory()); 198896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(Integer.class, InputStream.class, new StreamResourceLoader.Factory()); 199896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(String.class, ParcelFileDescriptor.class, new FileDescriptorStringLoader.Factory()); 200896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(String.class, InputStream.class, new StreamStringLoader.Factory()); 201896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(Uri.class, ParcelFileDescriptor.class, new FileDescriptorUriLoader.Factory()); 202896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd register(Uri.class, InputStream.class, new StreamUriLoader.Factory()); 203c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd register(URL.class, InputStream.class, new StreamUrlLoader.Factory()); 204c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd register(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(requestQueue)); 20577e0200ba76c89177b6ec8c781f4f8f86984989bSam Judd 20695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd transcoderFactory.register(Bitmap.class, BitmapDrawable.class, 207be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd new BitmapDrawableTranscoder(context.getResources(), bitmapPool)); 208fc3f03260933d96fae33a43846860f226dd661feSam Judd transcoderFactory.register(GifBitmapWrapper.class, Drawable.class, 20944b89ba468c3f0f996bf1497d2f55fc9b50de0e8Sam Judd new GifBitmapWrapperDrawableTranscoder(new BitmapDrawableTranscoder(context.getResources(), bitmapPool), 21044b89ba468c3f0f996bf1497d2f55fc9b50de0e8Sam Judd new GifDataDrawableTranscoder())); 211cbba04826bfaf4f8055f922bc41937572983c17fSam Judd transcoderFactory.register(GifData.class, GifDrawable.class, new GifDataDrawableTranscoder()); 21270db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 21370db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd bitmapCenterCrop = new CenterCrop(bitmapPool); 21470db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd drawableCenterCrop = new GifBitmapWrapperTransformation(bitmapCenterCrop); 21570db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 21670db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd bitmapFitCenter = new FitCenter(bitmapPool); 21770db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd drawableFitCenter = new GifBitmapWrapperTransformation(bitmapFitCenter); 218e13dcedf144c02927c122fae32179f460b21fef5Sam Judd } 219e13dcedf144c02927c122fae32179f460b21fef5Sam Judd 220be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd public BitmapPool getBitmapPool() { 221d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return bitmapPool; 222d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 223d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 224d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd <Z, R> ResourceTranscoder<Z, R> buildTranscoder(Class<Z> decodedClass, Class<R> transcodedClass) { 225d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return transcoderFactory.get(decodedClass, transcodedClass); 226d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 227d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 228d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd <T, Z> DataLoadProvider<T, Z> buildDataProvider(Class<T> dataClass, Class<Z> decodedClass) { 229d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return dataLoadProviderFactory.get(dataClass, decodedClass); 230d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 231d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 232d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd <R> Target<R> buildImageViewTarget(ImageView imageView, Class<R> transcodedClass) { 233d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return imageViewTargetFactory.buildTarget(imageView, transcodedClass); 234d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 235d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 236d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd Engine getEngine() { 237d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd return engine; 238d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd } 239d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd 24070db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd CenterCrop getBitmapCenterCrop() { 24170db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd return bitmapCenterCrop; 24270db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd } 24370db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 24470db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd FitCenter getBitmapFitCenter() { 24570db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd return bitmapFitCenter; 24670db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd } 24770db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 24870db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd GifBitmapWrapperTransformation getDrawableCenterCrop() { 24970db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd return drawableCenterCrop; 25070db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd } 25170db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 25270db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd GifBitmapWrapperTransformation getDrawableFitCenter() { 25370db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd return drawableFitCenter; 25470db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd } 25570db081bbc0a80737f457c6388f4af4c1391f5f5Sam Judd 2560e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd private GenericLoaderFactory getLoaderFactory() { 2570e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd return loaderFactory; 2580e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 2590e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 260d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd /** 26129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd * Returns the {@link RequestQueue} Glide is using to fetch images over http/https. 262d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd */ 26329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd public RequestQueue getRequestQueue() { 26429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd return requestQueue; 265d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd } 266d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 267d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd /** 2680e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * Clears as much memory as possible. 2690e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * 2700e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @see ComponentCallbacks2#onLowMemory() 2710e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd */ 2720e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd public void clearMemory() { 2730e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd bitmapPool.clearMemory(); 2740e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd memoryCache.clearMemory(); 2750e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 2760e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 2770e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd /** 2780e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * Clears some memory with the exact amount depending on the given level. 2790e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * 2800e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd * @see ComponentCallbacks2#onTrimMemory(int) 2810e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd */ 2820e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd public void trimMemory(int level) { 2830e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd bitmapPool.trimMemory(level); 2840e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd memoryCache.trimMemory(level); 2850e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd } 2860e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd 2870e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd /** 2887050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * Adjusts Glide's current and maximum memory usage based on the given {@link MemoryCategory}. 2897050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * 2907050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * <p> 2917050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * The default {@link MemoryCategory} is {@link MemoryCategory#NORMAL}. {@link MemoryCategory#HIGH} increases 2927050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * Glide's maximum memory usage by up to 50% and {@link MemoryCategory#LOW} decreases Glide's maximum memory 2937050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * usage by 50%. This method should be used to temporarily increase or decrease memory useage for a single 2947050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * Activity or part of the app. Use {@link GlideBuilder#setMemoryCache(MemoryCache)} to set a permanent 2957050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * memory size if you want to change the default. 2967050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd * </p> 2977050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd */ 2987050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd public void setMemoryCategory(MemoryCategory memoryCategory) { 2997050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd memoryCache.setSizeMultiplier(memoryCategory.getMultiplier()); 3007050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd bitmapPool.setSizeMultiplier(memoryCategory.getMultiplier()); 3017050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd } 3027050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd 3037050d58f72f666896e7f1ad6a27faafb0230fd37Sam Judd /** 304b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Cancel any pending loads Glide may have for the target and free any resources (such as {@link Bitmap}s) that may 305b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * have been loaded for the target so they may be reused. 306b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 307b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param target The Target to cancel loads for. 308b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 309b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public static void clear(Target target) { 310b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd Request request = target.getRequest(); 311b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd if (request!= null) { 312b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd request.clear(); 313b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 314b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 315b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 316b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 317b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Cancel any pending loads Glide may have for the view and free any resources that may have been loaded for the 318b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * view. 319b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 320b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * <p> 321b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * Note that this will only work if {@link View#setTag(Object)} is not called on this view outside of Glide. 322b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * </p> 323b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 324b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @see #clear(Target). 325b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * 326b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @param view The view to cancel loads and free resources for. 327b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd * @throws IllegalArgumentException if an object other than Glide's metadata is set as the view's tag. 328b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd */ 329b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public static void clear(View view) { 330b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd Target viewTarget = new ClearTarget(view); 331b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd clear(viewTarget); 332b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd } 333b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd 334b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd /** 335da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd * Use the given factory to build a {@link ModelLoader} for models of the given class. Generally the best use of 336da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd * this method is to replace one of the default factories or add an implementation for other similar low level 337e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * models. Typically the {@link RequestManager#using(StreamModelLoader)} or 338e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link RequestManager#using(FileDescriptorModelLoader)} syntax is preferred because it directly links the model 339031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * with the ModelLoader being used to load it. Any factory replaced by the given factory will have its 340031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * {@link ModelLoaderFactory#teardown()}} method called. 341633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd * 342058ef77ccc7fd40a80a2da72dc97695c7dda2c0bSam Judd * <p> 3439c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * Note - If a factory already exists for the given class, it will be replaced. If that factory is not being 3440ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd * used for any other model class, {@link ModelLoaderFactory#teardown()} 3459c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * will be called. 3469c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * </p> 3479c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * 348c95a13d712f57271047e467d367e1145517b0c2aSam Judd * <p> 349c95a13d712f57271047e467d367e1145517b0c2aSam Judd * Note - The factory must not be an anonymous inner class of an Activity or another object that cannot be 350c95a13d712f57271047e467d367e1145517b0c2aSam Judd * retained statically. 351c95a13d712f57271047e467d367e1145517b0c2aSam Judd * </p> 352c95a13d712f57271047e467d367e1145517b0c2aSam Judd * 353e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see RequestManager#using(FileDescriptorModelLoader) 354e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see RequestManager#using(StreamModelLoader) 355896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * 356896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * @param modelClass The model class. 357896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * @param resourceClass The resource class the model loader will translate the model type into. 358896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * @param factory The factory to use. 359896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * @param <T> The type of the model. 360896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd * @param <Y> the type of the resource. 3619c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd */ 362896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd public <T, Y> void register(Class<T> modelClass, Class<Y> resourceClass, ModelLoaderFactory<T, Y> factory) { 363896af010afa2c88aa6b63fc80c1a412357caed97Sam Judd ModelLoaderFactory<T, Y> removed = loaderFactory.register(modelClass, resourceClass, factory); 3649c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd if (removed != null) { 3659c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd removed.teardown(); 3669c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 3679c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 3689c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 3699c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd /** 370031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * Removes any {@link ModelLoaderFactory} registered for the given model and resource classes if one exists. If a 371031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * {@link ModelLoaderFactory} is removed, its {@link ModelLoaderFactory#teardown()}} method will be called. 372031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * 373031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * @param modelClass The model class. 374031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * @param resourceClass The resource class. 375031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * @param <T> The type of the model. 376031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd * @param <Y> The type of the resource. 377031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd */ 378031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd public <T, Y> void unregister(Class<T> modelClass, Class<Y> resourceClass) { 379031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd ModelLoaderFactory<T, Y> removed = loaderFactory.unregister(modelClass, resourceClass); 380031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd if (removed != null) { 381031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd removed.teardown(); 382031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd } 383031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd } 384031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd 385031fed2e364feacf89dfb904a3a0de98b050fdc4Sam Judd /** 38615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * Build a {@link ModelLoader} for the given model class using registered {@link ModelLoaderFactory}s. 3879c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * 38815df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildModelLoader(Object, Class, Context) 38915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildStreamModelLoader(Class, Context) 39015df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildFileDescriptorModelLoader(Class, Context) 39115df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * 39215df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param modelClass The class to get a {@link ModelLoader} for. 39315df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param resourceClass The resource class to get a {@link ModelLoader} for. 39415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param context Any context. 39515df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param <T> The type of the model. 39615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param <Y> The type of the resource. 39715df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @return A new {@link ModelLoader} for the given model class. 3989c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd */ 3990ba0245a97116b2f2c7bd67213961ac4e2dc3e56Sam Judd public static <T, Y> ModelLoader<T, Y> buildModelLoader(Class<T> modelClass, Class<Y> resourceClass, 4000ba0245a97116b2f2c7bd67213961ac4e2dc3e56Sam Judd Context context) { 40115df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd return Glide.get(context).getLoaderFactory().buildModelLoader(modelClass, resourceClass, context); 40215df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd } 40315df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd 40415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd /** 40515df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * A convenience method to build a {@link ModelLoader} for a given model object using registered 40615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * {@link ModelLoaderFactory}s. 40715df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * 40815df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildModelLoader(Class, Class, Context) 40915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * 41015df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param model A non null model object whose class we will get a {@link ModelLoader} for. 41115df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param resourceClass The resource class to get a {@link ModelLoader} for. 41215df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param context Any context. 41315df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param <T> The type of the model. 41415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @param <Y> The type of the resource. 415e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd * @return A new {@link ModelLoader} for the given model and resource classes, or null if model is null. 41615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd */ 41715df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd @SuppressWarnings("unchecked") 41815df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd public static <T, Y> ModelLoader<T, Y> buildModelLoader(T model, Class<Y> resourceClass, Context context) { 41915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd if (model == null) { 420e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd if (Log.isLoggable(TAG, Log.DEBUG)) { 421e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd Log.d(TAG, "Unable to load null model, setting placeholder only"); 422e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd } 423e9498d0b46d4c79410968eb11c332c42c9be7ec0Sam Judd return null; 42415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd } 42515df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd return buildModelLoader((Class<T>) model.getClass(), resourceClass, context); 4269c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 4279c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 428ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd /** 42915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * A method to build a {@link ModelLoader} for the given model that produces {@link InputStream}s using a registered 43015df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * factory. 431ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd * 432ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd * @see #buildModelLoader(Class, Class, android.content.Context) 433ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd */ 434ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd public static <T> ModelLoader<T, InputStream> buildStreamModelLoader(Class<T> modelClass, Context context) { 435ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd return buildModelLoader(modelClass, InputStream.class, context); 436ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd } 437ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd 438ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd /** 43915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * A method to build a {@link ModelLoader} for the given model that produces {@link InputStream}s using a registered 44015df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * factory. 44115df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * 44215df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildModelLoader(Object, Class, Context) 44315df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd */ 44415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd public static <T> ModelLoader<T, InputStream> buildStreamModelLoader(T model, Context context) { 44515df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd return buildModelLoader(model, InputStream.class, context); 44615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd } 44715df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd 44815df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd /** 44915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * A method to build a {@link ModelLoader} for the given model class that produces 450ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd * {@link ParcelFileDescriptor}s using a registered factory. 451ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd * 452ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd * @see #buildModelLoader(Class, Class, android.content.Context) 453ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd */ 454ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd public static <T> ModelLoader<T, ParcelFileDescriptor> buildFileDescriptorModelLoader(Class<T> modelClass, 455ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd Context context) { 456ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd return buildModelLoader(modelClass, ParcelFileDescriptor.class, context); 457ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd } 458ebf002122d17f21676230a4499894cc9f103d0b4Sam Judd 4598c7ae0d1551752a2ff6260dd807580a90020451eSam Judd /** 46015df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * A method to build a {@link ModelLoader} for the given model class that produces 46115df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * {@link ParcelFileDescriptor}s using a registered factory. 46215df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * 46315df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd * @see #buildModelLoader(Object, Class, android.content.Context) 46415df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd */ 46515df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd public static <T> ModelLoader<T, ParcelFileDescriptor> buildFileDescriptorModelLoader(T model, Context context) { 46615df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd return buildModelLoader(model, ParcelFileDescriptor.class, context); 46715df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd } 46815df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd 46915df8d073a97cfa2b589b547535a5b055c71bfbbSam Judd /** 4708c7ae0d1551752a2ff6260dd807580a90020451eSam Judd * Begin a load with Glide by passing in a context. 4719c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * 4728c7ae0d1551752a2ff6260dd807580a90020451eSam Judd * @param context Any context, will not be retained. 4738c7ae0d1551752a2ff6260dd807580a90020451eSam Judd * @return A model request to pass in the object representing the image to be loaded. 4749c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd */ 475e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public static RequestManager with(Context context) { 476e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return RequestManagerRetriever.get(context); 4778a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd } 4788a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 479e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public static RequestManager with(Activity activity) { 480e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return RequestManagerRetriever.get(activity); 4818a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd } 4828a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 483e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public static RequestManager with(FragmentActivity activity) { 484e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return RequestManagerRetriever.get(activity); 4858a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd } 4868a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 487fcca8d79a3a04e71924d06799de2af46c923a84eSam Judd @TargetApi(11) 488e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public static RequestManager with(android.app.Fragment fragment) { 489e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return RequestManagerRetriever.get(fragment); 4908a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd } 4918a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 492e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public static RequestManager with(Fragment fragment) { 493e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return RequestManagerRetriever.get(fragment); 494d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd } 495d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd 496ba414a3eba45ab6566a94c48babace5c1d6d721fSam Judd private static class ClearTarget extends ViewTarget<View, Object> { 497b8963a023ceb009cbf7f73a4506e7af7e693a219Sam Judd public ClearTarget(View view) { 498b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd super(view); 499b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd } 500b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd 501b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd @Override 502531667420f0cb59e01e0ae5928392469006148ddSam Judd public void onResourceReady(Object resource, GlideAnimation<Object> glideAnimation) { } 503b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd 504b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd @Override 505b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd public void setPlaceholder(Drawable placeholder) { } 506b44604067356bb73cae3c910ac0e0044d26974a5Sam Judd } 507d76f655fc29c5b3858d6657f22a5c656c3143767Sam Judd} 508