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

Commit 93378a02 authored by Vladimir Komsiyski's avatar Vladimir Komsiyski Committed by Android (Google) Code Review
Browse files

Merge "Do not request MP consent while the keyguard is locked" into main

parents ee0a0183 9ec91bce
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