static jboolean nativeSendMotionEvent(JNIEnv* env, jclass clazz, jlong senderPtr, jint seq, jobject eventObj) { sp<NativeInputEventSender> sender = reinterpret_cast<NativeInputEventSender*>(senderPtr); MotionEvent* event = android_view_MotionEvent_getNativePtr(env, eventObj); status_t status = sender->sendMotionEvent(seq, event); return !status; }
static void android_view_VelocityTracker_nativeAddMovement(JNIEnv* env, jclass clazz, jlong ptr, jobject eventObj) { const MotionEvent* event = android_view_MotionEvent_getNativePtr(env, eventObj); if (!event) { ALOGW("nativeAddMovement failed because MotionEvent was finalized."); return; } VelocityTrackerState* state = reinterpret_cast<VelocityTrackerState*>(ptr); state->addMovement(event); }
static jlong nativeSendMotionEvent(JNIEnv* env, jobject clazz, jlong ptr, jobject eventObj) { sp<InputQueue> queue = reinterpret_cast<InputQueue*>(ptr); MotionEvent* originalEvent = android_view_MotionEvent_getNativePtr(env, eventObj); if (!originalEvent) { jniThrowRuntimeException(env, "Could not obtain MotionEvent pointer."); return -1; } MotionEvent* event = queue->createMotionEvent(); event->copyFrom(originalEvent, true /* keepHistory */); queue->enqueueEvent(event); return reinterpret_cast<jlong>(event); }
jobject android_view_MotionEvent_obtainAsCopy(JNIEnv* env, const MotionEvent* event) { jobject eventObj = env->CallStaticObjectMethod(gMotionEventClassInfo.clazz, gMotionEventClassInfo.obtain); if (env->ExceptionCheck() || !eventObj) { ALOGE("An exception occurred while obtaining a motion event."); LOGE_EX(env); env->ExceptionClear(); return NULL; } MotionEvent* destEvent = android_view_MotionEvent_getNativePtr(env, eventObj); if (!destEvent) { destEvent = new MotionEvent(); android_view_MotionEvent_setNativePtr(env, eventObj, destEvent); } destEvent->copyFrom(event, true); return eventObj; }