summaryrefslogtreecommitdiff
path: root/services/backup/java
diff options
context:
space:
mode:
author Joël Stemmer <jstemmer@google.com> 2024-01-18 11:37:56 +0000
committer Joël Stemmer <jstemmer@google.com> 2024-01-18 14:49:39 +0000
commit0d45269c1aa0fedeb36ab63dbee1188321563390 (patch)
treee42b7c47cbaf0afe6e19787fcf001a2505a74dcc /services/backup/java
parentca2f5af0fd9a122c510161ffe212beac90464388 (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.java15
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;