Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f0d3680 authored by Grant Menke's avatar Grant Menke
Browse files

Catch IllegalStateException when getting the UserManager in UserUtil.

This CL resolves a race condition by moving the invocation of createContextAsUser into a try/catch block in UserUtil.

Flag: EXEMPT bugfix
Bug: 385068986
Test: build
Change-Id: I8f23fdbd5a121b580a6424453e22d7c40a2608dd
parent 35c9a70f
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -35,15 +35,28 @@ public final class UserUtil {
    private UserUtil() {
    }

    private static final String LOG_TAG = "UserUtil";

    private static UserInfo getUserInfoFromUserHandle(Context context, UserHandle userHandle) {
        UserManager userManager = context.getSystemService(UserManager.class);
        return userManager.getUserInfo(userHandle.getIdentifier());
    }

    private static UserManager getUserManagerFromUserHandle(Context context,
            UserHandle userHandle) {
        UserManager userManager = null;
        try {
            userManager = context.createContextAsUser(userHandle, 0)
                    .getSystemService(UserManager.class);
        } catch (IllegalStateException e) {
            Log.e(LOG_TAG, e, "Error while creating context as user = " + userHandle);
        }
        return userManager;
    }

    public static boolean isManagedProfile(Context context, UserHandle userHandle,
            FeatureFlags featureFlags) {
        UserManager userManager = context.createContextAsUser(userHandle, 0)
                .getSystemService(UserManager.class);
        UserManager userManager = getUserManagerFromUserHandle(context, userHandle);
        UserInfo userInfo = getUserInfoFromUserHandle(context, userHandle);
        return featureFlags.telecomResolveHiddenDependencies()
                ? userManager != null && userManager.isManagedProfile()
@@ -51,15 +64,13 @@ public final class UserUtil {
    }

    public static boolean isPrivateProfile(UserHandle userHandle, Context context) {
        UserManager um = context.createContextAsUser(userHandle, 0).getSystemService(
                UserManager.class);
        UserManager um = getUserManagerFromUserHandle(context, userHandle);
        return um != null && um.isPrivateProfile();
    }

    public static boolean isProfile(Context context, UserHandle userHandle,
            FeatureFlags featureFlags) {
        UserManager userManager = context.createContextAsUser(userHandle, 0)
                .getSystemService(UserManager.class);
        UserManager userManager = getUserManagerFromUserHandle(context, userHandle);
        UserInfo userInfo = getUserInfoFromUserHandle(context, userHandle);
        return featureFlags.telecomResolveHiddenDependencies()
                ? userManager != null && userManager.isProfile()