From 62df3efdd778e5d1e9ae3a09422bf9ca88970c96 Mon Sep 17 00:00:00 2001 From: josephpv Date: Wed, 7 Feb 2024 23:58:00 +0000 Subject: [PATCH] Handle listing of PS apps in Apps > Special App Access > Device Admin Apps Currently Device Admin Apps page shows apps from Private space even when PS is locked. This change takes care to hide PS apps from the list when private profile is in quiet mode and on disabling quiet mode PS apps are shown in the list. Also takes care to update the active apps summary count to not include PS apps when private profile is in quiet mode. Recording link : b/324311892#comment2 Bug: 324311892 Test: Manual Change-Id: If4199ecad0a228c8e491778fb62c09c8b3f20604 --- .../DeviceAdminListPreferenceController.java | 12 ++++++++++++ .../EnterprisePrivacyFeatureProviderImpl.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java index 55ba8acafad..949577b8c14 100644 --- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java @@ -32,6 +32,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.UserProperties; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; @@ -156,12 +157,23 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle mAdmins.clear(); final List profiles = mUm.getUserProfiles(); for (UserHandle profile : profiles) { + if (shouldSkipProfile(profile)) { + continue; + } final int profileId = profile.getIdentifier(); updateAvailableAdminsForProfile(profileId); } Collections.sort(mAdmins); } + private boolean shouldSkipProfile(UserHandle profile) { + return android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace() + && mUm.isQuietModeEnabled(profile) + && mUm.getUserProperties(profile).getShowInQuietMode() + == UserProperties.SHOW_IN_QUIET_MODE_HIDDEN; + } + private void refreshUI() { if (mPreferenceGroup == null) { return; diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index b1ffcf145b4..887fc3215a2 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; +import android.content.pm.UserProperties; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.VpnManager; @@ -220,6 +221,9 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe public int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile() { int activeAdmins = 0; for (final UserInfo userInfo : mUm.getProfiles(MY_USER_ID)) { + if (shouldSkipProfile(userInfo)) { + continue; + } final List activeAdminsForUser = mDpm.getActiveAdminsAsUser(userInfo.id); if (activeAdminsForUser != null) { @@ -250,6 +254,14 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return false; } + private boolean shouldSkipProfile(UserInfo userInfo) { + return android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace() + && userInfo.isQuietModeEnabled() + && mUm.getUserProperties(userInfo.getUserHandle()).getShowInQuietMode() + == UserProperties.SHOW_IN_QUIET_MODE_HIDDEN; + } + private Intent getParentalControlsIntent() { final ComponentName componentName = mDpm.getProfileOwnerOrDeviceOwnerSupervisionComponent(new UserHandle(MY_USER_ID));