diff --git a/src/com/android/settings/biometrics/ParentalControlsUtils.java b/src/com/android/settings/biometrics/ParentalControlsUtils.java index 04ab1b17596..e9c76e55263 100644 --- a/src/com/android/settings/biometrics/ParentalControlsUtils.java +++ b/src/com/android/settings/biometrics/ParentalControlsUtils.java @@ -31,6 +31,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; 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, @@ -59,12 +60,7 @@ public class ParentalControlsUtils { UserManager.DISALLOW_BIOMETRIC, userHandle); } - final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); - final SupervisionManager sm = - android.app.supervision.flags.Flags.deprecateDpmSupervisionApis() - ? context.getSystemService(SupervisionManager.class) - : null; - return parentConsentRequiredInternal(dpm, sm, modality, userHandle); + return parentConsentRequiredInternal(context, modality, userHandle); } /** @@ -74,18 +70,22 @@ public class ParentalControlsUtils { @Nullable @VisibleForTesting static RestrictedLockUtils.EnforcedAdmin parentConsentRequiredInternal( - @NonNull DevicePolicyManager dpm, - @Nullable SupervisionManager sm, + @NonNull Context context, @BiometricAuthenticator.Modality int modality, @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( dpm, sm, modality, userHandle)) { return null; } if (android.app.supervision.flags.Flags.deprecateDpmSupervisionApis()) { - // Supervision doesn't necessarily have have an admin component. - return new RestrictedLockUtils.EnforcedAdmin( - /* component= */ null, UserManager.DISALLOW_BIOMETRIC, userHandle); + return SupervisionRestrictionsHelper.createEnforcedAdmin( + context, UserManager.DISALLOW_BIOMETRIC, userHandle); } else { final ComponentName cn = ParentalControlsUtilsInternal.getSupervisionComponentName(dpm, userHandle); diff --git a/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java b/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java index 2b6184b9153..2ca90c6c6af 100644 --- a/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java +++ b/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java @@ -27,13 +27,12 @@ import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; 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 android.app.admin.DevicePolicyManager; import android.app.supervision.SupervisionManager; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; import android.os.UserHandle; @@ -44,6 +43,7 @@ import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import androidx.annotation.Nullable; +import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.android.settingslib.RestrictedLockUtils; @@ -53,22 +53,29 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; @RunWith(AndroidJUnit4.class) 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; - @Mock private DevicePolicyManager mDpm; - @Mock private SupervisionManager mSm; + private Context mContext; + @Mock + private DevicePolicyManager mDpm; + @Mock + private SupervisionManager mSm; - private ComponentName mSupervisionComponentName = new ComponentName("pkg", "cls"); + private final ComponentName mSupervisionComponent = new ComponentName("pkg", "cls"); @Before public void setUp() { - MockitoAnnotations.initMocks(this); - when(mContext.getContentResolver()).thenReturn(mock(ContentResolver.class)); + mContext = spy(ApplicationProvider.getApplicationContext()); + when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDpm); + when(mContext.getSystemService(SupervisionManager.class)).thenReturn(mSm); } /** @@ -85,7 +92,7 @@ public class ParentalControlsUtilsTest { .thenReturn(keyguardDisabledFlags); 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, @BiometricAuthenticator.Modality int modality, int keyguardDisabledFlags) { - when(mSm.isSupervisionEnabledForUser(anyInt())).thenReturn(supervisionEnabled); when(mDpm.getKeyguardDisabledFeatures(eq(null))).thenReturn(keyguardDisabledFlags); + when(mSm.isSupervisionEnabledForUser(anyInt())).thenReturn(supervisionEnabled); + when(mSm.getActiveSupervisionAppPackage()).thenReturn( + supervisionEnabled ? mSupervisionComponent.getPackageName() : null); return ParentalControlsUtils.parentConsentRequiredInternal( - mDpm, mSm, modality, new UserHandle(UserHandle.myUserId())); + mContext, modality, new UserHandle(UserHandle.myUserId())); } @Test @@ -115,11 +124,11 @@ public class ParentalControlsUtilsTest { for (int i = 0; i < tests.length; i++) { RestrictedLockUtils.EnforcedAdmin admin = getEnforcedAdminForCombination( - mSupervisionComponentName, tests[i][0] /* modality */, + mSupervisionComponent, tests[i][0] /* modality */, tests[i][1] /* keyguardDisableFlags */); assertNotNull(admin); assertEquals(UserManager.DISALLOW_BIOMETRIC, admin.enforcedRestriction); - assertEquals(mSupervisionComponentName, admin.component); + assertEquals(mSupervisionComponent, admin.component); } } diff --git a/tests/unit/src/com/android/settings/biometrics/combination/CombinedBiometricStatusUtilsTest.java b/tests/unit/src/com/android/settings/biometrics/combination/CombinedBiometricStatusUtilsTest.java index f2cf6b9f585..8425f4fa679 100644 --- a/tests/unit/src/com/android/settings/biometrics/combination/CombinedBiometricStatusUtilsTest.java +++ b/tests/unit/src/com/android/settings/biometrics/combination/CombinedBiometricStatusUtilsTest.java @@ -198,6 +198,7 @@ public class CombinedBiometricStatusUtilsTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void getDisabledAdmin_whenFingerprintDisabled_whenFaceDisabled_returnsRestrictions() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) .thenReturn(KEYGUARD_DISABLE_FACE | KEYGUARD_DISABLE_FINGERPRINT); diff --git a/tests/unit/src/com/android/settings/biometrics/face/FaceStatusUtilsTest.java b/tests/unit/src/com/android/settings/biometrics/face/FaceStatusUtilsTest.java index 87c43ac3b57..e6bfdbd372f 100644 --- a/tests/unit/src/com/android/settings/biometrics/face/FaceStatusUtilsTest.java +++ b/tests/unit/src/com/android/settings/biometrics/face/FaceStatusUtilsTest.java @@ -155,6 +155,7 @@ public class FaceStatusUtilsTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void getDisabledAdmin_whenFaceDisabled_returnsRestriction() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE); diff --git a/tests/unit/src/com/android/settings/biometrics/fingerprint/FingerprintStatusUtilsTest.java b/tests/unit/src/com/android/settings/biometrics/fingerprint/FingerprintStatusUtilsTest.java index b603f4b412f..9c77a6d09d6 100644 --- a/tests/unit/src/com/android/settings/biometrics/fingerprint/FingerprintStatusUtilsTest.java +++ b/tests/unit/src/com/android/settings/biometrics/fingerprint/FingerprintStatusUtilsTest.java @@ -161,6 +161,7 @@ public class FingerprintStatusUtilsTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void getDisabledAdmin_whenFingerprintDisabled_returnsRestriction() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mDevicePolicyManager.getKeyguardDisabledFeatures(null)) .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT); diff --git a/tests/unit/src/com/android/settings/safetycenter/FaceSafetySourceTest.java b/tests/unit/src/com/android/settings/safetycenter/FaceSafetySourceTest.java index 9335ced149c..1d6f48f728c 100644 --- a/tests/unit/src/com/android/settings/safetycenter/FaceSafetySourceTest.java +++ b/tests/unit/src/com/android/settings/safetycenter/FaceSafetySourceTest.java @@ -195,6 +195,7 @@ public class FaceSafetySourceTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void setSafetySourceData_withFaceNotEnrolled_whenSupervisionIsOn_setsData() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false); @@ -248,6 +249,7 @@ public class FaceSafetySourceTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void setSafetySourceData_withFaceEnrolled_whenSupervisionIsOn_setsData() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFaceManager.isHardwareDetected()).thenReturn(true); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true); diff --git a/tests/unit/src/com/android/settings/safetycenter/FingerprintSafetySourceTest.java b/tests/unit/src/com/android/settings/safetycenter/FingerprintSafetySourceTest.java index 91e7953fd5f..dac2699ac71 100644 --- a/tests/unit/src/com/android/settings/safetycenter/FingerprintSafetySourceTest.java +++ b/tests/unit/src/com/android/settings/safetycenter/FingerprintSafetySourceTest.java @@ -211,6 +211,7 @@ public class FingerprintSafetySourceTest { @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void setSafetySourceData_withFingerprintNotEnrolled_whenSupervisionIsOn_setsData() { when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false); @@ -272,6 +273,7 @@ public class FingerprintSafetySourceTest { public void setSafetySourceData_withFingerprintsEnrolled_whenSupervisionIsOn_setsData() { int enrolledFingerprintsCount = 2; when(mSupervisionManager.isSupervisionEnabledForUser(USER_ID)).thenReturn(true); + when(mSupervisionManager.getActiveSupervisionAppPackage()).thenReturn("supervision.pkg"); when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true);