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

Commit d4d9c4fe authored by Jigar Thakkar's avatar Jigar Thakkar Committed by Android (Google) Code Review
Browse files

Merge "Disable strong auth for all profiles after successful unlock" into main

parents d92f82b4 3adb65b8
Loading
Loading
Loading
Loading
+34 −4
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.UserInfo;
import android.content.pm.UserProperties;
import android.os.RemoteException;
import android.os.UserManager;
import android.view.View;
@@ -68,15 +70,43 @@ public class ConfirmDeviceCredentialUtils {
            DevicePolicyManager dpm, int userId, boolean isStrongAuth) {
        if (isStrongAuth) {
            utils.reportSuccessfulPasswordAttempt(userId);
            if (isBiometricUnlockEnabledForPrivateSpace()) {
                final UserInfo userInfo = userManager.getUserInfo(userId);
                if (userInfo != null) {
                    if (isProfileThatAlwaysRequiresAuthToDisableQuietMode(userManager, userInfo)
                            || userInfo.isManagedProfile()) {
                        // Keyguard is responsible to disable StrongAuth for primary user. Disable
                        // StrongAuth for profile challenges only here.
                        utils.userPresent(userId);
                    }
                }
            }
        } else {
            dpm.reportSuccessfulBiometricAttempt(userId);
        }
        if (!isBiometricUnlockEnabledForPrivateSpace()) {
            if (userManager.isManagedProfile(userId)) {
            // Keyguard is responsible to disable StrongAuth for primary user. Disable StrongAuth
            // for work challenge only here.
                // Disable StrongAuth for work challenge only here.
                utils.userPresent(userId);
            }
        }
    }

    /**
     * Returns true if the userInfo passed as the parameter corresponds to a profile that always
     * requires auth to disable quiet mode and false otherwise
     */
    private static boolean isProfileThatAlwaysRequiresAuthToDisableQuietMode(
            UserManager userManager, @NonNull UserInfo userInfo) {
        final UserProperties userProperties =
                    userManager.getUserProperties(userInfo.getUserHandle());
        return userProperties.isAuthAlwaysRequiredToDisableQuietMode() && userInfo.isProfile();
    }

    private static boolean isBiometricUnlockEnabledForPrivateSpace() {
        return android.os.Flags.allowPrivateProfile()
                && android.multiuser.Flags.enableBiometricsToUnlockPrivateSpace();
    }

    /**
     * Request hiding soft-keyboard before animating away credential UI, in case IME