diff options
| author | 2022-05-14 21:26:53 +0000 | |
|---|---|---|
| committer | 2022-05-14 21:26:53 +0000 | |
| commit | c110d9ff71723b647d9b9ae31b53e1014a2ed207 (patch) | |
| tree | 40bbfddd6f80da223ac269edf5f33add2cdbc87d | |
| parent | 065c279cb6a79ff0953f986d58f2687eb32a90e7 (diff) | |
| parent | c7c60d5ec18d399520a942cb678a06423921dacf (diff) | |
Merge "Add DeviceConfig flag for enforcing receiver restrictions" into tm-dev am: c7c60d5ec1
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18356870
Change-Id: I60c662cef850287bdc0e9778f553db9f723788c8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f6e8bc826153..aa510e7717eb 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1530,6 +1530,8 @@ public class ActivityManagerService extends IActivityManager.Stub // Encapsulates the global setting "hidden_api_blacklist_exemptions" final HiddenApiSettings mHiddenApiBlacklist; + final SdkSandboxSettings mSdkSandboxSettings; + private final PlatformCompat mPlatformCompat; PackageManagerInternal mPackageManagerInt; @@ -2235,6 +2237,53 @@ public class ActivityManagerService extends IActivityManager.Stub } } + /** + * Handles settings related to the enforcement of SDK sandbox restrictions. + */ + static class SdkSandboxSettings implements DeviceConfig.OnPropertiesChangedListener { + + private final Context mContext; + private final Object mLock = new Object(); + + @GuardedBy("mLock") + private boolean mEnforceBroadcastReceiverRestrictions; + + /** + * Property to enforce broadcast receiver restrictions for SDK sandbox processes. If the + * value of this property is {@code true}, the restrictions will be enforced. + */ + public static final String ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS = + "enforce_broadcast_receiver_restrictions"; + + SdkSandboxSettings(Context context) { + mContext = context; + } + + void registerObserver() { + synchronized (mLock) { + mEnforceBroadcastReceiverRestrictions = DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_SDK_SANDBOX, + ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS, false); + DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SDK_SANDBOX, + mContext.getMainExecutor(), this); + } + } + + @Override + public void onPropertiesChanged(DeviceConfig.Properties properties) { + synchronized (mLock) { + mEnforceBroadcastReceiverRestrictions = properties.getBoolean( + ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS, false); + } + } + + boolean isBroadcastReceiverRestrictionsEnforced() { + synchronized (mLock) { + return mEnforceBroadcastReceiverRestrictions; + } + } + } + AppOpsManager getAppOpsManager() { if (mAppOpsManager == null) { mAppOpsManager = mContext.getSystemService(AppOpsManager.class); @@ -2287,6 +2336,7 @@ public class ActivityManagerService extends IActivityManager.Stub mProcStartHandlerThread = null; mProcStartHandler = null; mHiddenApiBlacklist = null; + mSdkSandboxSettings = null; mFactoryTest = FACTORY_TEST_OFF; mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class); mInternal = new LocalService(); @@ -2406,6 +2456,7 @@ public class ActivityManagerService extends IActivityManager.Stub mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class); mHiddenApiBlacklist = new HiddenApiSettings(mHandler, mContext); + mSdkSandboxSettings = new SdkSandboxSettings(mContext); Watchdog.getInstance().addMonitor(this); Watchdog.getInstance().addThread(mHandler); @@ -7911,6 +7962,7 @@ public class ActivityManagerService extends IActivityManager.Stub final boolean alwaysFinishActivities = Settings.Global.getInt(resolver, ALWAYS_FINISH_ACTIVITIES, 0) != 0; mHiddenApiBlacklist.registerObserver(); + mSdkSandboxSettings.registerObserver(); mPlatformCompat.registerContentObserver(); mAppProfiler.retrieveSettings(); @@ -12940,7 +12992,7 @@ public class ActivityManagerService extends IActivityManager.Stub // Allow Sandbox process to register only unexported receivers. if ((flags & Context.RECEIVER_NOT_EXPORTED) != 0) { enforceNotIsolatedCaller("registerReceiver"); - } else { + } else if (mSdkSandboxSettings.isBroadcastReceiverRestrictionsEnforced()) { enforceNotIsolatedOrSdkSandboxCaller("registerReceiver"); } ArrayList<Intent> stickyIntents = null; |