From 0614213de05bc358cde8144c41a59a6a705795f7 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 16 Aug 2016 00:13:30 +0200 Subject: [PATCH] delete cached icons that have not been accessed in over a year The icon files are downloaded for each version of the app. Over time, old versions will pile up. This cleans out the ones that have not been used in over a year. On < android-21, this will delete icons that were downloaded over a year ago even if they are still in use because it is only possible to check mtime, not atime. --- .../main/java/org/fdroid/fdroid/CleanCacheService.java | 8 ++++++++ app/src/main/java/org/fdroid/fdroid/FDroidApp.java | 5 +---- app/src/main/java/org/fdroid/fdroid/Utils.java | 9 +++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java index bb1267cf7..9089b12c6 100644 --- a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java +++ b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java @@ -61,6 +61,7 @@ public class CleanCacheService extends IntentService { clearOldFiles(ApkCache.getApkCacheDir(getBaseContext()), Preferences.get().getKeepCacheTime()); deleteStrayIndexFiles(); deleteOldInstallerFiles(); + deleteOldIcons(); } /** @@ -118,6 +119,13 @@ public class CleanCacheService extends IntentService { } } + /** + * Delete cached icons that have not been accessed in over a year. + */ + private void deleteOldIcons() { + clearOldFiles(Utils.getIconsCacheDir(this), TimeUnit.DAYS.toMillis(365)); + } + /** * Recursively delete files in {@code f} that were last used * {@code millisAgo} milliseconds ago. On {@code android-21} and newer, this diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 548e6582a..79fe4cdf3 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -45,7 +45,6 @@ import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache; import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; -import com.nostra13.universalimageloader.utils.StorageUtils; import org.acra.ACRA; import org.acra.ReportingInteractionMode; @@ -60,7 +59,6 @@ import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.net.IconDownloader; import org.fdroid.fdroid.net.WifiStateChangeService; -import java.io.File; import java.net.URL; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; @@ -262,8 +260,7 @@ public class FDroidApp extends Application { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .imageDownloader(new IconDownloader(getApplicationContext())) .diskCache(new LimitedAgeDiskCache( - new File(StorageUtils.getCacheDirectory(getApplicationContext(), true), - "icons"), + Utils.getIconsCacheDir(this), null, new FileNameGenerator() { @Override diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index 1d66b371a..c39b0ab1a 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -33,6 +33,7 @@ import android.util.Log; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; +import com.nostra13.universalimageloader.utils.StorageUtils; import org.fdroid.fdroid.compat.FileCompat; import org.fdroid.fdroid.data.Repo; @@ -107,6 +108,14 @@ public final class Utils { return "/icons-120/"; } + /** + * @return the directory where cached icons are stored + */ + public static File getIconsCacheDir(Context context) { + File cacheDir = StorageUtils.getCacheDirectory(context.getApplicationContext(), true); + return new File(cacheDir, "icons"); + } + public static void copy(InputStream input, OutputStream output) throws IOException { byte[] buffer = new byte[BUFFER_SIZE]; while (true) {