From 13c60c371cb2ce073969b68d7c08cfd736821c9e Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Thu, 21 Mar 2019 16:32:56 +0000 Subject: [PATCH] MediaProjection: Temporarily disable f/g service requirement. This new behaviour is gated on targeting Q, which breaks a few use cases for apps that have recently started targeting Q. Temporarily relax this requirement until we can address these breakages. Test: manual Bug: 124753835 Change-Id: I87616d85eed308eea10f0b0bf2e742b95de03701 --- .../MediaProjectionManagerService.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) 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 3872523492a7c..1f1ba203e7165 100644 --- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java @@ -63,6 +63,7 @@ import java.util.Map; */ public final class MediaProjectionManagerService extends SystemService implements Watchdog.Monitor { + private static final boolean REQUIRE_FG_SERVICE_FOR_PROJECTION = false; private static final String TAG = "MediaProjectionManagerService"; private final Object mLock = new Object(); // Protects the list of media projections @@ -100,21 +101,23 @@ public final class MediaProjectionManagerService extends SystemService false /*allowIsolated*/); mMediaRouter.addCallback(MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_PASSIVE_DISCOVERY); - mActivityManagerInternal.registerProcessObserver(new IProcessObserver.Stub() { - @Override - public void onForegroundActivitiesChanged(int pid, int uid, boolean fg) { - } + if (REQUIRE_FG_SERVICE_FOR_PROJECTION) { + mActivityManagerInternal.registerProcessObserver(new IProcessObserver.Stub() { + @Override + public void onForegroundActivitiesChanged(int pid, int uid, boolean fg) { + } - @Override - public void onForegroundServicesChanged(int pid, int uid, int serviceTypes) { - MediaProjectionManagerService.this.handleForegroundServicesChanged(pid, uid, - serviceTypes); - } + @Override + public void onForegroundServicesChanged(int pid, int uid, int serviceTypes) { + MediaProjectionManagerService.this.handleForegroundServicesChanged(pid, uid, + serviceTypes); + } - @Override - public void onProcessDied(int pid, int uid) { - } - }); + @Override + public void onProcessDied(int pid, int uid) { + } + }); + } } @Override @@ -462,7 +465,8 @@ public final class MediaProjectionManagerService extends SystemService return; } - if (targetSdkVersion >= Build.VERSION_CODES.Q + if (REQUIRE_FG_SERVICE_FOR_PROJECTION + && targetSdkVersion >= Build.VERSION_CODES.Q && !mActivityManagerInternal.hasRunningForegroundService( uid, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION)) { throw new SecurityException("Media projections require a foreground service"