From 7e1443fba3f81742b29e28f246e8d6b236c251a7 Mon Sep 17 00:00:00 2001 From: Prabir Pradhan Date: Fri, 23 Jul 2021 21:01:55 +0000 Subject: MotionEvent: Guard getRawX/Y compatibility logic using feature flag The getRawX/Y API contains compatibility logic that should only be used when the per-window-input-rotation feature is enabled. The compatibility logic was previously unguarded because it was assumed that the logic was a no-op when the flag was not enabled. However, this turned out to be untrue, resulting in the bug. Bug: 187686656 Test: manual: using repro steps listed in the bug. Change-Id: I6603694f9872e7df4b6f72c7fb2555b3249687a6 --- libs/input/Input.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libs/input/Input.cpp') diff --git a/libs/input/Input.cpp b/libs/input/Input.cpp index 70ed438112..d954d23507 100644 --- a/libs/input/Input.cpp +++ b/libs/input/Input.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -41,6 +42,15 @@ namespace android { namespace { +// When per-window-input-rotation is enabled, InputFlinger works in the un-rotated display +// coordinates and SurfaceFlinger includes the display rotation in the input window transforms. +bool isPerWindowInputRotationEnabled() { + static const bool PER_WINDOW_INPUT_ROTATION = + base::GetBoolProperty("persist.debug.per_window_input_rotation", false); + + return PER_WINDOW_INPUT_ROTATION; +} + float transformAngle(const ui::Transform& transform, float angleRadians) { // Construct and transform a vector oriented at the specified clockwise angle from vertical. // Coordinate system: down is increasing Y, right is increasing X. @@ -506,6 +516,8 @@ float MotionEvent::getHistoricalRawAxisValue(int32_t axis, size_t pointerIndex, size_t historicalIndex) const { const PointerCoords* coords = getHistoricalRawPointerCoords(pointerIndex, historicalIndex); + if (!isPerWindowInputRotationEnabled()) return coords->getAxisValue(axis); + if (axis == AMOTION_EVENT_AXIS_X || axis == AMOTION_EVENT_AXIS_Y) { // For compatibility, convert raw coordinates into "oriented screen space". Once app // developers are educated about getRaw, we can consider removing this. -- cgit v1.2.3-59-g8ed1b