From 30d3f8efccbc828e0684730d8fe1f886af458922 Mon Sep 17 00:00:00 2001 From: Peter Serwylo <peter@serwylo.com> Date: Fri, 24 Feb 2017 11:42:15 +1100 Subject: [PATCH] Make "batchUpdates" mode an implementation detail of the `AddUpdateStatusManager` class. Because of the way that this can be misused without the compiler knowing (e.g. by forgetting to call `endBatchUpdates()`) it may be safer to move it to an internal implementation detail of the class. It could probably be done away with completely if the `notify*` methods were moved out of the respective `*ApkInternal()` methods, but that requires more significant refactoring to get right without code duplication. --- .../org/fdroid/fdroid/AppUpdateStatusManager.java | 14 ++++++++++++-- .../main/java/org/fdroid/fdroid/UpdateService.java | 7 +++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java index 90f00c7ad..545abf37f 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java +++ b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; public class AppUpdateStatusManager { @@ -187,6 +188,15 @@ public class AppUpdateStatusManager { } } + + public void addApks(List<Apk> apksToUpdate, Status status) { + startBatchUpdates(); + for (Apk apk : apksToUpdate) { + addApk(apk, status, null); + } + endBatchUpdates(); + } + /** * Add an Apk to the AppUpdateStatusManager manager. * @param apk The apk to add. @@ -250,13 +260,13 @@ public class AppUpdateStatusManager { } } - void startBatchUpdates() { + private void startBatchUpdates() { synchronized (appMapping) { isBatchUpdating = true; } } - void endBatchUpdates() { + private void endBatchUpdates() { synchronized (appMapping) { isBatchUpdating = false; notifyChange(); diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 11a11cf4f..58b3ce6d4 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -489,14 +489,13 @@ public class UpdateService extends IntentService { private void showAppUpdatesNotification(Cursor hasUpdates) { if (hasUpdates != null) { hasUpdates.moveToFirst(); - appUpdateStatusManager.startBatchUpdates(); + List<Apk> apksToUpdate = new ArrayList<>(hasUpdates.getCount()); for (int i = 0; i < hasUpdates.getCount(); i++) { App app = new App(hasUpdates); hasUpdates.moveToNext(); - Apk apk = ApkProvider.Helper.findApkFromAnyRepo(this, app.packageName, app.suggestedVersionCode); - appUpdateStatusManager.addApk(apk, AppUpdateStatusManager.Status.UpdateAvailable, null); + apksToUpdate.add(ApkProvider.Helper.findApkFromAnyRepo(this, app.packageName, app.suggestedVersionCode)); } - appUpdateStatusManager.endBatchUpdates(); + appUpdateStatusManager.addApks(apksToUpdate, AppUpdateStatusManager.Status.UpdateAvailable); } }