diff --git a/services/core/java/com/android/server/pm/AppsFilterBase.java b/services/core/java/com/android/server/pm/AppsFilterBase.java index 14140b5fe2640..5fa5de75eaf35 100644 --- a/services/core/java/com/android/server/pm/AppsFilterBase.java +++ b/services/core/java/com/android/server/pm/AppsFilterBase.java @@ -28,7 +28,6 @@ import android.content.pm.SigningDetails; import android.os.Binder; import android.os.Handler; import android.os.Process; -import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; import android.text.TextUtils; @@ -199,6 +198,7 @@ public abstract class AppsFilterBase implements AppsFilterSnapshot { protected SnapshotCache mShouldFilterCacheSnapshot; protected volatile boolean mCacheReady = false; + protected volatile boolean mCacheEnabled = true; protected static final boolean CACHE_VALID = true; protected static final boolean CACHE_INVALID = false; @@ -342,8 +342,7 @@ public abstract class AppsFilterBase implements AppsFilterSnapshot { && !isImplicitlyQueryable(callingAppId, targetPkgSetting.getAppId()); } // use cache - if (mCacheReady && SystemProperties.getBoolean("debug.pm.use_app_filter_cache", - true)) { + if (mCacheReady && mCacheEnabled) { if (!shouldFilterApplicationUsingCache(callingUid, targetPkgSetting.getAppId(), userId)) { diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java index 79d72a3ad7f0c..4c21195e28903 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -36,6 +36,7 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.SigningDetails; import android.content.pm.UserInfo; import android.os.Handler; +import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; import android.provider.DeviceConfig; @@ -223,6 +224,12 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, return new AppsFilterSnapshotImpl(AppsFilterImpl.this); } }; + readCacheEnabledSysProp(); + SystemProperties.addChangeCallback(this::readCacheEnabledSysProp); + } + + private void readCacheEnabledSysProp() { + mCacheEnabled = SystemProperties.getBoolean("debug.pm.use_app_filter_cache", true); } /** diff --git a/services/core/java/com/android/server/pm/AppsFilterSnapshotImpl.java b/services/core/java/com/android/server/pm/AppsFilterSnapshotImpl.java index 019c853471fe5..4e268a277102b 100644 --- a/services/core/java/com/android/server/pm/AppsFilterSnapshotImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterSnapshotImpl.java @@ -74,6 +74,7 @@ public final class AppsFilterSnapshotImpl extends AppsFilterBase { // cache is not ready, use an empty cache for the snapshot mShouldFilterCache = new WatchedSparseBooleanMatrix(); } + mCacheEnabled = orig.mCacheEnabled; mShouldFilterCacheSnapshot = new SnapshotCache.Sealed<>(); mBackgroundHandler = null;