Loading packages/SettingsLib/src/com/android/settingslib/enterprise/ActionDisabledByAdminControllerFactory.java +12 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static com.android.settingslib.enterprise.ActionDisabledLearnMoreButtonLa import static com.android.settingslib.enterprise.ManagedDeviceActionDisabledByAdminController.DEFAULT_FOREGROUND_USER_CHECKER; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.ParentalControlsUtilsInternal; Loading @@ -45,6 +46,8 @@ public final class ActionDisabledByAdminControllerFactory { return new BiometricActionDisabledByAdminController(stringProvider); } else if (isFinancedDevice(context)) { return new FinancedDeviceActionDisabledByAdminController(stringProvider); } else if (isSupervisedDevice(context)) { return new SupervisedDeviceActionDisabledByAdminController(stringProvider, restriction); } else { return new ManagedDeviceActionDisabledByAdminController( stringProvider, Loading @@ -54,6 +57,15 @@ public final class ActionDisabledByAdminControllerFactory { } } private static boolean isSupervisedDevice(Context context) { DevicePolicyManager devicePolicyManager = context.getSystemService(DevicePolicyManager.class); ComponentName supervisionComponent = devicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent( new UserHandle(UserHandle.myUserId())); return supervisionComponent != null; } /** * @return true if the restriction == UserManager.DISALLOW_BIOMETRIC and parental consent * is required. Loading packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java +5 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.provider.Settings; import android.util.Log; Loading Loading @@ -60,6 +61,10 @@ public class BiometricActionDisabledByAdminController extends BaseActionDisabled final Intent intent = new Intent(Settings.ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING) .putExtra(Settings.EXTRA_SUPERVISOR_RESTRICTED_SETTING_KEY, Settings.SUPERVISOR_VERIFICATION_SETTING_BIOMETRICS) .setData(new Uri.Builder() .scheme("policy") .appendPath("biometric") .build()) .setPackage(enforcedAdmin.component.getPackageName()); context.startActivity(intent); }; Loading packages/SettingsLib/src/com/android/settingslib/enterprise/DeviceAdminStringProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,11 @@ public interface DeviceAdminStringProvider { */ String getDisabledBiometricsParentConsentTitle(); /** * Returns the dialog title when the setting is blocked by supervision app. */ String getDisabledByParentContent(); /** * Returns the dialog contents for when biometrics require parental consent. */ Loading packages/SettingsLib/src/com/android/settingslib/enterprise/SupervisedDeviceActionDisabledByAdminController.java 0 → 100644 +79 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settingslib.enterprise; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.provider.Settings; import android.util.Log; import com.android.settingslib.RestrictedLockUtils; import org.jetbrains.annotations.Nullable; final class SupervisedDeviceActionDisabledByAdminController extends BaseActionDisabledByAdminController { private static final String TAG = "SupervisedDeviceActionDisabledByAdminController"; private final String mRestriction; SupervisedDeviceActionDisabledByAdminController( DeviceAdminStringProvider stringProvider, String restriction) { super(stringProvider); mRestriction = restriction; } @Override public void setupLearnMoreButton(Context context) { } @Override public String getAdminSupportTitle(@Nullable String restriction) { return mStringProvider.getDisabledBiometricsParentConsentTitle(); } @Override public CharSequence getAdminSupportContentString(Context context, @Nullable CharSequence supportMessage) { return mStringProvider.getDisabledByParentContent(); } @Nullable @Override public DialogInterface.OnClickListener getPositiveButtonListener(Context context, RestrictedLockUtils.EnforcedAdmin enforcedAdmin) { final Intent intent = new Intent(Settings.ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING) .setData(new Uri.Builder() .scheme("policy") .appendPath("user_restrictions") .appendPath(mRestriction) .build()) .setPackage(enforcedAdmin.component.getPackageName()); ComponentName resolvedSupervisionActivity = intent.resolveActivity(context.getPackageManager()); if (resolvedSupervisionActivity == null) { return null; } return (dialog, which) -> { Log.d(TAG, "Positive button clicked, component: " + enforcedAdmin.component); context.startActivity(intent); }; } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/enterprise/FakeDeviceAdminStringProvider.java +6 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ class FakeDeviceAdminStringProvider implements DeviceAdminStringProvider { "default_disabled_by_policy_title_financed_device"; static final String DEFAULT_BIOMETRIC_TITLE = "biometric_title"; static final String DEFAULT_BIOMETRIC_CONTENTS = "biometric_contents"; static final String DISABLED_BY_PARENT_CONTENT = "disabled_by_parent_constent"; static final DeviceAdminStringProvider DEFAULT_DEVICE_ADMIN_STRING_PROVIDER = new FakeDeviceAdminStringProvider(/* url = */ null); Loading Loading @@ -96,6 +97,11 @@ class FakeDeviceAdminStringProvider implements DeviceAdminStringProvider { return DEFAULT_BIOMETRIC_TITLE; } @Override public String getDisabledByParentContent() { return DISABLED_BY_PARENT_CONTENT; } @Override public String getDisabledBiometricsParentConsentContent() { return DEFAULT_BIOMETRIC_CONTENTS; Loading Loading
packages/SettingsLib/src/com/android/settingslib/enterprise/ActionDisabledByAdminControllerFactory.java +12 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static com.android.settingslib.enterprise.ActionDisabledLearnMoreButtonLa import static com.android.settingslib.enterprise.ManagedDeviceActionDisabledByAdminController.DEFAULT_FOREGROUND_USER_CHECKER; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.ParentalControlsUtilsInternal; Loading @@ -45,6 +46,8 @@ public final class ActionDisabledByAdminControllerFactory { return new BiometricActionDisabledByAdminController(stringProvider); } else if (isFinancedDevice(context)) { return new FinancedDeviceActionDisabledByAdminController(stringProvider); } else if (isSupervisedDevice(context)) { return new SupervisedDeviceActionDisabledByAdminController(stringProvider, restriction); } else { return new ManagedDeviceActionDisabledByAdminController( stringProvider, Loading @@ -54,6 +57,15 @@ public final class ActionDisabledByAdminControllerFactory { } } private static boolean isSupervisedDevice(Context context) { DevicePolicyManager devicePolicyManager = context.getSystemService(DevicePolicyManager.class); ComponentName supervisionComponent = devicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent( new UserHandle(UserHandle.myUserId())); return supervisionComponent != null; } /** * @return true if the restriction == UserManager.DISALLOW_BIOMETRIC and parental consent * is required. Loading
packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java +5 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.provider.Settings; import android.util.Log; Loading Loading @@ -60,6 +61,10 @@ public class BiometricActionDisabledByAdminController extends BaseActionDisabled final Intent intent = new Intent(Settings.ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING) .putExtra(Settings.EXTRA_SUPERVISOR_RESTRICTED_SETTING_KEY, Settings.SUPERVISOR_VERIFICATION_SETTING_BIOMETRICS) .setData(new Uri.Builder() .scheme("policy") .appendPath("biometric") .build()) .setPackage(enforcedAdmin.component.getPackageName()); context.startActivity(intent); }; Loading
packages/SettingsLib/src/com/android/settingslib/enterprise/DeviceAdminStringProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,11 @@ public interface DeviceAdminStringProvider { */ String getDisabledBiometricsParentConsentTitle(); /** * Returns the dialog title when the setting is blocked by supervision app. */ String getDisabledByParentContent(); /** * Returns the dialog contents for when biometrics require parental consent. */ Loading
packages/SettingsLib/src/com/android/settingslib/enterprise/SupervisedDeviceActionDisabledByAdminController.java 0 → 100644 +79 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settingslib.enterprise; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.provider.Settings; import android.util.Log; import com.android.settingslib.RestrictedLockUtils; import org.jetbrains.annotations.Nullable; final class SupervisedDeviceActionDisabledByAdminController extends BaseActionDisabledByAdminController { private static final String TAG = "SupervisedDeviceActionDisabledByAdminController"; private final String mRestriction; SupervisedDeviceActionDisabledByAdminController( DeviceAdminStringProvider stringProvider, String restriction) { super(stringProvider); mRestriction = restriction; } @Override public void setupLearnMoreButton(Context context) { } @Override public String getAdminSupportTitle(@Nullable String restriction) { return mStringProvider.getDisabledBiometricsParentConsentTitle(); } @Override public CharSequence getAdminSupportContentString(Context context, @Nullable CharSequence supportMessage) { return mStringProvider.getDisabledByParentContent(); } @Nullable @Override public DialogInterface.OnClickListener getPositiveButtonListener(Context context, RestrictedLockUtils.EnforcedAdmin enforcedAdmin) { final Intent intent = new Intent(Settings.ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING) .setData(new Uri.Builder() .scheme("policy") .appendPath("user_restrictions") .appendPath(mRestriction) .build()) .setPackage(enforcedAdmin.component.getPackageName()); ComponentName resolvedSupervisionActivity = intent.resolveActivity(context.getPackageManager()); if (resolvedSupervisionActivity == null) { return null; } return (dialog, which) -> { Log.d(TAG, "Positive button clicked, component: " + enforcedAdmin.component); context.startActivity(intent); }; } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/enterprise/FakeDeviceAdminStringProvider.java +6 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ class FakeDeviceAdminStringProvider implements DeviceAdminStringProvider { "default_disabled_by_policy_title_financed_device"; static final String DEFAULT_BIOMETRIC_TITLE = "biometric_title"; static final String DEFAULT_BIOMETRIC_CONTENTS = "biometric_contents"; static final String DISABLED_BY_PARENT_CONTENT = "disabled_by_parent_constent"; static final DeviceAdminStringProvider DEFAULT_DEVICE_ADMIN_STRING_PROVIDER = new FakeDeviceAdminStringProvider(/* url = */ null); Loading Loading @@ -96,6 +97,11 @@ class FakeDeviceAdminStringProvider implements DeviceAdminStringProvider { return DEFAULT_BIOMETRIC_TITLE; } @Override public String getDisabledByParentContent() { return DISABLED_BY_PARENT_CONTENT; } @Override public String getDisabledBiometricsParentConsentContent() { return DEFAULT_BIOMETRIC_CONTENTS; Loading