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

Commit 74a7b94f authored by Yabin Huang's avatar Yabin Huang
Browse files

Specify the display ID to mirror for media projection

In VirtualDisplayConfig, the default value of mDisplayIdToMirror is DEFAULT_DISPLAY. In order to make media projection work for
visible background users (running on secondary displays), this CL
passed the correct display ID when building VirtualDisplayConfig.

Bug: 365184692
Test: atest CtsMediaProjectionTestCases
Test: atest --user-type secondary_user CtsMediaProjectionTestCases
Test: atest --user-type secondary_user_on_secondary_display  CtsMediaProjectionTestCases
Flag: EXEMPT bugfix
Change-Id: I9b00b80a9a69643177054e7b2248fa40ddabb448
parent 83223e8b
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.media.projection;

import static android.view.Display.DEFAULT_DISPLAY;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.compat.CompatChanges;
@@ -29,6 +31,7 @@ import android.hardware.display.VirtualDisplayConfig;
import android.os.Build;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserManager;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Slog;
@@ -70,6 +73,7 @@ public final class MediaProjection {
    private final DisplayManager mDisplayManager;
    @NonNull
    private final Map<Callback, CallbackRecord> mCallbacks = new ArrayMap<>();
    private final int mDisplayId;

    /** @hide */
    public MediaProjection(Context context, IMediaProjection impl) {
@@ -88,6 +92,11 @@ public final class MediaProjection {
            throw new RuntimeException("Failed to start media projection", e);
        }
        mDisplayManager = displayManager;

        final UserManager userManager = context.getSystemService(UserManager.class);
        mDisplayId = userManager.isVisibleBackgroundUsersSupported()
                ? userManager.getMainDisplayIdAssignedToUser()
                : DEFAULT_DISPLAY;
    }

    /**
@@ -156,6 +165,7 @@ public final class MediaProjection {
        if (surface != null) {
            builder.setSurface(surface);
        }
        builder.setDisplayIdToMirror(mDisplayId);
        return createVirtualDisplay(builder, callback, handler);
    }

@@ -234,6 +244,7 @@ public final class MediaProjection {
        if (surface != null) {
            builder.setSurface(surface);
        }
        builder.setDisplayIdToMirror(mDisplayId);
        return createVirtualDisplay(builder, callback, handler);
    }