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

Commit a7dc6209 authored by Eric Biggers's avatar Eric Biggers Committed by Android (Google) Code Review
Browse files

Merge "LockPatternUtils: simplify querying of credential shareability" into main

parents 778cd22c a5bb866c
Loading
Loading
Loading
Loading
+10 −25
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.hardware.input.InputManagerGlobal;
import android.os.Build;
@@ -77,7 +76,6 @@ import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

/**
@@ -240,8 +238,6 @@ public class LockPatternUtils {
    private final SparseLongArray mLockoutDeadlines = new SparseLongArray();
    private Boolean mHasSecureLockScreen;

    private HashMap<UserHandle, UserManager> mUserManagerCache = new HashMap<>();

    /**
     * Use {@link TrustManager#isTrustUsuallyManaged(int)}.
     *
@@ -363,22 +359,6 @@ public class LockPatternUtils {
        return mUserManager;
    }

    private UserManager getUserManager(int userId) {
        UserHandle userHandle = UserHandle.of(userId);
        if (mUserManagerCache.containsKey(userHandle)) {
            return mUserManagerCache.get(userHandle);
        }

        try {
            Context userContext = mContext.createPackageContextAsUser("system", 0, userHandle);
            UserManager userManager = userContext.getSystemService(UserManager.class);
            mUserManagerCache.put(userHandle, userManager);
            return userManager;
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException("Failed to create context for user " + userHandle, e);
        }
    }

    private TrustManager getTrustManager() {
        TrustManager trust = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
        if (trust == null) {
@@ -966,7 +946,7 @@ public class LockPatternUtils {
     */
    public void setSeparateProfileChallengeEnabled(int userHandle, boolean enabled,
            LockscreenCredential profilePassword) {
        if (!isCredentialSharableWithParent(userHandle)) {
        if (!isCredentialShareableWithParent(userHandle)) {
            return;
        }
        try {
@@ -985,7 +965,7 @@ public class LockPatternUtils {
     * credential is not shareable with its parent, or a non-profile user.
     */
    public boolean isSeparateProfileChallengeEnabled(int userHandle) {
        return isCredentialSharableWithParent(userHandle) && hasSeparateChallenge(userHandle);
        return isCredentialShareableWithParent(userHandle) && hasSeparateChallenge(userHandle);
    }

    /**
@@ -995,7 +975,7 @@ public class LockPatternUtils {
     * credential is not shareable with its parent, or a non-profile user.
     */
    public boolean isProfileWithUnifiedChallenge(int userHandle) {
        return isCredentialSharableWithParent(userHandle) && !hasSeparateChallenge(userHandle);
        return isCredentialShareableWithParent(userHandle) && !hasSeparateChallenge(userHandle);
    }

    /**
@@ -1020,8 +1000,13 @@ public class LockPatternUtils {
        return info != null && info.isManagedProfile();
    }

    private boolean isCredentialSharableWithParent(int userHandle) {
        return getUserManager(userHandle).isCredentialSharableWithParent();
    private boolean isCredentialShareableWithParent(int userHandle) {
        try {
            return getUserManager().getUserProperties(UserHandle.of(userHandle))
                    .isCredentialShareableWithParent();
        } catch (IllegalArgumentException e) {
            return false;
        }
    }

    /**