From 4a0dd8abe7094c67c993544d1b04015516477223 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner <hans@eds.org> Date: Thu, 5 Apr 2018 23:07:44 +0200 Subject: [PATCH] when storage is low, make UIL limit cache based on available size --- .../java/org/fdroid/fdroid/FDroidApp.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index aa9ae58fb..879687bb1 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -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) {