Merge "Update ParentalControlsUtils to use a new utility that is able to retrieve the component for the EnforcedAdmin." into main

This commit is contained in:
Vitor Carvalho
2025-03-12 12:00:30 -07:00
committed by Android (Google) Code Review
7 changed files with 42 additions and 26 deletions

View File

@@ -31,6 +31,7 @@ import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.supervision.SupervisionRestrictionsHelper;
/** /**
* Utilities for things at the cross-section of biometrics and parental controls. For example, * Utilities for things at the cross-section of biometrics and parental controls. For example,
@@ -59,12 +60,7 @@ public class ParentalControlsUtils {
UserManager.DISALLOW_BIOMETRIC, userHandle); UserManager.DISALLOW_BIOMETRIC, userHandle);
} }
final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); return parentConsentRequiredInternal(context, modality, userHandle);
final SupervisionManager sm =
android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()
? context.getSystemService(SupervisionManager.class)
: null;
return parentConsentRequiredInternal(dpm, sm, modality, userHandle);
} }
/** /**
@@ -74,18 +70,22 @@ public class ParentalControlsUtils {
@Nullable @Nullable
@VisibleForTesting @VisibleForTesting
static RestrictedLockUtils.EnforcedAdmin parentConsentRequiredInternal( static RestrictedLockUtils.EnforcedAdmin parentConsentRequiredInternal(
@NonNull DevicePolicyManager dpm, @NonNull Context context,
@Nullable SupervisionManager sm,
@BiometricAuthenticator.Modality int modality, @BiometricAuthenticator.Modality int modality,
@NonNull UserHandle userHandle) { @NonNull UserHandle userHandle) {
final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
final SupervisionManager sm =
android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()
? context.getSystemService(SupervisionManager.class)
: null;
if (!ParentalControlsUtilsInternal.parentConsentRequired( if (!ParentalControlsUtilsInternal.parentConsentRequired(
dpm, sm, modality, userHandle)) { dpm, sm, modality, userHandle)) {
return null; return null;
} }
if (android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()) { if (android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()) {
// Supervision doesn't necessarily have have an admin component. return SupervisionRestrictionsHelper.createEnforcedAdmin(
return new RestrictedLockUtils.EnforcedAdmin( context, UserManager.DISALLOW_BIOMETRIC, userHandle);
/* component= */ null, UserManager.DISALLOW_BIOMETRIC, userHandle);
} else { } else {
final ComponentName cn = final ComponentName cn =
ParentalControlsUtilsInternal.getSupervisionComponentName(dpm, userHandle); ParentalControlsUtilsInternal.getSupervisionComponentName(dpm, userHandle);

View File

@@ -27,13 +27,12 @@ import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.app.supervision.SupervisionManager; import android.app.supervision.SupervisionManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.BiometricAuthenticator;
import android.os.UserHandle; import android.os.UserHandle;
@@ -44,6 +43,7 @@ import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
@@ -53,22 +53,29 @@ import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class ParentalControlsUtilsTest { public class ParentalControlsUtilsTest {
@Rule public final CheckFlagsRule checkFlags = DeviceFlagsValueProvider.createCheckFlagsRule(); @Rule
public final CheckFlagsRule checkFlags = DeviceFlagsValueProvider.createCheckFlagsRule();
@Rule
public final MockitoRule mocks = MockitoJUnit.rule();
@Mock private Context mContext; private Context mContext;
@Mock private DevicePolicyManager mDpm; @Mock
@Mock private SupervisionManager mSm; private DevicePolicyManager mDpm;
@Mock
private SupervisionManager mSm;
private ComponentName mSupervisionComponentName = new ComponentName("pkg", "cls"); private final ComponentName mSupervisionComponent = new ComponentName("pkg", "cls");
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getContentResolver()).thenReturn(mock(ContentResolver.class)); when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDpm);
when(mContext.getSystemService(SupervisionManager.class)).thenReturn(mSm);
} }
/** /**
@@ -85,7 +92,7 @@ public class ParentalControlsUtilsTest {
.thenReturn(keyguardDisabledFlags); .thenReturn(keyguardDisabledFlags);
return ParentalControlsUtils.parentConsentRequiredInternal( return ParentalControlsUtils.parentConsentRequiredInternal(
mDpm, mSm, modality, new UserHandle(UserHandle.myUserId())); mContext, modality, new UserHandle(UserHandle.myUserId()));
} }
/** /**
@@ -97,11 +104,13 @@ public class ParentalControlsUtilsTest {
boolean supervisionEnabled, boolean supervisionEnabled,
@BiometricAuthenticator.Modality int modality, @BiometricAuthenticator.Modality int modality,
int keyguardDisabledFlags) { int keyguardDisabledFlags) {
when(mSm.isSupervisionEnabledForUser(anyInt())).thenReturn(supervisionEnabled);
when(mDpm.getKeyguardDisabledFeatures(eq(null))).thenReturn(keyguardDisabledFlags); when(mDpm.getKeyguardDisabledFeatures(eq(null))).thenReturn(keyguardDisabledFlags);
when(mSm.isSupervisionEnabledForUser(anyInt())).thenReturn(supervisionEnabled);
when(mSm.getActiveSupervisionAppPackage()).thenReturn(
supervisionEnabled ? mSupervisionComponent.getPackageName() : null);
return ParentalControlsUtils.parentConsentRequiredInternal( return ParentalControlsUtils.parentConsentRequiredInternal(
mDpm, mSm, modality, new UserHandle(UserHandle.myUserId())); mContext, modality, new UserHandle(UserHandle.myUserId()));
} }
@Test @Test
@@ -115,11 +124,11 @@ public class ParentalControlsUtilsTest {
for (int i = 0; i < tests.length; i++) { for (int i = 0; i < tests.length; i++) {
RestrictedLockUtils.EnforcedAdmin admin = getEnforcedAdminForCombination( RestrictedLockUtils.EnforcedAdmin admin = getEnforcedAdminForCombination(
mSupervisionComponentName, tests[i][0] /* modality */, mSupervisionComponent, tests[i][0] /* modality */,
tests[i][1] /* keyguardDisableFlags */); tests[i][1] /* keyguardDisableFlags */);
assertNotNull(admin); assertNotNull(admin);
assertEquals(UserManager.DISALLOW_BIOMETRIC, admin.enforcedRestriction); assertEquals(UserManager.DISALLOW_BIOMETRIC, admin.enforcedRestriction);
assertEquals(mSupervisionComponentName, admin.component); assertEquals(mSupervisionComponent, admin.component);
} }
} }

View File

@@ -198,6 +198,7 @@ public class CombinedBiometricStatusUtilsTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void getDisabledAdmin_whenFingerprintDisabled_whenFaceDisabled_returnsRestrictions() { public void getDisabledAdmin_whenFingerprintDisabled_whenFaceDisabled_returnsRestrictions() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) when(mDevicePolicyManager.getKeyguardDisabledFeatures(null))
.thenReturn(KEYGUARD_DISABLE_FACE | KEYGUARD_DISABLE_FINGERPRINT); .thenReturn(KEYGUARD_DISABLE_FACE | KEYGUARD_DISABLE_FINGERPRINT);

View File

@@ -155,6 +155,7 @@ public class FaceStatusUtilsTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void getDisabledAdmin_whenFaceDisabled_returnsRestriction() { public void getDisabledAdmin_whenFaceDisabled_returnsRestriction() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) when(mDevicePolicyManager.getKeyguardDisabledFeatures(null))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE); .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE);

View File

@@ -161,6 +161,7 @@ public class FingerprintStatusUtilsTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void getDisabledAdmin_whenFingerprintDisabled_returnsRestriction() { public void getDisabledAdmin_whenFingerprintDisabled_returnsRestriction() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) when(mDevicePolicyManager.getKeyguardDisabledFeatures(null))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT); .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);

View File

@@ -195,6 +195,7 @@ public class FaceSafetySourceTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void setSafetySourceData_withFaceNotEnrolled_whenSupervisionIsOn_setsData() { public void setSafetySourceData_withFaceNotEnrolled_whenSupervisionIsOn_setsData() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false);
@@ -248,6 +249,7 @@ public class FaceSafetySourceTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void setSafetySourceData_withFaceEnrolled_whenSupervisionIsOn_setsData() { public void setSafetySourceData_withFaceEnrolled_whenSupervisionIsOn_setsData() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);

View File

@@ -211,6 +211,7 @@ public class FingerprintSafetySourceTest {
@EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS)
public void setSafetySourceData_withFingerprintNotEnrolled_whenSupervisionIsOn_setsData() { public void setSafetySourceData_withFingerprintNotEnrolled_whenSupervisionIsOn_setsData() {
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false); when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false);
@@ -272,6 +273,7 @@ public class FingerprintSafetySourceTest {
public void setSafetySourceData_withFingerprintsEnrolled_whenSupervisionIsOn_setsData() { public void setSafetySourceData_withFingerprintsEnrolled_whenSupervisionIsOn_setsData() {
int enrolledFingerprintsCount = 2; int enrolledFingerprintsCount = 2;
when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true);
when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg");
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true); when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true);