summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Yu <huiyu@google.com>2020-09-30 14:00:48 -0700
committerHui Yu <huiyu@google.com>2020-09-30 16:21:27 -0700
commit12378c5223adbe5779cb4fcdd8e654ebc56941dd (patch)
tree9dbcc476fa7ff3bd3227b9f7c01eb58a68a3bcfc
parent282c68d3b30b03bbf2268395d7671e9f1945cb35 (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.proto4
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java33
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);
+ }
}