Return empty list if getAccounts is called for removed user.
This will prevent crash in DevicePolicyManagerService.
Bug: 339720160
Test: atest AccountManagerTest
Change-Id: I0abc587ded128e770975724b0a1f042ffb724ce3
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 1015ad9..ac9ed0d 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -4532,8 +4532,13 @@
public Account[] getAccountsAsUser(String type, int userId, String opPackageName) {
int callingUid = Binder.getCallingUid();
mAppOpsManager.checkPackage(callingUid, opPackageName);
- return getAccountsAsUserForPackage(type, userId, opPackageName /* callingPackage */, -1,
- opPackageName, false /* includeUserManagedNotVisible */);
+ try {
+ return getAccountsAsUserForPackage(type, userId, opPackageName /* callingPackage */, -1,
+ opPackageName, false /* includeUserManagedNotVisible */);
+ } catch (SQLiteCantOpenDatabaseException e) {
+ Log.e(TAG, "Could not get accounts for user " + userId, e);
+ return new Account[]{};
+ }
}
@NonNull