/** * Finds all apks from the repo we are currently updating, that belong to the specified app, and * delete them as they are no longer provided by that repo. */ @Nullable private ContentProviderOperation deleteOrphanedApks( List<App> apps, Map<String, List<Apk>> packages) { String[] projection = new String[] {ApkProvider.DataColumns.PACKAGE_NAME, ApkProvider.DataColumns.VERSION_CODE}; List<Apk> existing = ApkProvider.Helper.find(context, repo, apps, projection); List<Apk> toDelete = new ArrayList<>(); for (Apk existingApk : existing) { boolean shouldStay = false; if (packages.containsKey(existingApk.packageName)) { for (Apk newApk : packages.get(existingApk.packageName)) { if (newApk.vercode == existingApk.vercode) { shouldStay = true; break; } } } if (!shouldStay) { toDelete.add(existingApk); } } if (toDelete.size() == 0) { return null; } Uri uri = TempApkProvider.getApksUri(repo, toDelete); return ContentProviderOperation.newDelete(uri).build(); }