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

Commit 0ac8f0c7 authored by Michael Wright's avatar Michael Wright
Browse files

Allow for multiple internal and external viewports.

Also, don't restrict to non-default displays for internal viewports;
leave that up to the input system to decide the policy on selecting
which display to use if there's more than one.

Bug: 116824030
Bug: 171549575
Test: atest InputReader_test
Change-Id: I0f29b4c6043edf4f3e8fa5ac10380d67b11203d3
parent a6bccfc4
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -1423,17 +1423,18 @@ public final class DisplayManagerService extends SystemService {

    private Optional<Integer> getViewportType(DisplayDeviceInfo info) {
        // Get the corresponding viewport type.
        if ((info.flags & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) {
        switch (info.touch) {
            case DisplayDeviceInfo.TOUCH_INTERNAL:
                return Optional.of(VIEWPORT_INTERNAL);
        } else if (info.touch == DisplayDeviceInfo.TOUCH_EXTERNAL) {
            case DisplayDeviceInfo.TOUCH_EXTERNAL:
                return Optional.of(VIEWPORT_EXTERNAL);
        } else if (info.touch == DisplayDeviceInfo.TOUCH_VIRTUAL
                && !TextUtils.isEmpty(info.uniqueId)) {
            case DisplayDeviceInfo.TOUCH_VIRTUAL:
                if (!TextUtils.isEmpty(info.uniqueId)) {
                    return Optional.of(VIEWPORT_VIRTUAL);
        } else {
            if (DEBUG) {
                Slog.i(TAG, "Display " + info + " does not support input device matching.");
                }
                // fallthrough
            default:
                Slog.w(TAG, "Display " + info + " does not support input device matching.");
        }
        return Optional.empty();
    }
@@ -1483,13 +1484,6 @@ public final class DisplayManagerService extends SystemService {
            return null;
        }

        // Only allow a single INTERNAL or EXTERNAL viewport by forcing their uniqueIds
        // to be identical (in particular, empty).
        // TODO (b/116824030) allow multiple EXTERNAL viewports and remove this function.
        if (viewportType != VIEWPORT_VIRTUAL) {
            uniqueId = "";
        }

        DisplayViewport viewport;
        final int count = mViewports.size();
        for (int i = 0; i < count; i++) {