diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index ca56e9bf36ce8..09ae8fc4e03aa 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -102,8 +102,8 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES; -// TODO (b/178655595) import static android.net.ConnectivityManager.USER_PREFERENCE_ENTERPRISE; -// TODO (b/178655595) import static android.net.ConnectivityManager.USER_PREFERENCE_SYSTEM_DEFAULT; +import static android.net.ConnectivityManager.PROFILE_NETWORK_PREFERENCE_DEFAULT; +import static android.net.ConnectivityManager.PROFILE_NETWORK_PREFERENCE_ENTERPRISE; import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK; import static android.provider.Settings.Global.PRIVATE_DNS_MODE; import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER; @@ -3089,13 +3089,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { updatePermissionPolicyCache(userId); updateAdminCanGrantSensorsPermissionCache(userId); - boolean enableEnterpriseNetworkSlice = true; + boolean enableEnterpriseNetworkPreferenceEnabled = true; synchronized (getLockObject()) { ActiveAdmin owner = getDeviceOrProfileOwnerAdminLocked(userId); - enableEnterpriseNetworkSlice = owner != null + enableEnterpriseNetworkPreferenceEnabled = owner != null ? owner.mEnterpriseNetworkPreferenceEnabled : true; } - updateNetworkPreferenceForUser(userId, enableEnterpriseNetworkSlice); + updateNetworkPreferenceForUser(userId, enableEnterpriseNetworkPreferenceEnabled); startOwnerService(userId, "start-user"); } @@ -17009,18 +17009,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - private void updateNetworkPreferenceForUser(int userId, boolean enableEnterprise) { + private void updateNetworkPreferenceForUser(int userId, + boolean enableEnterpriseNetworkPreferenceEnabled) { if (!isManagedProfile(userId)) { return; } - // TODO(b/178655595) - // int networkPreference = enable ? ConnectivityManager.USER_PREFERENCE_ENTERPRISE : - // ConnectivityManager.USER_PREFERENCE_SYSTEM_DEFAULT; - // mInjector.binderWithCleanCallingIdentity(() -> - // mInjector.getConnectivityManager().setNetworkPreferenceForUser( - // UserHandle.of(userId), - // networkPreference, - // null /* executor */, null /* listener */)); + int networkPreference = enableEnterpriseNetworkPreferenceEnabled + ? PROFILE_NETWORK_PREFERENCE_ENTERPRISE : PROFILE_NETWORK_PREFERENCE_DEFAULT; + mInjector.binderWithCleanCallingIdentity(() -> + mInjector.getConnectivityManager().setProfileNetworkPreference( + UserHandle.of(userId), + networkPreference, + null /* executor */, null /* listener */)); } @Override diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 557d07c638f18..7dbc65ea2ad28 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -92,6 +92,7 @@ import android.content.pm.StringParceledListSlice; import android.content.pm.UserInfo; import android.graphics.Color; import android.hardware.usb.UsbManager; +import android.net.ConnectivityManager; import android.net.Uri; import android.os.Build.VERSION_CODES; import android.os.Bundle; @@ -4017,23 +4018,27 @@ public class DevicePolicyManagerTest extends DpmTestBase { @Test public void testUpdateNetworkPreferenceOnStartOnStopUser() throws Exception { - dpms.handleStartUser(CALLER_USER_HANDLE); - // TODO(b/178655595) - // verify(getServices().connectivityManager, times(1)).setNetworkPreferenceForUser( - // any(UserHandle.class), - // anyInt(), - // any(Executor.class), - // any(Runnable.class) - //); + final int managedProfileUserId = 15; + final int managedProfileAdminUid = UserHandle.getUid(managedProfileUserId, 19436); + addManagedProfile(admin1, managedProfileAdminUid, admin1); + mContext.binder.callingUid = managedProfileAdminUid; + mServiceContext.permissions.add(permission.INTERACT_ACROSS_USERS_FULL); - dpms.handleStopUser(CALLER_USER_HANDLE); - // TODO(b/178655595) - // verify(getServices().connectivityManager, times(1)).setNetworkPreferenceForUser( - // any(UserHandle.class), - // eq(ConnectivityManager.USER_PREFERENCE_SYSTEM_DEFAULT), - // any(Executor.class), - // any(Runnable.class) - //); + dpms.handleStartUser(managedProfileUserId); + verify(getServices().connectivityManager, times(1)).setProfileNetworkPreference( + eq(UserHandle.of(managedProfileUserId)), + anyInt(), + any(), + any() + ); + + dpms.handleStopUser(managedProfileUserId); + verify(getServices().connectivityManager, times(1)).setProfileNetworkPreference( + eq(UserHandle.of(managedProfileUserId)), + eq(ConnectivityManager.PROFILE_NETWORK_PREFERENCE_DEFAULT), + any(), + any() + ); } @Test @@ -4044,26 +4049,28 @@ public class DevicePolicyManagerTest extends DpmTestBase { assertExpectException(SecurityException.class, null, () -> dpm.isEnterpriseNetworkPreferenceEnabled()); - setupProfileOwner(); + final int managedProfileUserId = 15; + final int managedProfileAdminUid = UserHandle.getUid(managedProfileUserId, 19436); + addManagedProfile(admin1, managedProfileAdminUid, admin1); + mContext.binder.callingUid = managedProfileAdminUid; + dpm.setEnterpriseNetworkPreferenceEnabled(false); assertThat(dpm.isEnterpriseNetworkPreferenceEnabled()).isFalse(); - // TODO(b/178655595) - // verify(getServices().connectivityManager, times(1)).setNetworkPreferenceForUser( - // any(UserHandle.class), - // eq(ConnectivityManager.USER_PREFERENCE_SYSTEM_DEFAULT), - // any(Executor.class), - // any(Runnable.class) - //); + verify(getServices().connectivityManager, times(1)).setProfileNetworkPreference( + eq(UserHandle.of(managedProfileUserId)), + eq(ConnectivityManager.PROFILE_NETWORK_PREFERENCE_DEFAULT), + any(), + any() + ); dpm.setEnterpriseNetworkPreferenceEnabled(true); assertThat(dpm.isEnterpriseNetworkPreferenceEnabled()).isTrue(); - // TODO(b/178655595) - // verify(getServices().connectivityManager, times(1)).setNetworkPreferenceForUser( - // any(UserHandle.class), - // eq(ConnectivityManager.USER_PREFERENCE_ENTERPRISE), - // any(Executor.class), - // any(Runnable.class) - //); + verify(getServices().connectivityManager, times(1)).setProfileNetworkPreference( + eq(UserHandle.of(managedProfileUserId)), + eq(ConnectivityManager.PROFILE_NETWORK_PREFERENCE_ENTERPRISE), + any(), + any() + ); } @Test