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

Commit c89317f3 authored by Philip Quinn's avatar Philip Quinn
Browse files

Propagate isResampled into MotionEvent.PointerCoords.

Bug: 167946721
Test: atest libinput_tests
Change-Id: I117ab27583dd5777e80ad91248cca1208852bf4b
parent 484149d2
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -4220,6 +4220,13 @@ public final class MotionEvent extends InputEvent implements Parcelable {
         */
        public float relativeY;

        /**
         * Whether these coordinate data were generated by resampling.
         *
         * @hide
         */
        public boolean isResampled;

        /**
         * Clears the contents of this object.
         * Resets all axes to zero.
@@ -4238,6 +4245,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
            orientation = 0;
            relativeX = 0;
            relativeY = 0;
            isResampled = false;
        }

        /**
@@ -4270,6 +4278,7 @@ public final class MotionEvent extends InputEvent implements Parcelable {
            orientation = other.orientation;
            relativeX = other.relativeX;
            relativeY = other.relativeY;
            isResampled = other.isResampled;
        }

        /**
+9 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ static struct {
    jfieldID orientation;
    jfieldID relativeX;
    jfieldID relativeY;
    jfieldID isResampled;
} gPointerCoordsClassInfo;

static struct {
@@ -223,6 +224,8 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj,
    outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y,
                                      env->GetFloatField(pointerCoordsObj,
                                                         gPointerCoordsClassInfo.relativeY));
    outRawPointerCoords->isResampled =
            env->GetBooleanField(pointerCoordsObj, gPointerCoordsClassInfo.isResampled);

    BitSet64 bits =
            BitSet64(env->GetLongField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits));
@@ -440,6 +443,11 @@ static void android_view_MotionEvent_nativeGetPointerCoords(JNIEnv* env, jclass
        bits.clearBit(axis);
    }
    pointerCoordsFromNative(env, rawPointerCoords, bits, outPointerCoordsObj);

    const bool isResampled = historyPos == HISTORY_CURRENT
            ? event->isResampled(pointerIndex, event->getHistorySize())
            : event->isResampled(pointerIndex, historyPos);
    env->SetBooleanField(outPointerCoordsObj, gPointerCoordsClassInfo.isResampled, isResampled);
}

static void android_view_MotionEvent_nativeGetPointerProperties(JNIEnv* env, jclass clazz,
@@ -881,6 +889,7 @@ int register_android_view_MotionEvent(JNIEnv* env) {
    gPointerCoordsClassInfo.orientation = GetFieldIDOrDie(env, clazz, "orientation", "F");
    gPointerCoordsClassInfo.relativeX = GetFieldIDOrDie(env, clazz, "relativeX", "F");
    gPointerCoordsClassInfo.relativeY = GetFieldIDOrDie(env, clazz, "relativeY", "F");
    gPointerCoordsClassInfo.isResampled = GetFieldIDOrDie(env, clazz, "isResampled", "Z");

    clazz = FindClassOrDie(env, "android/view/MotionEvent$PointerProperties");