diff options
| author | 2023-04-24 08:20:36 -0700 | |
|---|---|---|
| committer | 2023-05-04 10:00:00 -0700 | |
| commit | 90c0b1558740d90c864d8553217b309fa0aab375 (patch) | |
| tree | af4150e9c7ce2d2f2d6317ecf3d2c60c00e802b3 | |
| parent | d06a6b54c2064db79cf862b93b3aa2408a72ebd7 (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.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java | 5 |
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; } |