From 898f331bfd4c5f52792e7662b248b693e5bc52dc Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Tue, 21 Apr 2015 18:06:17 +1000 Subject: [PATCH] Fix #202: Deleting more apks than sqlite can handle in one query. The static delete helper function in ApkProvider now supports recursively reducing the size of the list of apks to delete, until it is under the threshold that sqlite can handle. --- .../src/org/fdroid/fdroid/data/ApkProvider.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/F-Droid/src/org/fdroid/fdroid/data/ApkProvider.java b/F-Droid/src/org/fdroid/fdroid/data/ApkProvider.java index 6eecece38..257ed7fa1 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/ApkProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/ApkProvider.java @@ -64,7 +64,19 @@ public class ApkProvider extends FDroidProvider { resolver.delete(uri, null, null); } - public static void deleteApks(Context context, List apks) { + public static void deleteApks(final Context context, final List apks) { + if (apks.size() > ApkProvider.MAX_APKS_TO_QUERY) { + int middle = apks.size() / 2; + List apks1 = apks.subList(0, middle); + List apks2 = apks.subList(middle, apks.size()); + deleteApks(context, apks1); + deleteApks(context, apks2); + } else { + deleteApksSafely(context, apks); + } + } + + private static void deleteApksSafely(final Context context, final List apks) { ContentResolver resolver = context.getContentResolver(); Uri uri = getContentUri(apks); resolver.delete(uri, null, null);