mSampleEventTimes.add(parcel.readLong()); for (int i = 0; i < pointerCount; i++) { NativeInput.PointerCoords pointerCoords = new NativeInput.PointerCoords(); mSamplePointerCoords.add(pointerCoords); if (!pointerCoords.readFromParcel(parcel)) { return false;
for (int i = 0; i < numSamples; i++) { PointerCoords c = mSamplePointerCoords.get(i); final Ref<Float> x = new Ref<>(c.getAxisValue(AMOTION_EVENT_AXIS_X) + oldXOffset); final Ref<Float> y = new Ref<>(c.getAxisValue(AMOTION_EVENT_AXIS_Y) + oldYOffset); transformPoint(matrix, x.get(), y.get(), x, y); c.setAxisValue(AMOTION_EVENT_AXIS_X, x.get() - mXOffset); c.setAxisValue(AMOTION_EVENT_AXIS_Y, y.get() - mYOffset); float orientation = c.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION); c.setAxisValue( AMOTION_EVENT_AXIS_ORIENTATION, transformAngle(matrix, orientation, originX.get(), originY.get()));
public void scale(float scaleFactor) { mXOffset *= scaleFactor; mYOffset *= scaleFactor; mXPrecision *= scaleFactor; mYPrecision *= scaleFactor; int numSamples = mSamplePointerCoords.size(); for (int i = 0; i < numSamples; i++) { mSamplePointerCoords.get(i).scale(scaleFactor); } }
mSampleEventTimes.add(parcel.readLong()); for (int i = 0; i < pointerCount; i++) { NativeInput.PointerCoords pointerCoords = new NativeInput.PointerCoords(); mSamplePointerCoords.add(pointerCoords); if (!pointerCoords.readFromParcel(parcel)) { return false;
float yOffset, PointerCoords outPointerCoordsObj) { outPointerCoordsObj.x = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset; outPointerCoordsObj.y = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset; outPointerCoordsObj.pressure = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE); outPointerCoordsObj.size = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_SIZE); outPointerCoordsObj.touchMajor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR); outPointerCoordsObj.touchMinor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR); outPointerCoordsObj.toolMajor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR); outPointerCoordsObj.toolMinor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR); outPointerCoordsObj.orientation = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION); long outBits = 0; NativeBitSet64 bits = new NativeBitSet64(rawPointerCoords.getBits()); bits.clearBit(AMOTION_EVENT_AXIS_X); bits.clearBit(AMOTION_EVENT_AXIS_Y); int axis = bits.clearFirstMarkedBit(); outBits |= NativeBitSet64.valueForBit(axis); outValues[index++] = rawPointerCoords.getAxisValue(axis); } while (!bits.isEmpty());
for (int i = 0; i < numSamples; i++) { PointerCoords c = mSamplePointerCoords.get(i); final Ref<Float> x = new Ref<>(c.getAxisValue(AMOTION_EVENT_AXIS_X) + oldXOffset); final Ref<Float> y = new Ref<>(c.getAxisValue(AMOTION_EVENT_AXIS_Y) + oldYOffset); transformPoint(matrix, x.get(), y.get(), x, y); c.setAxisValue(AMOTION_EVENT_AXIS_X, x.get() - mXOffset); c.setAxisValue(AMOTION_EVENT_AXIS_Y, y.get() - mYOffset); float orientation = c.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION); c.setAxisValue( AMOTION_EVENT_AXIS_ORIENTATION, transformAngle(matrix, orientation, originX.get(), originY.get()));
private static NativeInput.PointerCoords pointerCoordsToNative( PointerCoords pointerCoordsObj, float xOffset, float yOffset) { NativeInput.PointerCoords outRawPointerCoords = new NativeInput.PointerCoords(); outRawPointerCoords.clear(); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, pointerCoordsObj.x - xOffset); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, pointerCoordsObj.y - yOffset); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pointerCoordsObj.pressure); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_SIZE, pointerCoordsObj.size); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, pointerCoordsObj.touchMajor); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, pointerCoordsObj.touchMinor); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, pointerCoordsObj.toolMajor); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, pointerCoordsObj.toolMinor); outRawPointerCoords.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, pointerCoordsObj.orientation); long packedAxisBits = ReflectionHelpers.getField(pointerCoordsObj, "mPackedAxisBits"); NativeBitSet64 bits = new NativeBitSet64(packedAxisBits); if (!bits.isEmpty()) { float[] valuesArray = ReflectionHelpers.getField(pointerCoordsObj, "mPackedAxisValues"); if (valuesArray != null) { int index = 0; do { int axis = bits.clearFirstMarkedBit(); outRawPointerCoords.setAxisValue(axis, valuesArray[index++]); } while (!bits.isEmpty()); } } return outRawPointerCoords; }
/** * @deprecated use {@link MotionEvent#obtain} or {@link * androidx.test.core.view.MotionEventBuilder} to create a MotionEvent with desired data. */ @Deprecated public MotionEvent setPointer2(float pointer1X, float pointer1Y) { NativeInput.MotionEvent event = getNativeMotionEvent(); List<NativeInput.PointerCoords> pointerCoords = event.getSamplePointerCoords(); List<PointerProperties> pointerProperties = event.getPointerProperties(); ensureTwoPointers(pointerCoords, pointerProperties); pointerCoords.get(1).setAxisValue(AMOTION_EVENT_AXIS_X, pointer1X); pointerCoords.get(1).setAxisValue(AMOTION_EVENT_AXIS_Y, pointer1Y); return realMotionEvent; }
public float getX() { return getAxisValue(AMOTION_EVENT_AXIS_X); }
public float getHistoricalRawAxisValue(int axis, int pointerIndex, int historicalIndex) { return getHistoricalRawPointerCoords(pointerIndex, historicalIndex).getAxisValue(axis); }
public float getRawAxisValue(int axis, int pointerIndex) { return getRawPointerCoords(pointerIndex).getAxisValue(axis); }
public float getY() { return getAxisValue(AMOTION_EVENT_AXIS_Y); }
private static void ensureTwoPointers( List<NativeInput.PointerCoords> pointerCoords, List<PointerProperties> pointerProperties) { if (pointerCoords.size() < 2) { pointerCoords.add(new NativeInput.PointerCoords()); } if (pointerProperties.size() < 2) { pointerProperties.add(new PointerProperties()); } }
public void scale(float scaleFactor) { mXOffset *= scaleFactor; mYOffset *= scaleFactor; mXPrecision *= scaleFactor; mYPrecision *= scaleFactor; int numSamples = mSamplePointerCoords.size(); for (int i = 0; i < numSamples; i++) { mSamplePointerCoords.get(i).scale(scaleFactor); } }
static void scaleAxisValue(PointerCoords c, int axis, float scaleFactor) { float value = c.getAxisValue(axis); if (value != 0) { c.setAxisValue(axis, value * scaleFactor); } }
public float getHistoricalAxisValue(int axis, int pointerIndex, int historicalIndex) { float value = getHistoricalRawPointerCoords(pointerIndex, historicalIndex).getAxisValue(axis); switch (axis) { case AMOTION_EVENT_AXIS_X: return value + mXOffset; case AMOTION_EVENT_AXIS_Y: return value + mYOffset; } return value; }
public void applyOffset(float xOffset, float yOffset) { setAxisValue(AMOTION_EVENT_AXIS_X, getX() + xOffset); setAxisValue(AMOTION_EVENT_AXIS_Y, getY() + yOffset); }
public float getAxisValue(int axis, int pointerIndex) { float value = getRawPointerCoords(pointerIndex).getAxisValue(axis); switch (axis) { case AMOTION_EVENT_AXIS_X: return value + mXOffset; case AMOTION_EVENT_AXIS_Y: return value + mYOffset; } return value; }
public void scale(float scaleFactor) { // No need to scale pressure or size since they are normalized. // No need to scale orientation since it is meaningless to do so. scaleAxisValue(this, AMOTION_EVENT_AXIS_X, scaleFactor); scaleAxisValue(this, AMOTION_EVENT_AXIS_Y, scaleFactor); scaleAxisValue(this, AMOTION_EVENT_AXIS_TOUCH_MAJOR, scaleFactor); scaleAxisValue(this, AMOTION_EVENT_AXIS_TOUCH_MINOR, scaleFactor); scaleAxisValue(this, AMOTION_EVENT_AXIS_TOOL_MAJOR, scaleFactor); scaleAxisValue(this, AMOTION_EVENT_AXIS_TOOL_MINOR, scaleFactor); }
float yOffset, PointerCoords outPointerCoordsObj) { outPointerCoordsObj.x = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset; outPointerCoordsObj.y = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset; outPointerCoordsObj.pressure = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE); outPointerCoordsObj.size = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_SIZE); outPointerCoordsObj.touchMajor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR); outPointerCoordsObj.touchMinor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR); outPointerCoordsObj.toolMajor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR); outPointerCoordsObj.toolMinor = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR); outPointerCoordsObj.orientation = rawPointerCoords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION); long outBits = 0; NativeBitSet64 bits = new NativeBitSet64(rawPointerCoords.getBits()); bits.clearBit(AMOTION_EVENT_AXIS_X); bits.clearBit(AMOTION_EVENT_AXIS_Y); int axis = bits.clearFirstMarkedBit(); outBits |= NativeBitSet64.valueForBit(axis); outValues[index++] = rawPointerCoords.getAxisValue(axis); } while (!bits.isEmpty());