Loading proto/src/system_messages.proto +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading services/core/java/com/android/server/am/ActiveServices.java +32 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -555,6 +561,7 @@ public final class ActiveServices { Slog.w(TAG, "startForegroundService() not allowed due to " + "mAllowStartForeground false: service " + r.shortInstanceName); showFgsBgRestrictedNotificationLocked(r); forcedStandby = true; } } Loading Loading @@ -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; } Loading Loading @@ -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); } } Loading
proto/src/system_messages.proto +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
services/core/java/com/android/server/am/ActiveServices.java +32 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -555,6 +561,7 @@ public final class ActiveServices { Slog.w(TAG, "startForegroundService() not allowed due to " + "mAllowStartForeground false: service " + r.shortInstanceName); showFgsBgRestrictedNotificationLocked(r); forcedStandby = true; } } Loading Loading @@ -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; } Loading Loading @@ -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); } }