Register package broadcast receivers for all users.

The existing code is already handling multi-user by reading EXTRA_UID,
however the broadcast receiver was only registered for the primary
user. So we just need to register it for all users.

Fixes: 150038154
Fixes: 153600945
Test: adb shell pm create-user "Test user"
Test: adb shell am switch-user 10
Test: atest android.app.appops.cts.AttributionTest
Change-Id: I90f5989e858487a780aada00ba2fa7c2e08ff834
This commit is contained in:
Hai Zhang
2020-06-29 18:13:21 -07:00
parent 44d6bc8594
commit 89438e0c37

View File

@@ -1597,7 +1597,8 @@ public class AppOpsService extends IAppOpsService.Stub {
packageUpdateFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
packageUpdateFilter.addDataScheme("package");
mContext.registerReceiver(mOnPackageUpdatedReceiver, packageUpdateFilter);
mContext.registerReceiverAsUser(mOnPackageUpdatedReceiver, UserHandle.ALL,
packageUpdateFilter, null, null);
synchronized (this) {
for (int uidNum = mUidStates.size() - 1; uidNum >= 0; uidNum--) {
@@ -1640,7 +1641,7 @@ public class AppOpsService extends IAppOpsService.Stub {
final IntentFilter packageSuspendFilter = new IntentFilter();
packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
mContext.registerReceiver(new BroadcastReceiver() {
mContext.registerReceiverAsUser(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final int[] changedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
@@ -1664,7 +1665,7 @@ public class AppOpsService extends IAppOpsService.Stub {
}
}
}
}, packageSuspendFilter);
}, UserHandle.ALL, packageSuspendFilter, null, null);
final IntentFilter packageAddedFilter = new IntentFilter();
packageAddedFilter.addAction(Intent.ACTION_PACKAGE_ADDED);