diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/IncrementalStates.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/IncrementalStates.java b/services/core/java/com/android/server/pm/IncrementalStates.java index 7627281d2188..3101ca7f9f6b 100644 --- a/services/core/java/com/android/server/pm/IncrementalStates.java +++ b/services/core/java/com/android/server/pm/IncrementalStates.java @@ -118,12 +118,19 @@ public final class IncrementalStates { * @param progress Value between [0, 1]. */ public void setProgress(float progress) { + final boolean oldLoadingState; final boolean newLoadingState; synchronized (mLock) { - updateProgressLocked(progress); + oldLoadingState = mLoadingState.isLoading(); + if (oldLoadingState) { + // Due to asynchronous progress reporting, incomplete progress might be received + // after the app is migrated off incremental. Ignore such progress updates. + updateProgressLocked(progress); + } newLoadingState = mLoadingState.isLoading(); } - if (!newLoadingState) { + if (oldLoadingState && !newLoadingState) { + // Only report the state change when loading state changes from true to false onLoadingStateChanged(); } } |