129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddpackage com.bumptech.glide;
229f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd
329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddimport android.content.Context;
4b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Juddimport android.os.Build;
529f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddimport com.android.volley.RequestQueue;
69fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.Engine;
79fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
89fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.BitmapPoolAdapter;
99fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
109fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.cache.DiskCache;
119fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.cache.DiskCacheAdapter;
129fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.cache.DiskLruCacheWrapper;
139fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.cache.LruResourceCache;
149fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.cache.MemoryCache;
15127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Juddimport com.bumptech.glide.load.engine.cache.MemorySizeCalculator;
161cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Juddimport com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor;
1729f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddimport com.bumptech.glide.volley.RequestQueueWrapper;
1829f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd
190e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Juddimport java.io.File;
201cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Juddimport java.util.concurrent.ExecutorService;
21b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd
2229f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Juddpublic class GlideBuilder {
2329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    private RequestQueue requestQueue;
2429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    private Context context;
25b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd    private Engine engine;
26b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd    private BitmapPool bitmapPool;
270e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    private MemoryCache memoryCache;
280e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    private DiskCache diskCache;
291cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    private ExecutorService resizeService;
301cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    private ExecutorService diskCacheService;
3129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd
3229f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    public GlideBuilder(Context context) {
3329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd        this.context = context.getApplicationContext();
3429f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    }
3529f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd
3629f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    public GlideBuilder setRequestQueue(RequestQueue requestQueue) {
3729f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd        this.requestQueue = requestQueue;
3829f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd        return this;
3929f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    }
4029f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd
410e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    public GlideBuilder setBitmapPool(BitmapPool bitmapPool) {
420e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        this.bitmapPool = bitmapPool;
43b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd        return this;
44b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd    }
45b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd
460e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    public GlideBuilder setMemoryCache(MemoryCache memoryCache) {
470e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        this.memoryCache = memoryCache;
480e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        return this;
490e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    }
500e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
510e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    public GlideBuilder setDiskCache(DiskCache diskCache) {
520e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        this.diskCache = diskCache;
530e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        return this;
540e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    }
550e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
561cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    public GlideBuilder setResizeService(ExecutorService service) {
571cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        this.resizeService = service;
581cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        return this;
591cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    }
601cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd
611cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    public GlideBuilder setDiskCacheService(ExecutorService service) {
621cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        this.diskCacheService = service;
631cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        return this;
641cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd    }
651cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd
660e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    GlideBuilder setEngine(Engine engine) {
670e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        this.engine = engine;
68b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd        return this;
69b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd    }
70b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd
7129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    Glide createGlide() {
721cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        if (resizeService == null) {
731cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd            final int cores = Math.max(1, Runtime.getRuntime().availableProcessors());
741cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd            resizeService = new FifoPriorityThreadPoolExecutor(cores);
751cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        }
761cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        if (diskCacheService == null) {
771cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd            diskCacheService = new FifoPriorityThreadPoolExecutor(1);
781cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd        }
791cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd
8029f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd        if (requestQueue == null) {
8129f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd            requestQueue = RequestQueueWrapper.getRequestQueue(context);
8229f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd        }
83b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd
84127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Judd        MemorySizeCalculator calculator = new MemorySizeCalculator(context);
85b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd        if (bitmapPool == null) {
86b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd            if (Build.VERSION.SDK_INT >= 11) {
87127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Judd                bitmapPool = new LruBitmapPool(calculator.getBitmapPoolSize());
88b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd            } else {
89b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd                bitmapPool = new BitmapPoolAdapter();
90b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd            }
91b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd        }
92b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd
930e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        if (memoryCache == null) {
94127f265355747f88a7ef0f5c73a2e2789f05efc3Sam Judd            memoryCache = new LruResourceCache(calculator.getMemoryCacheSize());
950e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        }
960e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
970e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        if (diskCache == null) {
980e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            File cacheDir = Glide.getPhotoCacheDir(context);
990e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            if (cacheDir != null) {
1000e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd                diskCache = DiskLruCacheWrapper.get(cacheDir, Glide.DEFAULT_DISK_CACHE_SIZE);
1010e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            }
1020e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            if (diskCache == null) {
1030e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd                diskCache = new DiskCacheAdapter();
1040e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            }
1050e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        }
1060e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
1070e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        if (engine == null) {
1081cd9f328e9aa63121474dbfed8c8baf1a5fe9262Sam Judd            engine = new Engine(memoryCache, diskCache, resizeService, diskCacheService);
1090e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        }
1100e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
111be9ba784e13d6f8bf390ec0f11fc2600a38b0548Sam Judd        return new Glide(engine, requestQueue, memoryCache, bitmapPool, context);
11229f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd    }
11329f3a82eaaf784c3722e7673b6ea6acff9449a4dSam Judd}