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
This commit is contained in:
Vitor Carvalho
2025-01-20 13:38:06 +00:00
parent 3aaf114753
commit ef34741cf2
2 changed files with 47 additions and 14 deletions

View File

@@ -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));

View File

@@ -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<UserInfo> 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<Intent> 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);