19fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddpackage com.bumptech.glide.load.model.stream; 29c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 3da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Juddimport android.content.Context; 4da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Juddimport com.bumptech.glide.Glide; 59fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.ModelCache; 69fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.GlideUrl; 79fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.model.ModelLoader; 8bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddimport com.bumptech.glide.load.data.DataFetcher; 99c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 100ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Juddimport java.io.InputStream; 119c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 129c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd/** 139c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * A base class for loading images over http/https. Can be subclassed for use with any model that can be translated 149c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * in to an image. 159c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * 169c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * @param <T> The type of the model 179c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd */ 18c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Juddpublic abstract class BaseGlideUrlLoader<T> implements StreamModelLoader<T> { 19c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd private final ModelLoader<GlideUrl, InputStream> concreteLoader; 2078bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd private final ModelCache<T, GlideUrl> modelCache; 219c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 22c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd public BaseGlideUrlLoader(Context context) { 23da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd this(context, null); 24da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd } 25da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd 2678bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd public BaseGlideUrlLoader(Context context, ModelCache<T, GlideUrl> modelCache) { 27c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd this(Glide.buildModelLoader(GlideUrl.class, InputStream.class, context), modelCache); 28da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd } 29da9073795a5ca847f17d39cda1d964cfc1fa25dcSam Judd 309c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd @SuppressWarnings("unused") 31c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd public BaseGlideUrlLoader(ModelLoader<GlideUrl, InputStream> concreteLoader) { 32425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd this(concreteLoader, null); 33425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd } 34425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd 3578bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd public BaseGlideUrlLoader(ModelLoader<GlideUrl, InputStream> concreteLoader, ModelCache<T, GlideUrl> modelCache) { 369c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd this.concreteLoader = concreteLoader; 37425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd this.modelCache = modelCache; 389c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 399c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 409c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd @Override 41bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Judd public DataFetcher<InputStream> getResourceFetcher(T model, int width, int height) { 42c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd GlideUrl result = null; 43425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd if (modelCache != null) { 4478bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd result = modelCache.get(model, width, height); 459c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 46425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd 479c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd if (result == null) { 48425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd String stringURL = getUrl(model, width, height); 49c5ba6fb229c79a6f90e9c430f11d02b43bfdc247Sam Judd result = new GlideUrl(stringURL); 50425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd 51425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd if (modelCache != null) { 5278bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd modelCache.put(model, width, height, result); 53425a2365cb61957bc52ae64ea7caa5f851c7bc72Sam Judd } 549c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 559c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 560ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd return concreteLoader.getResourceFetcher(result, width, height); 579c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd } 589c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd 599c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd /** 609c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * Get a valid url http:// or https:// for the given model and dimensions as a string 619c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * 629c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * @param model The model 639c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * @param width The width of the view/target the image will be loaded into 649c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * @param height The height of the view/target the image will be loaded into 659c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd * @return The String url 669c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd */ 679c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd protected abstract String getUrl(T model, int width, int height); 689c04fc7a0c1d5c9e8f54660b0f954f754100f250Sam Judd} 69