Treat fg service alarms like bg service alarms under FAS

Change-Id: I8e60b76aba07b286ff7f75c07d399ed2c7a4efbc
Fixes: 73559697
Test: atest -m AlarmManagerTestCases
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 5c5f0f8..0775abf 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -3023,20 +3023,26 @@
     }
 
     private boolean isBackgroundRestricted(Alarm alarm) {
-        final boolean allowWhileIdle = (alarm.flags & FLAG_ALLOW_WHILE_IDLE) != 0;
+        boolean exemptOnBatterySaver = (alarm.flags & FLAG_ALLOW_WHILE_IDLE) != 0;
         if (alarm.alarmClock != null) {
-            // Don't block alarm clocks
+            // Don't defer alarm clocks
             return false;
         }
-        if (alarm.operation != null
-                && (alarm.operation.isActivity() || alarm.operation.isForegroundService())) {
-            // Don't block starting foreground components
-            return false;
+        if (alarm.operation != null) {
+            if (alarm.operation.isActivity()) {
+                // Don't defer starting actual UI
+                return false;
+            }
+            if (alarm.operation.isForegroundService()) {
+                // FG service alarms are nearly as important; consult AST policy
+                exemptOnBatterySaver = true;
+            }
         }
         final String sourcePackage = alarm.sourcePackage;
         final int sourceUid = alarm.creatorUid;
         return (mAppStateTracker != null) &&
-                mAppStateTracker.areAlarmsRestricted(sourceUid, sourcePackage, allowWhileIdle);
+                mAppStateTracker.areAlarmsRestricted(sourceUid, sourcePackage,
+                        exemptOnBatterySaver);
     }
 
     private native long init();