From acbe1e838981f12820a38d2e874f1c03cad0f41b Mon Sep 17 00:00:00 2001 From: Naomi Musgrave Date: Mon, 24 Apr 2023 18:39:14 +0000 Subject: [PATCH] (3/N)[MediaProjection] Fix NPE on IMediaProjection Bug: 279249015 Test: atest FrameworksServicesTests:MediaProjectionManagerServiceTest Change-Id: If7af1c0ddcba29c73fcbdb3a406f97a30c5a91b4 --- .../MediaProjectionManagerService.java | 4 ++-- .../MediaProjectionManagerServiceTest.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 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 7a51126eff2d5..377b8cf1230eb 100644 --- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java @@ -395,8 +395,8 @@ public final class MediaProjectionManagerService extends SystemService synchronized (mLock) { final boolean consentGranted = consentResult == RECORD_CONTENT_DISPLAY || consentResult == RECORD_CONTENT_TASK; - if (consentGranted && projection == null || !isCurrentProjection( - projection.asBinder())) { + if (consentGranted && !isCurrentProjection( + projection == null ? null : projection.asBinder())) { Slog.v(TAG, "Reusing token: Ignore consent result of " + consentResult + " for a " + "token that isn't current"); return; diff --git a/services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java index 5751db0727e79..275533fb1c375 100644 --- a/services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/media/projection/MediaProjectionManagerServiceTest.java @@ -445,6 +445,25 @@ public class MediaProjectionManagerServiceTest { eq(mWaitingDisplaySession)); } + @Test + public void testSetUserReviewGrantedConsentResult_projectionNull_consentNotGranted() + throws Exception { + MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions(); + projection.start(mIMediaProjectionCallback); + assertThat(mService.isCurrentProjection(projection)).isTrue(); + doReturn(true).when(mWindowManagerInternal).setContentRecordingSession( + any(ContentRecordingSession.class)); + // Some other token. + final IMediaProjection otherProjection = null; + // Waiting for user to review consent. + mService.setContentRecordingSession(mWaitingDisplaySession); + mService.setUserReviewGrantedConsentResult(RECORD_CANCEL, otherProjection); + + // Display result is ignored; only the first session is set. + verify(mWindowManagerInternal, times(1)).setContentRecordingSession( + eq(mWaitingDisplaySession)); + } + @Test public void testSetUserReviewGrantedConsentResult_noVirtualDisplay() throws Exception { MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions();