summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/UserManager.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index c5c380c1074b..388054d35ba8 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -66,6 +66,8 @@ public class UserManager {
private final IUserManager mService;
private final Context mContext;
+ private Boolean mIsManagedProfileCached;
+
/**
* @hide
* No user restriction.
@@ -970,8 +972,14 @@ public class UserManager {
*/
@SystemApi
public boolean isManagedProfile() {
+ // No need for synchronization. Once it becomes non-null, it'll be non-null forever.
+ // Worst case we might end up calling the AIDL method multiple times but that's fine.
+ if (mIsManagedProfileCached != null) {
+ return mIsManagedProfileCached;
+ }
try {
- return mService.isManagedProfile(UserHandle.myUserId());
+ mIsManagedProfileCached = mService.isManagedProfile(UserHandle.myUserId());
+ return mIsManagedProfileCached;
} catch (RemoteException re) {
throw re.rethrowFromSystemServer();
}
@@ -987,6 +995,9 @@ public class UserManager {
*/
@SystemApi
public boolean isManagedProfile(@UserIdInt int userId) {
+ if (userId == UserHandle.myUserId()) {
+ return isManagedProfile();
+ }
try {
return mService.isManagedProfile(userId);
} catch (RemoteException re) {