From 0e1a40ccb4c92ae366b28a92b8b750ca2f842ffc Mon Sep 17 00:00:00 2001 From: Jacob Hobbie Date: Wed, 6 Oct 2021 16:33:17 -0700 Subject: [PATCH] Updating to use correct compatibility check. ActivityManagerService was calling Compatibility.isChangeEnabled instead of CompatChanges.isChangeEnabled which was messing up enforcement. This new check should allow properly checking the targetSDK. Test: tested with a test app targeting 26 (mpgroover) Bug: 161145287 Change-Id: I7eefe4286d24adde73af70f081ede2dddde6aa59 --- .../server/am/ActivityManagerService.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6a632545bdaac..d8ae37ec49529 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -188,6 +188,7 @@ import android.app.SyncNotedAppOp; import android.app.WaitResult; import android.app.backup.BackupManager.OperationType; import android.app.backup.IBackupManager; +import android.app.compat.CompatChanges; import android.app.job.JobParameters; import android.app.usage.UsageEvents; import android.app.usage.UsageEvents.Event; @@ -195,7 +196,6 @@ import android.app.usage.UsageStatsManager; import android.app.usage.UsageStatsManagerInternal; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManagerInternal; -import android.compat.Compatibility; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.AttributionSource; @@ -12512,11 +12512,6 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessRecord callerApp = null; final boolean visibleToInstantApps = (flags & Context.RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0; - // Dynamic receivers are exported by default for versions prior to T - final boolean exported = - ((flags & Context.RECEIVER_EXPORTED) != 0 - || (!Compatibility.isChangeEnabled( - DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED))); int callingUid; int callingPid; @@ -12589,8 +12584,8 @@ public class ActivityManagerService extends IActivityManager.Stub // If the caller is registering for a sticky broadcast with a null receiver, we won't // require a flag if (!onlyProtectedBroadcasts && receiver != null && ( - Compatibility.isChangeEnabled( - DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED) + CompatChanges.isChangeEnabled( + DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid) && (flags & (Context.RECEIVER_EXPORTED | Context.RECEIVER_NOT_EXPORTED)) == 0)) { Slog.e(TAG, @@ -12605,6 +12600,12 @@ public class ActivityManagerService extends IActivityManager.Stub } } + // Dynamic receivers are exported by default for versions prior to T + final boolean exported = + ((flags & Context.RECEIVER_EXPORTED) != 0 + || (!CompatChanges.isChangeEnabled( + DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid))); + ArrayList allSticky = null; if (stickyIntents != null) { final ContentResolver resolver = mContext.getContentResolver();