Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ec91bce authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

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
parent 58dbc145
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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 "
+34 −0
Original line number Diff line number Diff line
@@ -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;
@@ -361,6 +362,39 @@ public class MediaProjectionManagerServiceTest {
        assertThat(secondProjection).isNotEqualTo(projection);
    }

    @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