From 1ba894a8f87052a201938c90634b0e328dc0587a Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 15 Jan 2023 06:22:36 +0000 Subject: [PATCH] Deliver ACTION_USER_REMOVED broadcast as non-ordered. This is currently being sent as ordered in order to receive the finish callback. Since the modern broadcast queue supports a finish callback with the need for the broadcasts to be ordered, don't send this broadcast as ordered anymore. Bug: 253226131 Bug: 260158381 Test: atest ./tests/tests/multiuser/src/android/multiuser/cts/UserManagerTest.java Change-Id: Ifc012f32ca37acba955f3470afd875b5f096fd70 --- .../android/server/pm/UserManagerService.java | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index a8cf8cb2b0348..84dc6a4d5a422 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -31,7 +31,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.UserIdInt; -import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.ActivityManagerNative; @@ -44,6 +43,7 @@ import android.app.admin.DevicePolicyEventLogger; import android.app.admin.DevicePolicyManagerInternal; import android.content.BroadcastReceiver; import android.content.Context; +import android.content.IIntentReceiver; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; @@ -127,11 +127,8 @@ import com.android.server.LocalServices; import com.android.server.LockGuard; import com.android.server.SystemService; import com.android.server.am.UserState; -import com.android.server.pm.UserManagerInternal.UserAssignmentResult; import com.android.server.pm.UserManagerInternal.UserLifecycleListener; import com.android.server.pm.UserManagerInternal.UserRestrictionsListener; -import com.android.server.pm.UserManagerInternal.UserStartMode; -import com.android.server.pm.UserManagerInternal.UserVisibilityListener; import com.android.server.storage.DeviceStorageMonitorInternal; import com.android.server.utils.Slogf; import com.android.server.utils.TimingsTraceAndSlog; @@ -5598,29 +5595,24 @@ public class UserManagerService extends IUserManager.Stub { // Also, add the UserHandle for mainline modules which can't use the @hide // EXTRA_USER_HANDLE. removedIntent.putExtra(Intent.EXTRA_USER, UserHandle.of(userId)); - mContext.sendOrderedBroadcastAsUser(removedIntent, UserHandle.ALL, - android.Manifest.permission.MANAGE_USERS, - - new BroadcastReceiver() { + getActivityManagerInternal().broadcastIntentWithCallback(removedIntent, + new IIntentReceiver.Stub() { @Override - public void onReceive(Context context, Intent intent) { + public void performReceive(Intent intent, int resultCode, String data, + Bundle extras, boolean ordered, boolean sticky, int sendingUser) { if (DBG) { Slog.i(LOG_TAG, "USER_REMOVED broadcast sent, cleaning up user data " - + userId); + + userId); } - new Thread() { - @Override - public void run() { - LocalServices.getService(ActivityManagerInternal.class) - .onUserRemoved(userId); - removeUserState(userId); - } - }.start(); + new Thread(() -> { + getActivityManagerInternal().onUserRemoved(userId); + removeUserState(userId); + }).start(); } }, - - null, Activity.RESULT_OK, null, null); + new String[] {android.Manifest.permission.MANAGE_USERS}, + UserHandle.USER_ALL, null, null, null); } finally { Binder.restoreCallingIdentity(ident); }