Propagate isResampled into MotionEvent.PointerCoords.

Bug: 167946721
Test: atest libinput_tests
Change-Id: I117ab27583dd5777e80ad91248cca1208852bf4b
This commit is contained in:
Philip Quinn
2022-12-20 18:28:23 -08:00
parent 484149d214
commit c89317f3a8
2 changed files with 18 additions and 0 deletions

View File

@@ -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;
}
/**

View File

@@ -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");