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

Commit ee971e56 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Fix some bugs in input rotation" into sc-dev

parents 55f3b80e ba7e1a52
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.MotionEvent.PointerCoords;
import android.view.Surface;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
@@ -60,9 +59,6 @@ public class PointerLocationView extends View implements InputDeviceListener,
     */
    private static final String GESTURE_EXCLUSION_PROP = "debug.pointerlocation.showexclusion";

    private static final boolean ENABLE_PER_WINDOW_INPUT_ROTATION =
            SystemProperties.getBoolean("persist.debug.per_window_input_rotation", false);

    public static class PointerState {
        // Trace of previous points.
        private float[] mTraceX = new float[32];
@@ -356,21 +352,6 @@ public class PointerLocationView extends View implements InputDeviceListener,
                    .toString(), 1 + itemW * 6, base, mTextPaint);
        }

        int saveId = canvas.save();
        if (ENABLE_PER_WINDOW_INPUT_ROTATION) {
            // Rotate negative (since we're rotating the drawing canvas vs the output).
            canvas.rotate(-90.0f * mContext.getDisplay().getRotation());
            switch (mContext.getDisplay().getRotation()) {
                case Surface.ROTATION_90:
                    canvas.translate(-canvas.getHeight(), 0);
                    break;
                case Surface.ROTATION_180:
                    canvas.translate(-canvas.getWidth(), -canvas.getHeight());
                    break;
                case Surface.ROTATION_270:
                    canvas.translate(0, -canvas.getWidth());
            }
        }
        // Pointer trace.
        for (int p = 0; p < NP; p++) {
            final PointerState ps = mPointers.get(p);
@@ -480,7 +461,6 @@ public class PointerLocationView extends View implements InputDeviceListener,
                }
            }
        }
        canvas.restoreToCount(saveId);
    }

    private void logMotionEvent(String type, MotionEvent event) {
+7 −4
Original line number Diff line number Diff line
@@ -590,10 +590,13 @@ public class InputManagerService extends IInputManager.Stub
            for (int i = viewports.size() - 1; i >= 0; --i) {
                final DisplayViewport v = vArray[i] = viewports.get(i).makeCopy();
                // deviceWidth/Height are apparently in "rotated" space, so flip them if needed.
                int dw = (v.orientation % 2) == 0 ? v.deviceWidth : v.deviceHeight;
                int dh = (v.orientation % 2) == 0 ? v.deviceHeight : v.deviceWidth;
                v.logicalFrame.set(0, 0, dw, dh);
                v.physicalFrame.set(0, 0, dw, dh);
                if (v.orientation % 2 != 0) {
                    final int dw = v.deviceWidth;
                    v.deviceWidth = v.deviceHeight;
                    v.deviceHeight = dw;
                }
                v.logicalFrame.set(0, 0, v.deviceWidth, v.deviceHeight);
                v.physicalFrame.set(0, 0, v.deviceWidth, v.deviceHeight);
                v.orientation = 0;
            }
        } else {
+6 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;

import static com.android.server.input.InputManagerService.ENABLE_PER_WINDOW_INPUT_ROTATION;

import android.graphics.Point;
import android.view.InputChannel;
import android.view.InputDevice;
import android.view.InputEvent;
@@ -35,6 +36,7 @@ public class PointerEventDispatcher extends InputEventReceiver {
    private PointerEventListener[] mListenersArray = new PointerEventListener[0];

    private final DisplayContent mDisplayContent;
    private final Point mTmpSize = new Point();

    public PointerEventDispatcher(InputChannel inputChannel, DisplayContent dc) {
        super(inputChannel, UiThread.getHandler().getLooper());
@@ -48,12 +50,12 @@ public class PointerEventDispatcher extends InputEventReceiver {
                    && (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
                MotionEvent motionEvent = (MotionEvent) event;
                if (ENABLE_PER_WINDOW_INPUT_ROTATION) {
                    int rotation = mDisplayContent.getRotation();
                    final int rotation = mDisplayContent.getRotation();
                    if (rotation != Surface.ROTATION_0) {
                        mDisplayContent.getDisplay().getRealSize(mTmpSize);
                        motionEvent = MotionEvent.obtain(motionEvent);
                        motionEvent.transform(MotionEvent.createRotateMatrix(rotation,
                                mDisplayContent.getDisplayMetrics().widthPixels,
                                mDisplayContent.getDisplayMetrics().heightPixels));
                        motionEvent.transform(MotionEvent.createRotateMatrix(
                                rotation, mTmpSize.x, mTmpSize.y));
                    }
                }
                PointerEventListener[] listeners;