From 0a04bdb7302a6282366f7b132ff463b060ee0e7c Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Fri, 2 Apr 2021 19:24:44 +0900 Subject: [PATCH] Fix a bug where the wrong profile is queried UserManager#isManagedProfile() is not aware of the user handle of the context the UM instance is created on. Instead, call isManagedProfile(int). Bug: 183625645 Test: ConnectivityServiceTest Change-Id: I1fef22d67d75df25a8c2d0694f857c3e1c1a1306 --- .../java/com/android/server/ConnectivityService.java | 10 ++-------- .../com/android/server/ConnectivityServiceTest.java | 1 + 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 58a921f0e3..a668cd701a 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -9211,14 +9211,8 @@ public class ConnectivityService extends IConnectivityManager.Stub throw new IllegalArgumentException("Must explicitly specify a user handle (" + "UserHandle.CURRENT not supported)"); } - final UserManager um; - try { - um = mContext.createContextAsUser(profile, 0 /* flags */) - .getSystemService(UserManager.class); - } catch (IllegalStateException e) { - throw new IllegalArgumentException("Profile does not exist"); - } - if (!um.isManagedProfile()) { + final UserManager um = mContext.getSystemService(UserManager.class); + if (!um.isManagedProfile(profile.getIdentifier())) { throw new IllegalArgumentException("Profile must be a managed profile"); } // Strictly speaking, mOemNetworkPreferences should only be touched on the diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 7ac488d7de..83e94fe047 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -572,6 +572,7 @@ public class ConnectivityServiceTest { final UserManager umMock = createContextAsUser(userHandle, 0 /* flags */) .getSystemService(UserManager.class); doReturn(value).when(umMock).isManagedProfile(); + doReturn(value).when(mUserManager).isManagedProfile(eq(userHandle.getIdentifier())); } @Override