summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/SharedUserSetting.java19
1 files changed, 19 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java
index 23f0de8a5f71..58be87852026 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<PackageSetting> mDisabledPackages;
private final SnapshotCache<WatchedArraySet<PackageSetting>> 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.
*/