when storage is low, make UIL limit cache based on available size

This commit is contained in:
Hans-Christoph Steiner 2018-04-05 23:07:44 +02:00
parent c1656f61a7
commit 4a0dd8abe7
1 changed files with 21 additions and 0 deletions

View File

@ -41,6 +41,10 @@ import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
@ -399,9 +403,26 @@ public class FDroidApp extends Application {
if (height > maxSize) {
maxSize = height;
}
DiskCache diskCache;
long available = Utils.getImageCacheDirAvailableMemory(this);
int percentageFree = Utils.getPercent(available, Utils.getImageCacheDirTotalMemory(this));
if (percentageFree > 5) {
diskCache = new UnlimitedDiskCache(Utils.getImageCacheDir(this));
} else {
Log.i(TAG, "Switching to LruDiskCache(" + available / 2L + ") to save disk space!");
try {
diskCache = new LruDiskCache(Utils.getImageCacheDir(this),
DefaultConfigurationFactory.createFileNameGenerator(),
available / 2L);
} catch (IOException e) {
diskCache = new UnlimitedDiskCache(Utils.getImageCacheDir(this));
}
}
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.imageDownloader(new ImageLoaderForUIL(getApplicationContext()))
.defaultDisplayImageOptions(Utils.getDefaultDisplayImageOptionsBuilder().build())
.diskCache(diskCache)
.diskCacheExtraOptions(maxSize, maxSize, new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {