From 67322b1ff058d9abadd94c10b0ce167508ead6f5 Mon Sep 17 00:00:00 2001 From: Prashant Malani Date: Tue, 25 Aug 2015 17:41:34 -0700 Subject: [PATCH] Add rotary encoder input source Devices which have rotating encoders for input devices can mark their MotionEvents as belonging to SOURCE_ROTARY_ENCODER. This is better than mapping such input events to pre-existing input sources, which may result is conflation regarding the expected behaviour of these older input sources. Events emanating from this input soruce will be accessible to the View hierarchy via onGenericMotionEvent(). We also introduce a new axis constant, AXIS_SCROLL, for axis movements that aren't strictly vertical or horizontal. Bug: 18707397 Change-Id: I1ad9af7c87b97d2c98b58b71cab2b780d0c86ec3 --- core/java/android/view/InputDevice.java | 9 +++++++++ core/java/android/view/MotionEvent.java | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index cc4598d16de9f..5592f7a42bacf 100644 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -255,6 +255,15 @@ public final class InputDevice implements Parcelable { */ public static final int SOURCE_TOUCH_NAVIGATION = 0x00200000 | SOURCE_CLASS_NONE; + /** + * The input source is a rotating encoder device whose motions should be interpreted as akin to + * those of a scroll wheel. + * + * @see #SOURCE_CLASS_NONE + * {@hide} + */ + public static final int SOURCE_ROTARY_ENCODER = 0x00400000 | SOURCE_CLASS_NONE; + /** * The input source is a joystick. * (It may also be a {@link #SOURCE_GAMEPAD}). diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index 6026d04a1f21b..527d7e51c3e32 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -961,6 +961,22 @@ public final class MotionEvent extends InputEvent implements Parcelable { */ public static final int AXIS_TILT = 25; + /** + * Axis constant: Generic scroll axis of a motion event. + *

+ *

+ *

+ * This axis should be used for scroll events that are neither strictly vertical nor horizontal. + * A good example would be the rotation of a rotary encoder input device. + *

+ * + * @see #getAxisValue(int, int) + * {@hide} + */ + public static final int AXIS_SCROLL = 26; + /** * Axis constant: Generic 1 axis of a motion event. * The interpretation of a generic axis is device-specific. @@ -1171,6 +1187,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { names.append(AXIS_BRAKE, "AXIS_BRAKE"); names.append(AXIS_DISTANCE, "AXIS_DISTANCE"); names.append(AXIS_TILT, "AXIS_TILT"); + names.append(AXIS_SCROLL, "AXIS_SCROLL"); names.append(AXIS_GENERIC_1, "AXIS_GENERIC_1"); names.append(AXIS_GENERIC_2, "AXIS_GENERIC_2"); names.append(AXIS_GENERIC_3, "AXIS_GENERIC_3");