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.
This commit is contained in:
		
							parent
							
								
									aa945367c9
								
							
						
					
					
						commit
						30d3f8efcc
					
				@ -19,6 +19,7 @@ import java.util.ArrayList;
 | 
				
			|||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Iterator;
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class AppUpdateStatusManager {
 | 
					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.
 | 
					     * Add an Apk to the AppUpdateStatusManager manager.
 | 
				
			||||||
     * @param apk The apk to add.
 | 
					     * @param apk The apk to add.
 | 
				
			||||||
@ -250,13 +260,13 @@ public class AppUpdateStatusManager {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void startBatchUpdates() {
 | 
					    private void startBatchUpdates() {
 | 
				
			||||||
        synchronized (appMapping) {
 | 
					        synchronized (appMapping) {
 | 
				
			||||||
            isBatchUpdating = true;
 | 
					            isBatchUpdating = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void endBatchUpdates() {
 | 
					    private void endBatchUpdates() {
 | 
				
			||||||
        synchronized (appMapping) {
 | 
					        synchronized (appMapping) {
 | 
				
			||||||
            isBatchUpdating = false;
 | 
					            isBatchUpdating = false;
 | 
				
			||||||
            notifyChange();
 | 
					            notifyChange();
 | 
				
			||||||
 | 
				
			|||||||
@ -489,14 +489,13 @@ public class UpdateService extends IntentService {
 | 
				
			|||||||
    private void showAppUpdatesNotification(Cursor hasUpdates) {
 | 
					    private void showAppUpdatesNotification(Cursor hasUpdates) {
 | 
				
			||||||
        if (hasUpdates != null) {
 | 
					        if (hasUpdates != null) {
 | 
				
			||||||
            hasUpdates.moveToFirst();
 | 
					            hasUpdates.moveToFirst();
 | 
				
			||||||
            appUpdateStatusManager.startBatchUpdates();
 | 
					            List<Apk> apksToUpdate = new ArrayList<>(hasUpdates.getCount());
 | 
				
			||||||
            for (int i = 0; i < hasUpdates.getCount(); i++) {
 | 
					            for (int i = 0; i < hasUpdates.getCount(); i++) {
 | 
				
			||||||
                App app = new App(hasUpdates);
 | 
					                App app = new App(hasUpdates);
 | 
				
			||||||
                hasUpdates.moveToNext();
 | 
					                hasUpdates.moveToNext();
 | 
				
			||||||
                Apk apk = ApkProvider.Helper.findApkFromAnyRepo(this, app.packageName, app.suggestedVersionCode);
 | 
					                apksToUpdate.add(ApkProvider.Helper.findApkFromAnyRepo(this, app.packageName, app.suggestedVersionCode));
 | 
				
			||||||
                appUpdateStatusManager.addApk(apk, AppUpdateStatusManager.Status.UpdateAvailable, null);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            appUpdateStatusManager.endBatchUpdates();
 | 
					            appUpdateStatusManager.addApks(apksToUpdate, AppUpdateStatusManager.Status.UpdateAvailable);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user