summaryrefslogtreecommitdiff
path: root/core/java/android/view/MotionEvent.java
diff options
context:
space:
mode:
authorSiarhei Vishniakou <svv@google.com>2018-01-31 16:49:36 -0800
committerSiarhei Vishniakou <svv@google.com>2018-03-06 11:53:07 -0800
commit85ddfffd2f7414fbaf99f1750dcd89ed1aafddaa (patch)
treeb5b9f66c13966f714f3b8af02e8ccbdc54016d68 /core/java/android/view/MotionEvent.java
parentf4a368200e22fcebb06d03c70ba7bd5b53913a5a (diff)
Move display id into MotionEvent
Display id is now part of MotionEvent. Test: atest view.MotionEventTest view.KeyEventTest Bug: 64258305 Change-Id: Ifadd6b34f4dd5a91669baf146daa62944d1de974
Diffstat (limited to 'core/java/android/view/MotionEvent.java')
-rw-r--r--core/java/android/view/MotionEvent.java82
1 files changed, 74 insertions, 8 deletions
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 1d7c1dedc62e..9148c27f6006 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -16,11 +16,14 @@
package android.view;
+import static android.view.Display.DEFAULT_DISPLAY;
+
import android.annotation.TestApi;
import android.graphics.Matrix;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
+import android.util.Log;
import android.util.SparseArray;
import dalvik.annotation.optimization.CriticalNative;
@@ -172,6 +175,7 @@ import java.util.Objects;
* </p>
*/
public final class MotionEvent extends InputEvent implements Parcelable {
+ private static final String TAG = "MotionEvent";
private static final long NS_PER_MS = 1000000;
private static final String LABEL_PREFIX = "AXIS_";
@@ -1470,7 +1474,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
private MotionEvent mNext;
private static native long nativeInitialize(long nativePtr,
- int deviceId, int source, int action, int flags, int edgeFlags,
+ int deviceId, int source, int displayId, int action, int flags, int edgeFlags,
int metaState, int buttonState,
float xOffset, float yOffset, float xPrecision, float yPrecision,
long downTimeNanos, long eventTimeNanos,
@@ -1514,7 +1518,11 @@ public final class MotionEvent extends InputEvent implements Parcelable {
@CriticalNative
private static native int nativeGetSource(long nativePtr);
@CriticalNative
- private static native int nativeSetSource(long nativePtr, int source);
+ private static native void nativeSetSource(long nativePtr, int source);
+ @CriticalNative
+ private static native int nativeGetDisplayId(long nativePtr);
+ @CriticalNative
+ private static native void nativeSetDisplayId(long nativePtr, int displayId);
@CriticalNative
private static native int nativeGetAction(long nativePtr);
@CriticalNative
@@ -1623,19 +1631,26 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* @param edgeFlags A bitfield indicating which edges, if any, were touched by this
* MotionEvent.
* @param source The source of this event.
+ * @param displayId The display ID associated with this event.
* @param flags The motion event flags.
+ * @hide
*/
static public MotionEvent obtain(long downTime, long eventTime,
int action, int pointerCount, PointerProperties[] pointerProperties,
PointerCoords[] pointerCoords, int metaState, int buttonState,
float xPrecision, float yPrecision, int deviceId,
- int edgeFlags, int source, int flags) {
+ int edgeFlags, int source, int displayId, int flags) {
MotionEvent ev = obtain();
ev.mNativePtr = nativeInitialize(ev.mNativePtr,
- deviceId, source, action, flags, edgeFlags, metaState, buttonState,
+ deviceId, source, displayId, action, flags, edgeFlags, metaState, buttonState,
0, 0, xPrecision, yPrecision,
downTime * NS_PER_MS, eventTime * NS_PER_MS,
pointerCount, pointerProperties, pointerCoords);
+ if (ev.mNativePtr == 0) {
+ Log.e(TAG, "Could not initialize MotionEvent");
+ ev.recycle();
+ return null;
+ }
return ev;
}
@@ -1649,6 +1664,44 @@ public final class MotionEvent extends InputEvent implements Parcelable {
* must be obtained from {@link SystemClock#uptimeMillis()}.
* @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
* @param pointerCount The number of pointers that will be in this event.
+ * @param pointerProperties An array of <em>pointerCount</em> values providing
+ * a {@link PointerProperties} property object for each pointer, which must
+ * include the pointer identifier.
+ * @param pointerCoords An array of <em>pointerCount</em> values providing
+ * a {@link PointerCoords} coordinate object for each pointer.
+ * @param metaState The state of any meta / modifier keys that were in effect when
+ * the event was generated.
+ * @param buttonState The state of buttons that are pressed.
+ * @param xPrecision The precision of the X coordinate being reported.
+ * @param yPrecision The precision of the Y coordinate being reported.
+ * @param deviceId The id for the device that this event came from. An id of
+ * zero indicates that the event didn't come from a physical device; other
+ * numbers are arbitrary and you shouldn't depend on the values.
+ * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
+ * MotionEvent.
+ * @param source The source of this event.
+ * @param flags The motion event flags.
+ */
+ public static MotionEvent obtain(long downTime, long eventTime,
+ int action, int pointerCount, PointerProperties[] pointerProperties,
+ PointerCoords[] pointerCoords, int metaState, int buttonState,
+ float xPrecision, float yPrecision, int deviceId,
+ int edgeFlags, int source, int flags) {
+ return obtain(downTime, eventTime, action, pointerCount, pointerProperties, pointerCoords,
+ metaState, buttonState, xPrecision, yPrecision, deviceId, edgeFlags, source,
+ DEFAULT_DISPLAY, flags);
+ }
+
+ /**
+ * Create a new MotionEvent, filling in all of the basic values that
+ * define the motion.
+ *
+ * @param downTime The time (in ms) when the user originally pressed down to start
+ * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}.
+ * @param eventTime The the time (in ms) when this specific event was generated. This
+ * must be obtained from {@link SystemClock#uptimeMillis()}.
+ * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
+ * @param pointerCount The number of pointers that will be in this event.
* @param pointerIds An array of <em>pointerCount</em> values providing
* an identifier for each pointer.
* @param pointerCoords An array of <em>pointerCount</em> values providing
@@ -1733,7 +1786,8 @@ public final class MotionEvent extends InputEvent implements Parcelable {
pc[0].size = size;
ev.mNativePtr = nativeInitialize(ev.mNativePtr,
- deviceId, InputDevice.SOURCE_UNKNOWN, action, 0, edgeFlags, metaState, 0,
+ deviceId, InputDevice.SOURCE_UNKNOWN, DEFAULT_DISPLAY,
+ action, 0, edgeFlags, metaState, 0,
0, 0, xPrecision, yPrecision,
downTime * NS_PER_MS, eventTime * NS_PER_MS,
1, pp, pc);
@@ -1888,6 +1942,16 @@ public final class MotionEvent extends InputEvent implements Parcelable {
nativeSetSource(mNativePtr, source);
}
+ /** @hide */
+ public int getDisplayId() {
+ return nativeGetDisplayId(mNativePtr);
+ }
+
+ /** @hide */
+ public void setDisplayId(int displayId) {
+ nativeSetDisplayId(mNativePtr, displayId);
+ }
+
/**
* Return the kind of action being performed.
* Consider using {@link #getActionMasked} and {@link #getActionIndex} to retrieve
@@ -3023,7 +3087,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
/**
* Adds all of the movement samples of the specified event to this one if
* it is compatible. To be compatible, the event must have the same device id,
- * source, action, flags, pointer count, pointer properties.
+ * source, display id, action, flags, pointer count, pointer properties.
*
* Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
*
@@ -3043,6 +3107,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
if (nativeGetDeviceId(mNativePtr) != nativeGetDeviceId(event.mNativePtr)
|| nativeGetSource(mNativePtr) != nativeGetSource(event.mNativePtr)
+ || nativeGetDisplayId(mNativePtr) != nativeGetDisplayId(event.mNativePtr)
|| nativeGetFlags(mNativePtr) != nativeGetFlags(event.mNativePtr)) {
return false;
}
@@ -3128,6 +3193,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
ev.mNativePtr = nativeInitialize(ev.mNativePtr,
nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
+ nativeGetDisplayId(mNativePtr),
nativeGetAction(mNativePtr), nativeGetFlags(mNativePtr),
nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
nativeGetButtonState(mNativePtr),
@@ -3172,7 +3238,6 @@ public final class MotionEvent extends InputEvent implements Parcelable {
>> ACTION_POINTER_INDEX_SHIFT;
int newActionPointerIndex = -1;
int newPointerCount = 0;
- int newIdBits = 0;
for (int i = 0; i < oldPointerCount; i++) {
nativeGetPointerProperties(mNativePtr, i, pp[newPointerCount]);
final int idBit = 1 << pp[newPointerCount].id;
@@ -3182,7 +3247,6 @@ public final class MotionEvent extends InputEvent implements Parcelable {
}
map[newPointerCount] = i;
newPointerCount += 1;
- newIdBits |= idBit;
}
}
@@ -3221,6 +3285,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
if (h == 0) {
ev.mNativePtr = nativeInitialize(ev.mNativePtr,
nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
+ nativeGetDisplayId(mNativePtr),
newAction, nativeGetFlags(mNativePtr),
nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
nativeGetButtonState(mNativePtr),
@@ -3266,6 +3331,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
msg.append(", downTime=").append(getDownTime());
msg.append(", deviceId=").append(getDeviceId());
msg.append(", source=0x").append(Integer.toHexString(getSource()));
+ msg.append(", displayId=").append(getDisplayId());
}
msg.append(" }");
return msg.toString();