From 7f630d22b83d8f40225a2e0b0501d0040313080a Mon Sep 17 00:00:00 2001 From: Hui Yu Date: Wed, 6 Jan 2021 14:09:23 -0800 Subject: [PATCH] BG-FGS-Launch uses the same grace period mechanism as BG-Activity-Launch. WindowProcessController.areBackgroundActivityStartsAllowed() has the 10 seconds grace period, starts from last activity's launch time or finish time. Expose this method as an ATMS interface for AMS to call, to determine if BG-FGS-Launch is allowed. Bug: 171305836 Test: atest cts/tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java Change-Id: I30706dc1950bf5d49926a8e26c0493d9e168eb1b --- .../core/java/com/android/server/am/ActiveServices.java | 8 ++++++-- .../core/java/com/android/server/am/ProcessRecord.java | 4 ---- .../com/android/server/wm/WindowProcessController.java | 8 ++------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 5fde046bda0a9..b1b8061f696a1 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -169,6 +169,7 @@ public final class ActiveServices { public static final int FGS_FEATURE_ALLOWED_BY_DEVICE_DEMO_MODE = 18; public static final int FGS_FEATURE_ALLOWED_BY_PROCESS_RECORD = 19; public static final int FGS_FEATURE_ALLOWED_BY_EXEMPTED_PACKAGES = 20; + public static final int FGS_FEATURE_ALLOWED_BY_ACTIVITY_STARTER = 21; @IntDef(flag = true, prefix = { "FGS_FEATURE_" }, value = { FGS_FEATURE_DENIED, @@ -191,6 +192,7 @@ public final class ActiveServices { FGS_FEATURE_ALLOWED_BY_DEVICE_DEMO_MODE, FGS_FEATURE_ALLOWED_BY_PROCESS_RECORD, FGS_FEATURE_ALLOWED_BY_EXEMPTED_PACKAGES, + FGS_FEATURE_ALLOWED_BY_ACTIVITY_STARTER }) @Retention(RetentionPolicy.SOURCE) public @interface FgsFeatureRetCode {} @@ -5202,8 +5204,8 @@ public final class ActiveServices { for (int i = mAm.mProcessList.mLruProcesses.size() - 1; i >= 0; i--) { final ProcessRecord pr = mAm.mProcessList.mLruProcesses.get(i); if (pr.uid == callingUid) { - if (pr.areBackgroundActivityStartsAllowedByToken()) { - ret = FGS_FEATURE_ALLOWED_BY_ACTIVITY_TOKEN; + if (pr.getWindowProcessController().areBackgroundActivityStartsAllowed()) { + ret = FGS_FEATURE_ALLOWED_BY_ACTIVITY_STARTER; break; } } @@ -5406,6 +5408,8 @@ public final class ActiveServices { return "ALLOWED_BY_PROCESS_RECORD"; case FGS_FEATURE_ALLOWED_BY_EXEMPTED_PACKAGES: return "FGS_FEATURE_ALLOWED_BY_EXEMPTED_PACKAGES"; + case FGS_FEATURE_ALLOWED_BY_ACTIVITY_STARTER: + return "ALLOWED_BY_ACTIVITY_STARTER"; default: return ""; } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index 255badd3239f7..e90423c2566a8 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -1381,10 +1381,6 @@ class ProcessRecord implements WindowProcessListener { mWindowProcessController.removeAllowBackgroundActivityStartsToken(entity); } - boolean areBackgroundActivityStartsAllowedByToken() { - return mWindowProcessController.areBackgroundActivityStartsAllowedByToken(); - } - void addBoundClientUid(int clientUid) { mBoundClientUids.add(clientUid); mWindowProcessController.setBoundClientUids(mBoundClientUids); diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 9d64af783837d..cec8033eec340 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -510,13 +510,9 @@ public class WindowProcessController extends ConfigurationContainer