From 131488dd3df456e609019428f3382ec2188f2383 Mon Sep 17 00:00:00 2001 From: Paul Hu Date: Thu, 11 Aug 2022 06:47:21 +0000 Subject: [PATCH] Receive user added/removed intents from PermissionMonitor Currently, CS would receive user added/removed intents and notify PermissionMonitor by onUser[Added|Removed] methods. If PermissionMonitor can receive those intents itself, it can process the change more quickly. Moreover, these two methods do not need to be public. Thus, receive the intents from PermissionMonitor and make these two methods as package private. Bug: 232048835 Test: atest FrameworksNetTests CtsNetTestCases Change-Id: I744cfbf5035badc6a0ba1764c5e6b93a56dfa93b --- .../android/server/ConnectivityService.java | 2 -- .../connectivity/PermissionMonitor.java | 30 +++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 218cbde072..6205d328db 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -6017,14 +6017,12 @@ public class ConnectivityService extends IConnectivityManager.Stub } private void onUserAdded(@NonNull final UserHandle user) { - mPermissionMonitor.onUserAdded(user); if (mOemNetworkPreferences.getNetworkPreferences().size() > 0) { handleSetOemNetworkPreference(mOemNetworkPreferences, null); } } private void onUserRemoved(@NonNull final UserHandle user) { - mPermissionMonitor.onUserRemoved(user); // If there was a network preference for this user, remove it. handleSetProfileNetworkPreference( List.of(new ProfileNetworkPreferenceList.Preference(user, null, true)), diff --git a/service/src/com/android/server/connectivity/PermissionMonitor.java b/service/src/com/android/server/connectivity/PermissionMonitor.java index aeca7175a5..eee7f3a107 100755 --- a/service/src/com/android/server/connectivity/PermissionMonitor.java +++ b/service/src/com/android/server/connectivity/PermissionMonitor.java @@ -175,6 +175,22 @@ public class PermissionMonitor { final String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); onExternalApplicationsAvailable(pkgList); + } else if (Intent.ACTION_USER_ADDED.equals(action)) { + final UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); + // User should be filled for below intents, check the existence. + if (user == null) { + Log.wtf(TAG, action + " broadcast without EXTRA_USER"); + return; + } + onUserAdded(user); + } else if (Intent.ACTION_USER_REMOVED.equals(action)) { + final UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); + // User should be filled for below intents, check the existence. + if (user == null) { + Log.wtf(TAG, action + " broadcast without EXTRA_USER"); + return; + } + onUserRemoved(user); } else { Log.wtf(TAG, "received unexpected intent: " + action); } @@ -408,6 +424,14 @@ public class PermissionMonitor { mIntentReceiver, externalIntentFilter, null /* broadcastPermission */, null /* scheduler */); + // Listen for user add/remove. + final IntentFilter userIntentFilter = new IntentFilter(); + userIntentFilter.addAction(Intent.ACTION_USER_ADDED); + userIntentFilter.addAction(Intent.ACTION_USER_REMOVED); + userAllContext.registerReceiver( + mIntentReceiver, userIntentFilter, null /* broadcastPermission */, + null /* scheduler */); + // Register UIDS_ALLOWED_ON_RESTRICTED_NETWORKS setting observer mDeps.registerContentObserver( userAllContext, @@ -547,7 +571,8 @@ public class PermissionMonitor { * * @hide */ - public synchronized void onUserAdded(@NonNull UserHandle user) { + @VisibleForTesting + synchronized void onUserAdded(@NonNull UserHandle user) { mUsers.add(user); final List apps = getInstalledPackagesAsUser(user); @@ -578,7 +603,8 @@ public class PermissionMonitor { * * @hide */ - public synchronized void onUserRemoved(@NonNull UserHandle user) { + @VisibleForTesting + synchronized void onUserRemoved(@NonNull UserHandle user) { mUsers.remove(user); // Remove uids network permissions that belongs to the user.