From 19904c7f3eecdb128ea5f56f68ad2db9e8a44547 Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Thu, 28 Apr 2022 15:12:07 +0800 Subject: [PATCH] Fix incorrect PackageSetting in the SharedUserSetting Notifies SharedUserSetting if there's any changes from watched array members. Fix: 230597465 Test: atest PackageManagerSettingsTests Change-Id: Ia20efe159bc8991aa4786de2ba5e1e9772c21ac5 --- .../android/server/pm/SharedUserSetting.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java index 23f0de8a5f716..58be878520263 100644 --- a/services/core/java/com/android/server/pm/SharedUserSetting.java +++ b/services/core/java/com/android/server/pm/SharedUserSetting.java @@ -17,6 +17,7 @@ package com.android.server.pm; import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.pm.ApplicationInfo; import android.content.pm.SigningDetails; import android.service.pm.PackageServiceDumpProto; @@ -33,7 +34,9 @@ import com.android.server.pm.pkg.component.ComponentMutateUtils; import com.android.server.pm.pkg.component.ParsedProcess; import com.android.server.pm.pkg.component.ParsedProcessImpl; import com.android.server.utils.SnapshotCache; +import com.android.server.utils.Watchable; import com.android.server.utils.WatchedArraySet; +import com.android.server.utils.Watcher; import libcore.util.EmptyArray; @@ -66,6 +69,16 @@ public final class SharedUserSetting extends SettingBase implements SharedUserAp final WatchedArraySet mDisabledPackages; private final SnapshotCache> mDisabledPackagesSnapshot; + /** + * The observer that watches for changes from array members + */ + private final Watcher mObserver = new Watcher() { + @Override + public void onChange(@Nullable Watchable what) { + SharedUserSetting.this.onChanged(); + } + }; + final PackageSignatures signatures = new PackageSignatures(); Boolean signaturesChanged; @@ -97,6 +110,7 @@ public final class SharedUserSetting extends SettingBase implements SharedUserAp mDisabledPackagesSnapshot = new SnapshotCache.Auto<>(mDisabledPackages, mDisabledPackages, "SharedUserSetting.mDisabledPackages"); processes = new ArrayMap<>(); + registerObservers(); mSnapshot = makeCache(); } @@ -119,6 +133,11 @@ public final class SharedUserSetting extends SettingBase implements SharedUserAp mSnapshot = new SnapshotCache.Sealed<>(); } + private void registerObservers() { + mPackages.registerObserver(mObserver); + mDisabledPackages.registerObserver(mObserver); + } + /** * Return a read-only snapshot of this object. */