Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 371a65e5 authored by Evan Chen's avatar Evan Chen
Browse files

Make sure to disassociate all the packages with shared UID

Test: cts
Bug: 427206637
Flag: Flag: EXEMPT bugfix
Change-Id: I751d724cefe415000646d1640c65e74af52a6688
Merged-In: I3cccad4e85e77916cff020eb7087ac2c355e3e23
parent 9b9bb3a2
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ public class CompanionDeviceManagerService extends SystemService {
    private final IAppOpsService mAppOpsManager;
    private final PowerWhitelistManager mPowerWhitelistManager;
    private final UserManager mUserManager;
    private final PackageManager mPackageManager;
    final PackageManagerInternal mPackageManagerInternal;

    /**
@@ -220,6 +221,7 @@ public class CompanionDeviceManagerService extends SystemService {
        mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
        mAmInternal = LocalServices.getService(ActivityManagerInternal.class);
        mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
        mPackageManager = context.getPackageManager();
        mUserManager = context.getSystemService(UserManager.class);

        mUserPersistenceHandler = new PersistUserStateHandler();
@@ -1585,8 +1587,10 @@ public class CompanionDeviceManagerService extends SystemService {
                return;
            }

            final String packageName = getPackageNameByUid(uid);
            if (packageName == null) {
            // A UID can be shared by multiple packages if android:sharedUserId is used.
            // We must get all packages for the UID to ensure we find the correct one.
            final String[] packageNames = mPackageManager.getPackagesForUid(uid);
            if (packageNames == null || packageNames.length == 0) {
                // Not interested in this uid.
                return;
            }
@@ -1595,6 +1599,7 @@ public class CompanionDeviceManagerService extends SystemService {

            boolean needToPersistStateForUser = false;

            for (String packageName : packageNames) {
                for (AssociationInfo association :
                        getPendingRoleHolderRemovalAssociationsForUser(userId)) {
                    if (!packageName.equals(association.getPackageName())) continue;
@@ -1607,6 +1612,7 @@ public class CompanionDeviceManagerService extends SystemService {
                    removeFromPendingRoleHolderRemoval(association);
                    needToPersistStateForUser = true;
                }
            }

            if (needToPersistStateForUser) {
                mUserPersistenceHandler.postPersistUserState(userId);