From ef34741cf2f976425f20ead7bd53fafb97e65459 Mon Sep 17 00:00:00 2001 From: Vitor Carvalho Date: Mon, 20 Jan 2025 13:38:06 +0000 Subject: [PATCH] Update EnterprisePrivacyFeatureProviderImpl to obtain the parental controls intent from SupervisionIntentProvider. Bug: 382038391 Flag: android.app.supervision.flags.deprecate_dpm_supervision_apis Test: atest EnterprisePrivacyFeatureProviderImplTest Change-Id: Iab4308406257c18c5e6881747642a932ae54f78e --- .../EnterprisePrivacyFeatureProviderImpl.java | 8 ++- ...erprisePrivacyFeatureProviderImplTest.java | 53 ++++++++++++++----- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 0c8f4089628..6e2d4b02280 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -37,6 +37,7 @@ import android.text.SpannableStringBuilder; import com.android.settings.R; import com.android.settings.vpn2.VpnUtils; +import com.android.settingslib.supervision.SupervisionIntentProvider; import com.android.settingslib.utils.WorkPolicyUtils; import java.util.Date; @@ -44,6 +45,7 @@ import java.util.List; public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFeatureProvider { + @Deprecated public static final String ACTION_PARENTAL_CONTROLS = "android.settings.SHOW_PARENTAL_CONTROLS"; @@ -243,7 +245,10 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe @Override public boolean showParentalControls() { - Intent intent = getParentalControlsIntent(); + Intent intent = + android.app.supervision.flags.Flags.deprecateDpmSupervisionApis() + ? SupervisionIntentProvider.getSettingsIntent(mContext) + : getParentalControlsIntent(); if (intent != null) { mContext.startActivity(intent); return true; @@ -261,6 +266,7 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe == UserProperties.SHOW_IN_QUIET_MODE_HIDDEN; } + @Deprecated private Intent getParentalControlsIntent() { final ComponentName componentName = mDpm.getProfileOwnerOrDeviceOwnerSupervisionComponent(new UserHandle(MY_USER_ID)); diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index 87a447d1fbb..6fce10c95ba 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -26,9 +26,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; +import android.app.supervision.SupervisionManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -42,6 +44,9 @@ import android.net.ConnectivityManager; import android.net.VpnManager; import android.os.UserHandle; import android.os.UserManager; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.text.SpannableStringBuilder; @@ -51,8 +56,10 @@ import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -68,10 +75,13 @@ import java.util.List; @RunWith(RobolectricTestRunner.class) public class EnterprisePrivacyFeatureProviderImplTest { + @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + private static final String OWNER_ORGANIZATION = "ACME"; private static final String VPN_PACKAGE_ID = "com.example.vpn"; private static final String IME_PACKAGE_ID = "com.example.ime"; private static final String IME_PACKAGE_LABEL = "Test IME"; + private static final String SUPERVISION_PACKAGE = "com.supervision.app"; private final ComponentName mOwner = new ComponentName("mock", "component"); private final ComponentName mAdmin1 = new ComponentName("mock", "admin1"); @@ -82,19 +92,14 @@ public class EnterprisePrivacyFeatureProviderImplTest { private List mProfiles = new ArrayList<>(); - @Mock - private Context mContext; - @Mock - private DevicePolicyManager mDevicePolicyManager; - @Mock - private PackageManager mPackageManager; - @Mock - private UserManager mUserManager; - @Mock - private ConnectivityManager mConnectivityManger; - @Mock - private VpnManager mVpnManager; + @Mock private Context mContext; + @Mock private DevicePolicyManager mDevicePolicyManager; + @Mock private PackageManager mPackageManager; + @Mock private UserManager mUserManager; + @Mock private ConnectivityManager mConnectivityManager; + @Mock private VpnManager mVpnManager; private Resources mResources; + @Mock private SupervisionManager mSupervisionManager; private EnterprisePrivacyFeatureProvider mProvider; @@ -108,12 +113,14 @@ public class EnterprisePrivacyFeatureProviderImplTest { when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) .thenReturn(mDevicePolicyManager); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + when(mContext.getSystemService(SupervisionManager.class)) + .thenReturn(mSupervisionManager); when(mContext.getPackageManager()).thenReturn(mPackageManager); mProfiles.add(new UserInfo(mUserId, "", "", 0 /* flags */)); mResources = RuntimeEnvironment.application.getResources(); mProvider = new EnterprisePrivacyFeatureProviderImpl(mContext, mDevicePolicyManager, - mPackageManager, mUserManager, mConnectivityManger, mVpnManager, mResources); + mPackageManager, mUserManager, mConnectivityManager, mVpnManager, mResources); } @Test @@ -430,6 +437,7 @@ public class EnterprisePrivacyFeatureProviderImplTest { } @Test + @DisableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) public void testShowParentalControls() { when(mDevicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent(any())) .thenReturn(mOwner); @@ -440,6 +448,25 @@ public class EnterprisePrivacyFeatureProviderImplTest { verify(mContext).startActivity(intentEquals(intent)); } + @Test + @EnableFlags(android.app.supervision.flags.Flags.FLAG_DEPRECATE_DPM_SUPERVISION_APIS) + public void testShowParentalControls_usingSupervisionManager() { + when(mSupervisionManager.getActiveSupervisionAppPackage()) + .thenReturn(SUPERVISION_PACKAGE); + when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt())) + .thenReturn(ImmutableList.of(new ResolveInfo())); + + // If the intent is resolved, then we can use it to launch the activity. + assertThat(mProvider.showParentalControls()).isTrue(); + verifyNoMoreInteractions(mDevicePolicyManager); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivity(captor.capture()); + Intent intent = captor.getValue(); + assertThat(intent).isNotNull(); + assertThat(intent.getPackage()).isEqualTo(SUPERVISION_PACKAGE); + } + private Intent addWorkPolicyInfoIntent( String packageName, boolean deviceOwner, boolean profileOwner) { Intent intent = new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO);