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