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

Commit f29b4c2c authored by Karthik Ravi Shankar's avatar Karthik Ravi Shankar
Browse files

Fix when vr app launches 2d activity



When a 2D app is launched from a VR app, since the VR app was on
DEFAULT_DISPLAY, the 2D app is also moved to DEFAULT_DISPLAY. This needs
to be addressed by moving any non-VR 2D app launch in VR mode to the
virtual display.

Bug: 37111307
Test: android.server.cts.ActivityManagerDisplayTests
Test: #testVrActivityLaunch
Test: #testVrActivityReLaunch
Test: #testPostVrLaunch

Change-Id: I83bffe94bb89415a6b3c026dd7077e70fe36fee0
Signed-off-by: default avatarKarthik Ravi Shankar <karthikrs@google.com>
parent 23a7c1e8
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -1472,17 +1472,11 @@ class ActivityStarter {
    }

    /**
     * Returns the ID of the display to use for a new activity. If the source activity has
     * a explicit display ID set, use that to launch the activity. If not and the device is in VR
     * mode, then return the Vr mode's virtual display ID.
     * Returns the ID of the display to use for a new activity. If the device is in VR mode,
     * then return the Vr mode's virtual display ID. If not, if the source activity has
     * a explicit display ID set, use that to launch the activity.
     */
    private int getSourceDisplayId(ActivityRecord sourceRecord, ActivityRecord startingActivity) {
        int displayId = sourceRecord != null ? sourceRecord.getDisplayId() : INVALID_DISPLAY;
        // If the activity has a displayId set explicitly, launch it on the same displayId.
        if (displayId != INVALID_DISPLAY) {
            return displayId;
        }

        // Check if the Activity is a VR activity. If so, the activity should be launched in
        // main display.
        if (startingActivity != null && startingActivity.requestedVrComponent != null) {
@@ -1490,7 +1484,7 @@ class ActivityStarter {
        }

        // Get the virtual display id from ActivityManagerService.
        displayId = mService.mVrCompatibilityDisplayId;
        int displayId = mService.mVrCompatibilityDisplayId;
        if (displayId != INVALID_DISPLAY) {
            if (DEBUG_STACK) {
                Slog.d(TAG, "getSourceDisplayId :" + displayId);
@@ -1498,6 +1492,12 @@ class ActivityStarter {
            mUsingVrCompatibilityDisplay = true;
            return displayId;
        }

        displayId = sourceRecord != null ? sourceRecord.getDisplayId() : INVALID_DISPLAY;
        // If the activity has a displayId set explicitly, launch it on the same displayId.
        if (displayId != INVALID_DISPLAY) {
            return displayId;
        }
        return DEFAULT_DISPLAY;
    }