From 6dc6d2b96498bcca132913dbfc6338f8f9f6c697 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 21 Aug 2020 14:00:03 -0700 Subject: [PATCH] Deprecated UserManager.getUsers(excludeDying) / added getAliveUsers() The existing method is confusing (the argument used to be called includeDying) and it puts the burden on the caller (which need to understand what the parameter means). Furthermore: - The majority of calls are for getUsers(excludeDying=true). - The calls for getUsers(excludeDying=false) are equivalent to calls to getUsers() Test: m Test: a VpnTest ConnectivityServiceTest PermissionMonitorTest Bug: 157921703 Change-Id: Ife767a40b7b7790ba28b5377046de822ddbf275c --- core/java/android/os/UserManager.java | 44 +++++++++++++++---- .../connectivity/PermissionMonitor.java | 2 +- .../com/android/server/connectivity/Vpn.java | 2 +- .../server/ConnectivityServiceTest.java | 2 +- .../connectivity/PermissionMonitorTest.java | 2 +- .../android/server/connectivity/VpnTest.java | 5 +-- 6 files changed, 41 insertions(+), 16 deletions(-) diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 2465b0e418766..81a147c68e2e2 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -43,7 +43,6 @@ import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.UserInfo; import android.content.pm.UserInfo.UserInfoFlag; -import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -3174,28 +3173,55 @@ public class UserManager { } /** - * Returns information for all users on this device, including ones marked for deletion. - * To retrieve only users that are alive, use {@link #getUsers(boolean)}. + * Returns information for all fully-created users on this device, including ones marked for + * deletion. + * + *

To retrieve only users that are not marked for deletion, use {@link #getAliveUsers()}. + * + *

To retrieve *all* users (including partial and pre-created users), use + * {@link #getUsers(boolean, boolean, boolean)) getUsers(false, false, false)}. + * + *

To retrieve a more specific list of users, use + * {@link #getUsers(boolean, boolean, boolean)}. + * + * @return the list of users that were created. * - * @return the list of users that exist on the device. * @hide */ @UnsupportedAppUsage @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public List getUsers() { - return getUsers(/* excludeDying= */ false); + return getUsers(/*excludePartial= */ true, /* excludeDying= */ false, + /* excludePreCreated= */ true); } /** - * Returns information for all users on this device. Requires - * {@link android.Manifest.permission#MANAGE_USERS} permission. + * Returns information for all "usable" users on this device (i.e, it excludes users that are + * marked for deletion, pre-created users, etc...). + * + *

To retrieve all fully-created users, use {@link #getUsers()}. + * + *

To retrieve a more specific list of users, use + * {@link #getUsers(boolean, boolean, boolean)}. * - * @param excludeDying specify if the list should exclude users being - * removed. * @return the list of users that were created. * @hide */ + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) + public @NonNull List getAliveUsers() { + return getUsers(/*excludePartial= */ true, /* excludeDying= */ true, + /* excludePreCreated= */ true); + } + + /** + * @deprecated use {@link #getAliveUsers()} for {@code getUsers(true)}, or + * {@link #getUsers()} for @code getUsers(false)}. + * + * @hide + */ + @Deprecated @UnsupportedAppUsage + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public @NonNull List getUsers(boolean excludeDying) { return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */ true); diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java index 7f9b3c9fcff76..06e9ae782d00a 100644 --- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java +++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java @@ -226,7 +226,7 @@ public class PermissionMonitor implements PackageManagerInternal.PackageListObse netdPermsUids.put(uid, permInfo); } - List users = mUserManager.getUsers(true); // exclude dying users + List users = mUserManager.getAliveUsers(); if (users != null) { for (UserInfo user : users) { mUsers.add(user.id); diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index 5484bfca5851c..7175489614ea9 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -1463,7 +1463,7 @@ public class Vpn { final long token = Binder.clearCallingIdentity(); List users; try { - users = UserManager.get(mContext).getUsers(true); + users = UserManager.get(mContext).getAliveUsers(); } finally { Binder.restoreCallingIdentity(token); } diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index a3673df1c7138..bcb5c992f162c 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -1199,7 +1199,7 @@ public class ConnectivityServiceTest { MockitoAnnotations.initMocks(this); when(mMetricsService.defaultNetworkMetrics()).thenReturn(mDefaultNetworkMetrics); - when(mUserManager.getUsers(eq(true))).thenReturn( + when(mUserManager.getAliveUsers()).thenReturn( Arrays.asList(new UserInfo[] { new UserInfo(VPN_USER, "", 0), })); diff --git a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java index ab12ac0ef56e9..f74f6a51b129f 100644 --- a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java @@ -127,7 +127,7 @@ public class PermissionMonitorTest { MockitoAnnotations.initMocks(this); when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mContext.getSystemService(eq(Context.USER_SERVICE))).thenReturn(mUserManager); - when(mUserManager.getUsers(eq(true))).thenReturn( + when(mUserManager.getAliveUsers()).thenReturn( Arrays.asList(new UserInfo[] { new UserInfo(MOCK_USER1, "", 0), new UserInfo(MOCK_USER2, "", 0), diff --git a/tests/net/java/com/android/server/connectivity/VpnTest.java b/tests/net/java/com/android/server/connectivity/VpnTest.java index e8c4ee9c628dd..c76b4cd501e75 100644 --- a/tests/net/java/com/android/server/connectivity/VpnTest.java +++ b/tests/net/java/com/android/server/connectivity/VpnTest.java @@ -1238,15 +1238,14 @@ public class VpnTest { * @see UserManagerService#getUsers(boolean) */ doAnswer(invocation -> { - final boolean excludeDying = (boolean) invocation.getArguments()[0]; final ArrayList result = new ArrayList<>(users.length); for (UserInfo ui : users) { - if (!excludeDying || (ui.isEnabled() && !ui.partial)) { + if (ui.isEnabled() && !ui.partial) { result.add(ui); } } return result; - }).when(mUserManager).getUsers(anyBoolean()); + }).when(mUserManager).getAliveUsers(); doAnswer(invocation -> { final int id = (int) invocation.getArguments()[0];