diff options
| -rw-r--r-- | core/java/android/app/backup/BackupManager.java | 6 | ||||
| -rw-r--r-- | services/backup/java/com/android/server/backup/BackupManagerService.java | 18 |
2 files changed, 20 insertions, 4 deletions
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index 868fbfeeee39..bcc4974e4e64 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -762,6 +762,7 @@ public class BackupManager { */ @Nullable public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) { + checkServiceBinder(); if (sService != null) { try { return sService.getUserForAncestralSerialNumber(ancestralSerialNumber); @@ -782,6 +783,7 @@ public class BackupManager { @SystemApi @RequiresPermission(android.Manifest.permission.BACKUP) public void setAncestralSerialNumber(long ancestralSerialNumber) { + checkServiceBinder(); if (sService != null) { try { sService.setAncestralSerialNumber(ancestralSerialNumber); @@ -802,6 +804,7 @@ public class BackupManager { @TestApi @RequiresPermission(android.Manifest.permission.BACKUP) public Intent getConfigurationIntent(String transportName) { + checkServiceBinder(); if (sService != null) { try { return sService.getConfigurationIntentForUser(mContext.getUserId(), transportName); @@ -823,6 +826,7 @@ public class BackupManager { @TestApi @RequiresPermission(android.Manifest.permission.BACKUP) public String getDestinationString(String transportName) { + checkServiceBinder(); if (sService != null) { try { return sService.getDestinationStringForUser(mContext.getUserId(), transportName); @@ -844,6 +848,7 @@ public class BackupManager { @TestApi @RequiresPermission(android.Manifest.permission.BACKUP) public Intent getDataManagementIntent(String transportName) { + checkServiceBinder(); if (sService != null) { try { return sService.getDataManagementIntentForUser(mContext.getUserId(), transportName); @@ -867,6 +872,7 @@ public class BackupManager { @TestApi @RequiresPermission(android.Manifest.permission.BACKUP) public String getDataManagementLabel(String transportName) { + checkServiceBinder(); if (sService != null) { try { return sService.getDataManagementLabelForUser(mContext.getUserId(), transportName); diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 0dd1ded40ead..ffda5819927b 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -464,15 +464,25 @@ public class BackupManagerService { */ @Nullable public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) { - for (UserHandle handle : mContext.getSystemService(UserManager.class).getUserProfiles()) { - UserBackupManagerService userBackupManagerService = getServiceUsers().get( - handle.getIdentifier()); + int callingUserId = Binder.getCallingUserHandle().getIdentifier(); + long oldId = Binder.clearCallingIdentity(); + int[] userIds; + try { + userIds = mContext.getSystemService(UserManager.class).getProfileIds(callingUserId, + false); + } finally { + Binder.restoreCallingIdentity(oldId); + } + + for (int userId : userIds) { + UserBackupManagerService userBackupManagerService = getServiceUsers().get(userId); if (userBackupManagerService != null) { if (userBackupManagerService.getAncestralSerialNumber() == ancestralSerialNumber) { - return handle; + return UserHandle.of(userId); } } } + return null; } |