diff options
author | 2024-01-18 11:37:56 +0000 | |
---|---|---|
committer | 2024-01-18 14:49:39 +0000 | |
commit | 0d45269c1aa0fedeb36ab63dbee1188321563390 (patch) | |
tree | e42b7c47cbaf0afe6e19787fcf001a2505a74dcc /services/backup/java | |
parent | ca2f5af0fd9a122c510161ffe212beac90464388 (diff) |
Correctly report package index in RestoreObserver#onUpdate calls
PerformUnifiedRestoreTask uses the `RestoreObserver` to report its
progress as it restores packages. The `onUpdate` method takes two
parameters: the package index and the package name.
PerformUnifiedRestoreTask keeps track of the package index by counting
the number of packages being restored. The count was only incremented
after successfully restoring a key-value app. This meant that the wrong
package index was reported when a key-value app was not restored (e.g.
when it was skipped, or the restore failed), or when a non-key-value app
was restored.
This change fixes that by incrementing the index for every package and
before the restore starts.
Bug: 291249666
Test: Manually performed a system restore (see linked bug for details)
Change-Id: I3bdb8efb3c7deab47bf801e10c42ef2e8fd29182
Diffstat (limited to 'services/backup/java')
-rw-r--r-- | services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index 4057b4bda96c..055970819e28 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -140,8 +140,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // Widget-related data handled as part of this restore operation private byte[] mWidgetData; - // Number of apps restored in this pass - private int mCount; + // Number of apps attempted to restore in this pass + private int mRestoreAttemptedAppsCount; // When did we start? private long mStartRealtime; @@ -574,7 +574,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { Slog.v(TAG, "No more packages; finishing restore"); } int millis = (int) (SystemClock.elapsedRealtime() - mStartRealtime); - EventLog.writeEvent(EventLogTags.RESTORE_SUCCESS, mCount, millis); + EventLog.writeEvent( + EventLogTags.RESTORE_SUCCESS, mRestoreAttemptedAppsCount, millis); nextState = UnifiedRestoreState.FINAL; return; } @@ -582,7 +583,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { if (DEBUG) { Slog.i(TAG, "Next restore package: " + mRestoreDescription); } - sendOnRestorePackage(pkgName); + mRestoreAttemptedAppsCount++; + sendOnRestorePackage(mRestoreAttemptedAppsCount, pkgName); Metadata metaInfo = mPmAgent.getRestoredMetadata(pkgName); if (metaInfo == null) { @@ -810,7 +812,6 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // And then finally start the restore on this agent try { initiateOneRestore(mCurrentPackage, metaInfo.versionCode); - ++mCount; } catch (Exception e) { Slog.e(TAG, "Error when attempting restore: " + e.toString()); Bundle monitoringExtras = addRestoreOperationTypeToEvent(/* extras= */ null); @@ -1645,10 +1646,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } } - void sendOnRestorePackage(String name) { + void sendOnRestorePackage(int index, String name) { if (mObserver != null) { try { - mObserver.onUpdate(mCount, name); + mObserver.onUpdate(index, name); } catch (RemoteException e) { Slog.d(TAG, "Restore observer died in onUpdate"); mObserver = null; |