diff options
author | Hui Yu <huiyu@google.com> | 2020-09-30 14:00:48 -0700 |
---|---|---|
committer | Hui Yu <huiyu@google.com> | 2020-09-30 16:21:27 -0700 |
commit | 12378c5223adbe5779cb4fcdd8e654ebc56941dd (patch) | |
tree | 9dbcc476fa7ff3bd3227b9f7c01eb58a68a3bcfc | |
parent | 282c68d3b30b03bbf2268395d7671e9f1945cb35 (diff) |
Show a notification when a BG-launch FGS is restricted.
Previously each BG-launch FGS that is restricted has a logcat message, now we
also display a notification that has:
Title: "Foreground Service BG-Launch Restricted"
Content: "App restricted:" + app package name
Detail: intent of the FGS.
Use following command to turn on the FGS BG-launch restriction feature:
adb shell device_config put activity_manager default_fgs_starts_restriction_enabled true
adb shell device_config get activity_manager default_fgs_starts_restriction_enabled
Bug: 157473819
Test: Observe the notification when FGS BG-launch is restricted.
atest cts/tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java#testFgsStartFromBG
Change-Id: Ia1ce1c7e103fbfa0a8487b0a3009b2d2ca61ba74
-rw-r--r-- | proto/src/system_messages.proto | 4 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ActiveServices.java | 33 |
2 files changed, 36 insertions, 1 deletions
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto index 34d2b73ac2db..15bd4dc66ccc 100644 --- a/proto/src/system_messages.proto +++ b/proto/src/system_messages.proto @@ -252,6 +252,10 @@ message SystemMessage { // Package: android NOTE_ID_WIFI_SIM_REQUIRED = 60; + // TODO: remove this notification after feature development is done + // Inform the user a foreground service is restricted from BG-launch. + NOTE_FOREGROUND_SERVICE_BG_LAUNCH = 61; + // Display the Android Debug Protocol status // Package: android NOTE_ADB_WIFI_ACTIVE = 62; diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 91a3fb003df2..b2e021fb74d1 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -25,6 +25,7 @@ import static android.os.Process.SHELL_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Process.ZYGOTE_POLICY_FLAG_EMPTY; +import static com.android.internal.messages.nano.SystemMessageProto.SystemMessage.NOTE_FOREGROUND_SERVICE_BG_LAUNCH; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKGROUND_CHECK; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FOREGROUND_SERVICE; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU; @@ -119,6 +120,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -228,6 +230,10 @@ public final class ActiveServices { // white listed packageName. ArraySet<String> mWhiteListAllowWhileInUsePermissionInFgs = new ArraySet<>(); + // TODO: remove this after feature development is done + private static final SimpleDateFormat DATE_FORMATTER = + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + final Runnable mLastAnrDumpClearer = new Runnable() { @Override public void run() { synchronized (mAm) { @@ -553,8 +559,9 @@ public final class ActiveServices { if (r.mAllowStartForeground == FGS_FEATURE_DENIED && mAm.mConstants.mFlagFgsStartRestrictionEnabled) { Slog.w(TAG, "startForegroundService() not allowed due to " - + " mAllowStartForeground false: service " + + "mAllowStartForeground false: service " + r.shortInstanceName); + showFgsBgRestrictedNotificationLocked(r); forcedStandby = true; } } @@ -1459,6 +1466,7 @@ public final class ActiveServices { "Service.startForeground() not allowed due to " + "mAllowStartForeground false: service " + r.shortInstanceName); + showFgsBgRestrictedNotificationLocked(r); updateServiceForegroundLocked(r.app, true); ignoreForeground = true; } @@ -5056,4 +5064,27 @@ public final class ActiveServices { && code != FGS_FEATURE_ALLOWED_BY_UID_VISIBLE; } + // TODO: remove this notification after feature development is done + private void showFgsBgRestrictedNotificationLocked(ServiceRecord r) { + final Context context = mAm.mContext; + final String title = "Foreground Service BG-Launch Restricted"; + final String content = "App restricted: " + r.mRecentCallingPackage; + final long now = System.currentTimeMillis(); + final String bigText = DATE_FORMATTER.format(now) + " " + r.mInfoAllowStartForeground; + final String groupKey = "com.android.fgs-bg-restricted"; + final Notification.Builder n = + new Notification.Builder(context, + SystemNotificationChannels.ALERTS) + .setGroup(groupKey) + .setSmallIcon(R.drawable.stat_sys_vitals) + .setWhen(0) + .setColor(context.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setTicker(title) + .setContentTitle(title) + .setContentText(content) + .setStyle(new Notification.BigTextStyle().bigText(bigText)); + context.getSystemService(NotificationManager.class).notifyAsUser(Long.toString(now), + NOTE_FOREGROUND_SERVICE_BG_LAUNCH, n.build(), UserHandle.ALL); + } } |