From fc19953d289c65a342c098be9f89d9220370693f Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 15 Jun 2021 13:07:15 -0700 Subject: [PATCH 1/2] Add biometric strings to DeviceAdminStringProviderImpl Bug: 190067596 Test: manual Change-Id: I3a8f94fd6b2730164dff263f068543abd8d4d18b --- res/values/strings.xml | 4 ++++ .../enterprise/DeviceAdminStringProviderImpl.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index b99dfc71675..eff49d1e975 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10942,6 +10942,10 @@ Can’t open this app Blocked by your credit provider + + Parent needed + + Hand the phone to your parent to start setting this up If you have questions, contact your IT admin diff --git a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java index 68b202108b6..5d11d4ab3a6 100644 --- a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java +++ b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java @@ -79,4 +79,14 @@ class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider { public String getDisabledByPolicyTitleForFinancedDevice() { return mContext.getString(R.string.disabled_by_policy_title_financed_device); } + + @Override + public String getDisabledBiometricsParentConsentTitle() { + return mContext.getString(R.string.disabled_by_policy_title_biometric_parental_consent); + } + + @Override + public String getDisabledBiometricsParentConsentContent() { + return mContext.getString(R.string.disabled_by_policy_content_biometric_parental_consent); + } } From 0c34d259a045de6ad74818bf18a636273b1c1a4a Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 15 Jun 2021 13:34:11 -0700 Subject: [PATCH 2/2] Show biometric-specific dialog when appropriate 1) We need to pass a "restriction" string from settings to the dialog, otherwise the biometric dialog could be shown in non-biometric flows 2) Updates ActionDisabledByAdminDialogHelper to pass the restrition to be taken into consideration when creating the controller 3) Sets an optional onClickListener on the positive button. Bug: 5788943 Test: atest ParentalControlsUtilsTest Change-Id: Iedff7fef50e186b2779f061f37d3080c910d2179 --- .../settings/biometrics/ParentalControlsUtils.java | 7 +++++-- .../enterprise/ActionDisabledByAdminDialog.java | 2 +- .../enterprise/ActionDisabledByAdminDialogHelper.java | 10 ++++++++-- .../settings/biometrics/ParentalControlsUtilsTest.java | 2 ++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/biometrics/ParentalControlsUtils.java b/src/com/android/settings/biometrics/ParentalControlsUtils.java index 2d3673b2de3..0959184b16f 100644 --- a/src/com/android/settings/biometrics/ParentalControlsUtils.java +++ b/src/com/android/settings/biometrics/ParentalControlsUtils.java @@ -22,6 +22,7 @@ import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.ParentalControlsUtilsInternal; import android.os.UserHandle; +import android.os.UserManager; import android.util.Log; import androidx.annotation.NonNull; @@ -49,7 +50,8 @@ public class ParentalControlsUtils { final UserHandle userHandle = new UserHandle(UserHandle.myUserId()); if (ParentalControlsUtilsInternal.isTestModeEnabled(context)) { Log.d(TAG, "Requiring consent for test flow"); - return new RestrictedLockUtils.EnforcedAdmin(null /* ComponentName */, userHandle); + return new RestrictedLockUtils.EnforcedAdmin(null /* ComponentName */, + UserManager.DISALLOW_BIOMETRIC, userHandle); } final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); @@ -69,7 +71,8 @@ public class ParentalControlsUtils { userHandle)) { final ComponentName cn = ParentalControlsUtilsInternal.getSupervisionComponentName(dpm, userHandle); - return new RestrictedLockUtils.EnforcedAdmin(cn, userHandle); + return new RestrictedLockUtils.EnforcedAdmin(cn, UserManager.DISALLOW_BIOMETRIC, + userHandle); } else { return null; } diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java index 717c5bcd757..ce7ad242056 100644 --- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java +++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java @@ -37,7 +37,7 @@ public class ActionDisabledByAdminDialog extends Activity final RestrictedLockUtils.EnforcedAdmin enforcedAdmin = getAdminDetailsFromIntent(getIntent()); final String restriction = getRestrictionFromIntent(getIntent()); - mDialogHelper = new ActionDisabledByAdminDialogHelper(this); + mDialogHelper = new ActionDisabledByAdminDialogHelper(this, restriction); mDialogHelper.prepareDialogBuilder(restriction, enforcedAdmin) .setOnDismissListener(this) .show(); diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java index 5da076736e9..e30f8900655 100644 --- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java +++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java @@ -56,11 +56,16 @@ public final class ActionDisabledByAdminDialogHelper { private final Activity mActivity; public ActionDisabledByAdminDialogHelper(Activity activity) { + this(activity, null /* restriction */); + } + + public ActionDisabledByAdminDialogHelper(Activity activity, String restriction) { mActivity = activity; mDialogView = (ViewGroup) LayoutInflater.from(mActivity).inflate( R.layout.admin_support_details_dialog, null); mActionDisabledByAdminController = ActionDisabledByAdminControllerFactory - .createInstance(mActivity, new DeviceAdminStringProviderImpl(mActivity)); + .createInstance(mActivity, restriction, + new DeviceAdminStringProviderImpl(mActivity)); } private @UserIdInt int getEnforcementAdminUserId(@NonNull EnforcedAdmin admin) { @@ -74,7 +79,8 @@ public final class ActionDisabledByAdminDialogHelper { public AlertDialog.Builder prepareDialogBuilder(String restriction, EnforcedAdmin enforcedAdmin) { AlertDialog.Builder builder = new AlertDialog.Builder(mActivity) - .setPositiveButton(R.string.okay, null) + .setPositiveButton(R.string.okay, + mActionDisabledByAdminController.getPositiveButtonListener()) .setView(mDialogView); prepareDialogBuilder(builder, restriction, enforcedAdmin); return builder; diff --git a/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java b/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java index a820d655ceb..5128af0d410 100644 --- a/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java +++ b/tests/unit/src/com/android/settings/biometrics/ParentalControlsUtilsTest.java @@ -35,6 +35,7 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_IRIS; import android.hardware.biometrics.BiometricAuthenticator; import android.os.UserHandle; +import android.os.UserManager; import androidx.annotation.Nullable; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -92,6 +93,7 @@ public class ParentalControlsUtilsTest { mSupervisionComponentName, tests[i][0] /* modality */, tests[i][1] /* keyguardDisableFlags */); assertNotNull(admin); + assertEquals(UserManager.DISALLOW_BIOMETRIC, admin.enforcedRestriction); assertEquals(mSupervisionComponentName, admin.component); } }