Loading services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +5 −3 Original line number Diff line number Diff line Loading @@ -975,9 +975,6 @@ public final class MediaProjectionManagerService extends SystemService throw new SecurityException("Media projections require a foreground service" + " of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION"); } mCallback = callback; registerCallback(mCallback); try { mToken = callback.asBinder(); mDeathEater = () -> { Loading Loading @@ -1022,6 +1019,11 @@ public final class MediaProjectionManagerService extends SystemService } } startProjectionLocked(this); // Register new callbacks after stop has been dispatched to previous session. mCallback = callback; registerCallback(mCallback); // Mark this token as used when the app gets the MediaProjection instance. mCountStarts++; } Loading services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,24 @@ public class MediaProjectionManagerServiceTest { assertThat(secondProjection).isNotEqualTo(projection); } @Test public void testCreateProjection_priorProjectionGrant() throws NameNotFoundException { // Create a first projection. MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions(); FakeIMediaProjectionCallback callback1 = new FakeIMediaProjectionCallback(); projection.start(callback1); // Create a second projection. MediaProjectionManagerService.MediaProjection secondProjection = startProjectionPreconditions(); FakeIMediaProjectionCallback callback2 = new FakeIMediaProjectionCallback(); secondProjection.start(callback2); // Check that the second projection's callback hasn't been stopped. assertThat(callback1.mStopped).isTrue(); assertThat(callback2.mStopped).isFalse(); } @Test public void testCreateProjection_attemptReuse_noPriorProjectionGrant() throws NameNotFoundException { Loading Loading @@ -785,8 +803,11 @@ public class MediaProjectionManagerServiceTest { } private static class FakeIMediaProjectionCallback extends IMediaProjectionCallback.Stub { boolean mStopped = false; @Override public void onStop() throws RemoteException { mStopped = true; } @Override Loading Loading
services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +5 −3 Original line number Diff line number Diff line Loading @@ -975,9 +975,6 @@ public final class MediaProjectionManagerService extends SystemService throw new SecurityException("Media projections require a foreground service" + " of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION"); } mCallback = callback; registerCallback(mCallback); try { mToken = callback.asBinder(); mDeathEater = () -> { Loading Loading @@ -1022,6 +1019,11 @@ public final class MediaProjectionManagerService extends SystemService } } startProjectionLocked(this); // Register new callbacks after stop has been dispatched to previous session. mCallback = callback; registerCallback(mCallback); // Mark this token as used when the app gets the MediaProjection instance. mCountStarts++; } Loading
services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,24 @@ public class MediaProjectionManagerServiceTest { assertThat(secondProjection).isNotEqualTo(projection); } @Test public void testCreateProjection_priorProjectionGrant() throws NameNotFoundException { // Create a first projection. MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions(); FakeIMediaProjectionCallback callback1 = new FakeIMediaProjectionCallback(); projection.start(callback1); // Create a second projection. MediaProjectionManagerService.MediaProjection secondProjection = startProjectionPreconditions(); FakeIMediaProjectionCallback callback2 = new FakeIMediaProjectionCallback(); secondProjection.start(callback2); // Check that the second projection's callback hasn't been stopped. assertThat(callback1.mStopped).isTrue(); assertThat(callback2.mStopped).isFalse(); } @Test public void testCreateProjection_attemptReuse_noPriorProjectionGrant() throws NameNotFoundException { Loading Loading @@ -785,8 +803,11 @@ public class MediaProjectionManagerServiceTest { } private static class FakeIMediaProjectionCallback extends IMediaProjectionCallback.Stub { boolean mStopped = false; @Override public void onStop() throws RemoteException { mStopped = true; } @Override Loading