From 9e80f5e2388799778a678390c27a0d0f332136bb Mon Sep 17 00:00:00 2001 From: Hui Yu Date: Thu, 3 Jun 2021 12:53:03 -0700 Subject: [PATCH] Add a device config for FGS denied notification. 1. Add a flag mFgsStartRestrictionNotificationEnabled to control whether display a notification when a FGS is restricted by BG-FGS-start. Default is false. 2. Use device config key "default_fgs_starts_restriction_notification_enabled" to turn it on/off. Bug: 187977406 Test: adb shell device_config get activity_manager default_fgs_starts_restriction_notification_enabled Test: adb shell device_config put activity_manager default_fgs_starts_restriction_notification_enabled [true|false] Change-Id: Ie1e1d5351b9f8326a9cb3d6685a8f2cf53978685 --- .../com/android/server/am/ActiveServices.java | 4 +++- .../server/am/ActivityManagerConstants.java | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 144ab9b061a20..8136e1493eb1c 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -6117,8 +6117,10 @@ public final class ActiveServices { && code != REASON_UID_VISIBLE; } - // TODO: remove this notification after feature development is done private void showFgsBgRestrictedNotificationLocked(ServiceRecord r) { + if (!mAm.mConstants.mFgsStartRestrictionNotificationEnabled /* default is false */) { + return; + } final Context context = mAm.mContext; final String title = "Foreground Service BG-Launch Restricted"; final String content = "App restricted: " + r.mRecentCallingPackage; diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java index 0d19efc207852..445d0ba2ee6d9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerConstants.java +++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java @@ -197,6 +197,13 @@ final class ActivityManagerConstants extends ContentObserver { private static final String KEY_DEFAULT_FGS_STARTS_RESTRICTION_ENABLED = "default_fgs_starts_restriction_enabled"; + /** + * Default value for mFgsStartRestrictionNotificationEnabled if not explicitly set in + * Settings.Global. + */ + private static final String KEY_DEFAULT_FGS_STARTS_RESTRICTION_NOTIFICATION_ENABLED = + "default_fgs_starts_restriction_notification_enabled"; + /** * Default value for mFgsStartRestrictionCheckCallerTargetSdk if not explicitly set in * Settings.Global. @@ -432,6 +439,10 @@ final class ActivityManagerConstants extends ContentObserver { // at all. volatile boolean mFlagFgsStartRestrictionEnabled = true; + // Whether to display a notification when a service is restricted from startForeground due to + // foreground service background start restriction. + volatile boolean mFgsStartRestrictionNotificationEnabled = false; + /** * Indicates whether the foreground service background start restriction is enabled for * caller app that is targeting S+. @@ -652,6 +663,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_DEFAULT_FGS_STARTS_RESTRICTION_ENABLED: updateFgsStartsRestriction(); break; + case KEY_DEFAULT_FGS_STARTS_RESTRICTION_NOTIFICATION_ENABLED: + updateFgsStartsRestrictionNotification(); + break; case KEY_DEFAULT_FGS_STARTS_RESTRICTION_CHECK_CALLER_TARGET_SDK: updateFgsStartsRestrictionCheckCallerTargetSdk(); break; @@ -953,6 +967,13 @@ final class ActivityManagerConstants extends ContentObserver { /*defaultValue*/ true); } + private void updateFgsStartsRestrictionNotification() { + mFgsStartRestrictionNotificationEnabled = DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, + KEY_DEFAULT_FGS_STARTS_RESTRICTION_NOTIFICATION_ENABLED, + /*defaultValue*/ false); + } + private void updateFgsStartsRestrictionCheckCallerTargetSdk() { mFgsStartRestrictionCheckCallerTargetSdk = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, @@ -1272,6 +1293,9 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mFlagBackgroundFgsStartRestrictionEnabled); pw.print(" "); pw.print(KEY_DEFAULT_FGS_STARTS_RESTRICTION_ENABLED); pw.print("="); pw.println(mFlagFgsStartRestrictionEnabled); + pw.print(" "); pw.print(KEY_DEFAULT_FGS_STARTS_RESTRICTION_NOTIFICATION_ENABLED); + pw.print("="); + pw.println(mFgsStartRestrictionNotificationEnabled); pw.print(" "); pw.print(KEY_DEFAULT_FGS_STARTS_RESTRICTION_CHECK_CALLER_TARGET_SDK); pw.print("="); pw.println(mFgsStartRestrictionCheckCallerTargetSdk); pw.print(" "); pw.print(KEY_FGS_ATOM_SAMPLE_RATE);