diff options
| author | 2024-07-17 13:04:33 +0200 | |
|---|---|---|
| committer | 2024-07-17 16:26:33 +0200 | |
| commit | 9ec91bce8e5d88265d0fb4af526f7876880dfaa7 (patch) | |
| tree | 66f529481c80b4419e7e841f53bed3173602cf1d | |
| parent | 58dbc14544a5a8f25fde5c4c5a2b8b1eaaff0ada (diff) | |
Do not request MP consent while the keyguard is locked
Fix: 353509319
Test: atest MediaProjectionManagerServiceTest
Flag: android.companion.virtualdevice.flags.media_projection_keyguard_restrictions
Change-Id: I5796ee379573b67a967058b36a19d027f97e163a
2 files changed, 42 insertions, 1 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 803b125cbabc..621c090d37b8 100644 --- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java @@ -702,7 +702,7 @@ public final class MediaProjectionManagerService extends SystemService } } - private final class BinderService extends IMediaProjectionManager.Stub { + final class BinderService extends IMediaProjectionManager.Stub { BinderService(Context context) { super(PermissionEnforcer.fromContext(context)); @@ -891,6 +891,13 @@ public final class MediaProjectionManagerService extends SystemService @Override public void requestConsentForInvalidProjection(@NonNull IMediaProjection projection) { requestConsentForInvalidProjection_enforcePermission(); + + if (android.companion.virtualdevice.flags.Flags.mediaProjectionKeyguardRestrictions() + && mKeyguardManager.isKeyguardLocked()) { + Slog.v(TAG, "Reusing token: Won't request consent while the keyguard is locked"); + return; + } + synchronized (mLock) { if (!isCurrentProjection(projection)) { Slog.v(TAG, "Reusing token: Won't request consent again for a token that " 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 316b5faf2a68..689b241f0faa 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 @@ -39,6 +39,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -364,6 +365,39 @@ public class MediaProjectionManagerServiceTest { @EnableFlags(android.companion.virtualdevice.flags .Flags.FLAG_MEDIA_PROJECTION_KEYGUARD_RESTRICTIONS) @Test + public void testReuseProjection_keyguardNotLocked_startConsentDialog() + throws NameNotFoundException { + MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions(); + projection.start(mIMediaProjectionCallback); + + doNothing().when(mContext).startActivityAsUser(any(), any()); + doReturn(false).when(mKeyguardManager).isKeyguardLocked(); + + MediaProjectionManagerService.BinderService mediaProjectionBinderService = + mService.new BinderService(mContext); + mediaProjectionBinderService.requestConsentForInvalidProjection(projection); + + verify(mContext).startActivityAsUser(any(), any()); + } + + @EnableFlags(android.companion.virtualdevice.flags + .Flags.FLAG_MEDIA_PROJECTION_KEYGUARD_RESTRICTIONS) + @Test + public void testReuseProjection_keyguardLocked_noConsentDialog() throws NameNotFoundException { + MediaProjectionManagerService.MediaProjection projection = startProjectionPreconditions(); + projection.start(mIMediaProjectionCallback); + + doReturn(true).when(mKeyguardManager).isKeyguardLocked(); + MediaProjectionManagerService.BinderService mediaProjectionBinderService = + mService.new BinderService(mContext); + mediaProjectionBinderService.requestConsentForInvalidProjection(projection); + + verify(mContext, never()).startActivityAsUser(any(), any()); + } + + @EnableFlags(android.companion.virtualdevice.flags + .Flags.FLAG_MEDIA_PROJECTION_KEYGUARD_RESTRICTIONS) + @Test public void testKeyguardLocked_stopsActiveProjection() throws Exception { MediaProjectionManagerService service = new MediaProjectionManagerService(mContext, mMediaProjectionMetricsLoggerInjector); |