From da3dc92121be275581c9582ab89582e82b0d35b3 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 9 May 2018 13:49:41 -0700 Subject: [PATCH] Treat fg service alarms like bg service alarms under FAS Change-Id: I8e60b76aba07b286ff7f75c07d399ed2c7a4efbc Fixes: 73559697 Test: atest -m AlarmManagerTestCases --- .../android/server/AlarmManagerService.java | 20 ++++++++++++------- .../com/android/server/AppStateTracker.java | 4 ++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 5c5f0f8d3b4b0..0775abf574b5d 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -3023,20 +3023,26 @@ class AlarmManagerService extends SystemService { } 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(); diff --git a/services/core/java/com/android/server/AppStateTracker.java b/services/core/java/com/android/server/AppStateTracker.java index 23c57797c1f56..9b001ce3f9178 100644 --- a/services/core/java/com/android/server/AppStateTracker.java +++ b/services/core/java/com/android/server/AppStateTracker.java @@ -1056,9 +1056,9 @@ public class AppStateTracker { * @return whether alarms should be restricted for a UID package-name. */ public boolean areAlarmsRestricted(int uid, @NonNull String packageName, - boolean allowWhileIdle) { + boolean isExemptOnBatterySaver) { return isRestricted(uid, packageName, /*useTempWhitelistToo=*/ false, - /* exemptOnBatterySaver =*/ allowWhileIdle); + isExemptOnBatterySaver); } /**