19fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddpackage com.bumptech.glide.load.engine.cache;
276c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
39fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.Key;
4b7c7c2b2505f996dbda219faeb0d08dc1c9982d7Sam Juddimport com.bumptech.glide.load.engine.Resource;
50e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Juddimport com.bumptech.glide.util.LruCache;
60e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
7c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsisimport static android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND;
8c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsisimport static android.content.ComponentCallbacks2.TRIM_MEMORY_MODERATE;
976c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
107bead36a3031afd9ffb74f06d254f4b11836ceffSam Juddpublic class LruResourceCache extends LruCache<Key, Resource> implements MemoryCache {
110e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    private ResourceRemovedListener listener;
12a55e2011ddbc4c2bac3789903ec338b892aacf10Sam Judd
130e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    public LruResourceCache(int size) {
149aa6dd1e9e9497e54d38a8f5f686dd510b224ee1Sam Judd        super(size);
1576c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    }
1676c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
1776c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    @Override
180e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    public void setResourceRemovedListener(ResourceRemovedListener listener) {
190e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        this.listener = listener;
2076c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    }
2176c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
2276c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    @Override
2378bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd    protected void onItemRemoved(Key key, Resource item) {
240e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        if (listener != null) {
250e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd            listener.onResourceRemoved(item);
269aa6dd1e9e9497e54d38a8f5f686dd510b224ee1Sam Judd        }
2776c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    }
2876c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
2976c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    @Override
300e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd    protected int getSize(Resource item) {
310e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd        return item.getSize();
3276c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd    }
3376c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd
34c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis    public void trimMemory(int level) {
35c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis        if (level >= TRIM_MEMORY_MODERATE) {
36c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis            // Nearing middle of list of cached background apps
37c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis            // Evict our entire bitmap cache
38c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis            clearMemory();
39c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis        } else if (level >= TRIM_MEMORY_BACKGROUND) {
40c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis            // Entering list of cached background apps
41c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis            // Evict oldest half of our bitmap cache
429aa6dd1e9e9497e54d38a8f5f686dd510b224ee1Sam Judd            trimToSize(getCurrentSize() / 2);
43c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis        }
440e2e2b1b8df449b6e3223b090f5a55f1993e6c1fSam Judd
45c88ce8ece98d15d94bc3c9e05e60b268ccf9bd30Savvas Dalkitsis    }
4676c7bc1d3db2e9f8b855ad7dc0d856358cb0a443Sam Judd}
47