Merge "Infer the activation state from the presence of a BackupManagerService."
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 8df25b5..d5a7c81 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -194,6 +194,11 @@
}
}
+ boolean isAbleToServeUser(int userId) {
+ return getServiceUsers().get(UserHandle.USER_SYSTEM) != null
+ && getServiceUsers().get(userId) != null;
+ }
+
/**
* Returns a lst of users currently unlocked that have a
* {@link UserBackupManagerService} registered.
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 53bbac4..f4b6645 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -202,11 +202,10 @@
}
}
- // A user is ready for a backup if it's unlocked and is not suppressed by a device
- // admin (device owner or profile owner).
+ // This method should not perform any I/O (e.g. do not call isBackupActivatedForUser),
+ // it's used in multiple places where I/O waits would cause system lock-ups.
private boolean isUserReadyForBackup(int userId) {
- return mService != null && mService.getServiceUsers().get(userId) != null
- && isBackupActivatedForUser(userId);
+ return mService != null && mService.isAbleToServeUser(userId);
}
/**