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

Commit 58c458df authored by Sergey Nikolaienkov's avatar Sergey Nikolaienkov
Browse files

Clear CDM associations onPackageDataCleared

Bug: 205926405
Test: atest CtsCompanionDevicesTestCases:AssociationsCleanUpTest
Change-Id: I17a5e94784136ad0406f0450ba6ef40ca99467f6
parent 7918a89b
Loading
Loading
Loading
Loading
+25 −15
Original line number Diff line number Diff line
@@ -225,26 +225,28 @@ public class CompanionDeviceManagerService extends SystemService {
        new PackageMonitor() {
            @Override
            public void onPackageRemoved(String packageName, int uid) {
                Slog.d(LOG_TAG, "onPackageRemoved(packageName = " + packageName
                        + ", uid = " + uid + ")");
                int userId = getChangingUserId();
                updateAssociations(
                        set -> filterOut(set, it -> it.belongsToPackage(userId, packageName)),
                        userId);
                final int userId = getChangingUserId();
                Slog.i(LOG_TAG, "onPackageRemoved() u" + userId + "/" + packageName);

                mCompanionDevicePresenceController.unbindDevicePresenceListener(
                        packageName, userId);
                clearAssociationForPackage(userId, packageName);
            }

            @Override
            public void onPackageModified(String packageName) {
                Slog.d(LOG_TAG, "onPackageModified(packageName = " + packageName + ")");
                int userId = getChangingUserId();
                forEach(getAssociations(userId, packageName), association -> {
                    updateSpecialAccessPermissionForAssociatedPackage(association);
                });
            public void onPackageDataCleared(String packageName, int uid) {
                final int userId = getChangingUserId();
                Slog.i(LOG_TAG, "onPackageDataCleared() u" + userId + "/" + packageName);

                clearAssociationForPackage(userId, packageName);
            }

            @Override
            public void onPackageModified(String packageName) {
                final int userId = getChangingUserId();
                Slog.i(LOG_TAG, "onPackageModified() u" + userId + "/" + packageName);

                forEach(getAssociations(userId, packageName), association ->
                        updateSpecialAccessPermissionForAssociatedPackage(association));
            }
        }.register(getContext(), FgThread.get().getLooper(), UserHandle.ALL, true);
    }

@@ -742,6 +744,14 @@ public class CompanionDeviceManagerService extends SystemService {
        restartBleScan();
    }

    void clearAssociationForPackage(@UserIdInt int userId, @NonNull String packageName) {
        if (DEBUG) Slog.d(LOG_TAG, "clearAssociationForPackage() u" + userId + "/" + packageName);

        mCompanionDevicePresenceController.unbindDevicePresenceListener(packageName, userId);
        updateAssociations(set -> filterOut(set, it -> it.belongsToPackage(userId, packageName)),
                userId);
    }

    private void markIdAsPreviouslyUsedForPackage(
            int associationId, @UserIdInt int userId, @NonNull String packageName) {
        synchronized (mLock) {