summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2023-04-24 08:20:36 -0700
committer Jing Ji <jji@google.com> 2023-05-04 10:00:00 -0700
commit90c0b1558740d90c864d8553217b309fa0aab375 (patch)
treeaf4150e9c7ce2d2f2d6317ecf3d2c60c00e802b3
parentd06a6b54c2064db79cf862b93b3aa2408a72ebd7 (diff)
Track the media projection FGS types per UID
The apps with active media projection should have a foreground service with the type "mediaProjection" - the condition here is, any process with such a FGS within this app would be sufficient, it doesn't necessarily need to be in the same process with the active media projection serssion. Bug: 229699207 Test: atest CtsMediaProjectionTestCases:MediaProjectionManagerTest Test: atest CtsMediaProjectionTestCases:MediaProjectionTest Test: atest FrameworksServicesTests:MediaProjectionManagerServiceTest Test: atest FrameworksServicesTests:DisplayManagerServiceTest Change-Id: I015d2adc67f9e3d304281f4c9106ceced6d99a02
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java17
-rw-r--r--services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java5
2 files changed, 13 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a992765c0411..2eeb782ff420 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18201,16 +18201,17 @@ public class ActivityManagerService extends IActivityManager.Stub
@Override
public boolean hasRunningForegroundService(int uid, int foregroundServicetype) {
synchronized (ActivityManagerService.this) {
- return mProcessList.searchEachLruProcessesLOSP(true, app -> {
- if (app.uid != uid) {
- return null;
- }
-
+ final UidRecord uidRec = mProcessList.mActiveUids.get(uid);
+ if (uidRec == null) {
+ return false;
+ }
+ for (int i = uidRec.getNumOfProcs() - 1; i >= 0; i--) {
+ final ProcessRecord app = uidRec.getProcessRecordByIndex(i);
if ((app.mServices.containsAnyForegroundServiceTypes(foregroundServicetype))) {
- return Boolean.TRUE;
+ return true;
}
- return null;
- }) != null;
+ }
+ return false;
}
}
diff --git a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
index 377b8cf1230e..d89a6f8f9828 100644
--- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
+++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
@@ -232,7 +232,10 @@ public final class MediaProjectionManagerService extends SystemService
return;
}
- if ((serviceTypes & ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION) != 0) {
+ if (mActivityManagerInternal.hasRunningForegroundService(
+ uid, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION)) {
+ // If there is any process within this UID running a FGS
+ // with the mediaProjection type, that's Okay.
return;
}