diff options
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java index 8e5396fef744..d9024575f247 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java @@ -19,6 +19,7 @@ package com.android.settingslib; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE; import static android.app.admin.DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY; import static android.app.admin.DevicePolicyManager.PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER; +import static android.app.role.RoleManager.ROLE_FINANCED_DEVICE_KIOSK; import static com.android.settingslib.Utils.getColorAttrDefaultColor; @@ -27,6 +28,7 @@ import android.annotation.UserIdInt; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.admin.DevicePolicyManager; +import android.app.role.RoleManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -70,6 +72,10 @@ public class RestrictedLockUtilsInternal extends RestrictedLockUtils { private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG); private static final Set<String> ECM_KEYS = new ArraySet<>(); + // TODO(b/281701062): reference role name from role manager once its exposed. + private static final String ROLE_DEVICE_LOCK_CONTROLLER = + "android.app.role.SYSTEM_FINANCED_DEVICE_CONTROLLER"; + static { if (android.security.Flags.extendEcmToAllSettings()) { ECM_KEYS.add(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW); @@ -476,16 +482,27 @@ public class RestrictedLockUtilsInternal extends RestrictedLockUtils { } /** - * Check if {@param packageName} is restricted by the profile or device owner from using - * metered data. + * Check if user control over metered data usage of {@code packageName} is disabled by the + * profile or device owner. * * @return EnforcedAdmin object containing the enforced admin component and admin user details, - * or {@code null} if the {@param packageName} is not restricted. + * or {@code null} if the user control is not disabled. */ - public static EnforcedAdmin checkIfMeteredDataRestricted(Context context, + public static EnforcedAdmin checkIfMeteredDataUsageUserControlDisabled(Context context, String packageName, int userId) { + RoleManager roleManager = context.getSystemService(RoleManager.class); + UserHandle userHandle = getUserHandleOf(userId); + if (roleManager.getRoleHoldersAsUser(ROLE_FINANCED_DEVICE_KIOSK, userHandle) + .contains(packageName) + || roleManager.getRoleHoldersAsUser(ROLE_DEVICE_LOCK_CONTROLLER, userHandle) + .contains(packageName)) { + // There is no actual device admin for a financed device, but metered data usage + // control should still be disabled for both controller and kiosk apps. + return new EnforcedAdmin(); + } + final EnforcedAdmin enforcedAdmin = getProfileOrDeviceOwner(context, - getUserHandleOf(userId)); + userHandle); if (enforcedAdmin == null) { return null; } |