Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +27 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,9 @@ final class ActivityManagerConstants extends ContentObserver { // initialized in the constructor. public int CUR_MAX_EMPTY_PROCESSES; /** @see mEnforceReceiverExportedFlagRequirement */ private static final String KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT = "enforce_exported_flag_requirement"; /** @see #mNoKillCachedProcessesUntilBootCompleted */ private static final String KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED = Loading @@ -744,6 +747,9 @@ final class ActivityManagerConstants extends ContentObserver { private static final String KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS = "no_kill_cached_processes_post_boot_completed_duration_millis"; /** @see mEnforceReceiverExportedFlagRequirement */ private static final boolean DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT = false; /** @see #mNoKillCachedProcessesUntilBootCompleted */ private static final boolean DEFAULT_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED = true; Loading @@ -751,6 +757,15 @@ final class ActivityManagerConstants extends ContentObserver { private static final long DEFAULT_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS = 600_000; /** * If true, enforce the requirement that dynamically registered receivers specify one of * {@link android.content.Context#RECEIVER_EXPORTED} or * {@link android.content.Context#RECEIVER_NOT_EXPORTED} if registering for any non-system * broadcasts. */ volatile boolean mEnforceReceiverExportedFlagRequirement = DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT; /** * If true, do not kill excessive cached processes proactively, until user-0 is unlocked. * @see #mNoKillCachedProcessesPostBootCompletedDurationMillis Loading Loading @@ -1010,6 +1025,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED: updateNoKillCachedProcessesUntilBootCompleted(); break; case KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT: updateEnforceReceiverExportedFlagRequirement(); break; case KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS: updateNoKillCachedProcessesPostBootCompletedDurationMillis(); break; Loading Loading @@ -1482,6 +1500,13 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_DEFER_BOOT_COMPLETED_BROADCAST); } private void updateEnforceReceiverExportedFlagRequirement() { mEnforceReceiverExportedFlagRequirement = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT, DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT); } private void updateNoKillCachedProcessesUntilBootCompleted() { mNoKillCachedProcessesUntilBootCompleted = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, Loading Loading @@ -1819,6 +1844,8 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mPrioritizeAlarmBroadcasts); pw.print(" "); pw.print(KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED); pw.print("="); pw.println(mNoKillCachedProcessesUntilBootCompleted); pw.print(" "); pw.print(KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT); pw.print("="); pw.println(mEnforceReceiverExportedFlagRequirement); pw.print(" "); pw.print(KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS); pw.print("="); pw.println(mNoKillCachedProcessesPostBootCompletedDurationMillis); pw.print(" "); pw.print(KEY_MAX_EMPTY_TIME_MILLIS); Loading services/core/java/com/android/server/am/ActivityManagerService.java +4 −3 Original line number Diff line number Diff line Loading @@ -215,8 +215,8 @@ import android.app.usage.UsageStatsManagerInternal; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManagerInternal; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; import android.compat.annotation.EnabledAfter; import android.compat.annotation.EnabledSince; import android.content.AttributionSource; import android.content.AutofillOptions; import android.content.BroadcastReceiver; Loading Loading @@ -588,7 +588,7 @@ public class ActivityManagerService extends IActivityManager.Stub * unprotected broadcast in code. */ @ChangeId @Disabled @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) private static final long DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED = 161145287L; /** Loading Loading @@ -13443,7 +13443,8 @@ public class ActivityManagerService extends IActivityManager.Stub // broadcasts, or the receiver is null (a sticky broadcast). Sticky broadcasts should // not be used generally, so we will be marking them as exported by default final boolean requireExplicitFlagForDynamicReceivers = CompatChanges.isChangeEnabled( DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid); DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid) && mConstants.mEnforceReceiverExportedFlagRequirement; if (!onlyProtectedBroadcasts) { if (receiver == null && !explicitExportStateDefined) { // sticky broadcast, no flag specified (flag isn't required) Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +27 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,9 @@ final class ActivityManagerConstants extends ContentObserver { // initialized in the constructor. public int CUR_MAX_EMPTY_PROCESSES; /** @see mEnforceReceiverExportedFlagRequirement */ private static final String KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT = "enforce_exported_flag_requirement"; /** @see #mNoKillCachedProcessesUntilBootCompleted */ private static final String KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED = Loading @@ -744,6 +747,9 @@ final class ActivityManagerConstants extends ContentObserver { private static final String KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS = "no_kill_cached_processes_post_boot_completed_duration_millis"; /** @see mEnforceReceiverExportedFlagRequirement */ private static final boolean DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT = false; /** @see #mNoKillCachedProcessesUntilBootCompleted */ private static final boolean DEFAULT_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED = true; Loading @@ -751,6 +757,15 @@ final class ActivityManagerConstants extends ContentObserver { private static final long DEFAULT_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS = 600_000; /** * If true, enforce the requirement that dynamically registered receivers specify one of * {@link android.content.Context#RECEIVER_EXPORTED} or * {@link android.content.Context#RECEIVER_NOT_EXPORTED} if registering for any non-system * broadcasts. */ volatile boolean mEnforceReceiverExportedFlagRequirement = DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT; /** * If true, do not kill excessive cached processes proactively, until user-0 is unlocked. * @see #mNoKillCachedProcessesPostBootCompletedDurationMillis Loading Loading @@ -1010,6 +1025,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED: updateNoKillCachedProcessesUntilBootCompleted(); break; case KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT: updateEnforceReceiverExportedFlagRequirement(); break; case KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS: updateNoKillCachedProcessesPostBootCompletedDurationMillis(); break; Loading Loading @@ -1482,6 +1500,13 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_DEFER_BOOT_COMPLETED_BROADCAST); } private void updateEnforceReceiverExportedFlagRequirement() { mEnforceReceiverExportedFlagRequirement = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT, DEFAULT_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT); } private void updateNoKillCachedProcessesUntilBootCompleted() { mNoKillCachedProcessesUntilBootCompleted = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, Loading Loading @@ -1819,6 +1844,8 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mPrioritizeAlarmBroadcasts); pw.print(" "); pw.print(KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED); pw.print("="); pw.println(mNoKillCachedProcessesUntilBootCompleted); pw.print(" "); pw.print(KEY_ENFORCE_RECEIVER_EXPORTED_FLAG_REQUIREMENT); pw.print("="); pw.println(mEnforceReceiverExportedFlagRequirement); pw.print(" "); pw.print(KEY_NO_KILL_CACHED_PROCESSES_POST_BOOT_COMPLETED_DURATION_MILLIS); pw.print("="); pw.println(mNoKillCachedProcessesPostBootCompletedDurationMillis); pw.print(" "); pw.print(KEY_MAX_EMPTY_TIME_MILLIS); Loading
services/core/java/com/android/server/am/ActivityManagerService.java +4 −3 Original line number Diff line number Diff line Loading @@ -215,8 +215,8 @@ import android.app.usage.UsageStatsManagerInternal; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManagerInternal; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; import android.compat.annotation.EnabledAfter; import android.compat.annotation.EnabledSince; import android.content.AttributionSource; import android.content.AutofillOptions; import android.content.BroadcastReceiver; Loading Loading @@ -588,7 +588,7 @@ public class ActivityManagerService extends IActivityManager.Stub * unprotected broadcast in code. */ @ChangeId @Disabled @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) private static final long DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED = 161145287L; /** Loading Loading @@ -13443,7 +13443,8 @@ public class ActivityManagerService extends IActivityManager.Stub // broadcasts, or the receiver is null (a sticky broadcast). Sticky broadcasts should // not be used generally, so we will be marking them as exported by default final boolean requireExplicitFlagForDynamicReceivers = CompatChanges.isChangeEnabled( DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid); DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid) && mConstants.mEnforceReceiverExportedFlagRequirement; if (!onlyProtectedBroadcasts) { if (receiver == null && !explicitExportStateDefined) { // sticky broadcast, no flag specified (flag isn't required)