blob: 526ca0682dc9b215c25ca3e2b85c69998a3a5571 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/events/android/motion_event_android_source_java.h"
#include "base/android/jni_android.h"
#include "base/memory/ptr_util.h"
#include "ui/events/android/events_android_utils.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "ui/events/motionevent_jni_headers/MotionEvent_jni.h"
using base::android::AttachCurrentThread;
using base::android::ScopedJavaLocalRef;
namespace ui {
// static
std::unique_ptr<MotionEventAndroidSource> MotionEventAndroidSourceJava::Create(
const base::android::JavaRef<jobject>& event,
bool is_latest_event_time_resampled) {
return base::WrapUnique(
new MotionEventAndroidSourceJava(event, is_latest_event_time_resampled));
}
MotionEventAndroidSourceJava::MotionEventAndroidSourceJava(
const base::android::JavaRef<jobject>& event,
bool is_latest_event_time_resampled)
: event_(event),
is_latest_event_time_resampled_(is_latest_event_time_resampled) {
CHECK(!event_.is_null());
}
MotionEventAndroidSourceJava::~MotionEventAndroidSourceJava() = default;
int MotionEventAndroidSourceJava::GetPointerId(size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getPointerId(AttachCurrentThread(),
event_, pointer_index);
}
float MotionEventAndroidSourceJava::GetXPix(size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getX(AttachCurrentThread(), event_,
pointer_index);
}
float MotionEventAndroidSourceJava::GetYPix(size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getY(AttachCurrentThread(), event_,
pointer_index);
}
float MotionEventAndroidSourceJava::GetTouchMajorPix(
size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getTouchMajor(AttachCurrentThread(),
event_, pointer_index);
}
float MotionEventAndroidSourceJava::GetTouchMinorPix(
size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getTouchMinor(AttachCurrentThread(),
event_, pointer_index);
}
float MotionEventAndroidSourceJava::GetRawOrientation(
size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getOrientation(
AttachCurrentThread(), event_, pointer_index);
}
float MotionEventAndroidSourceJava::GetPressure(size_t pointer_index) const {
return JNI_MotionEvent::Java_MotionEvent_getPressure(AttachCurrentThread(),
event_, pointer_index);
}
float MotionEventAndroidSourceJava::GetAxisHscroll(size_t pointer_index) const {
return Java_MotionEvent_getAxisValue(AttachCurrentThread(), event_,
JNI_MotionEvent::AXIS_HSCROLL,
pointer_index);
}
float MotionEventAndroidSourceJava::GetAxisVscroll(size_t pointer_index) const {
return Java_MotionEvent_getAxisValue(AttachCurrentThread(), event_,
JNI_MotionEvent::AXIS_VSCROLL,
pointer_index);
}
float MotionEventAndroidSourceJava::GetRawTilt(size_t pointer_index) const {
return Java_MotionEvent_getAxisValue(
AttachCurrentThread(), event_, JNI_MotionEvent::AXIS_TILT, pointer_index);
}
MotionEvent::ToolType MotionEventAndroidSourceJava::GetToolType(
size_t pointer_index) const {
return FromAndroidToolType(JNI_MotionEvent::Java_MotionEvent_getToolType(
AttachCurrentThread(), event_, pointer_index));
}
int MotionEventAndroidSourceJava::GetActionMasked() const {
return JNI_MotionEvent::Java_MotionEvent_getActionMasked(
AttachCurrentThread(), event_);
}
int MotionEventAndroidSourceJava::GetButtonState() const {
return JNI_MotionEvent::Java_MotionEvent_getButtonState(AttachCurrentThread(),
event_);
}
base::TimeTicks MotionEventAndroidSourceJava::GetHistoricalEventTime(
size_t historical_index) const {
jlong time_ms = JNI_MotionEvent::Java_MotionEvent_getHistoricalEventTime(
AttachCurrentThread(), event_, historical_index);
return base::TimeTicks::FromUptimeMillis(time_ms);
}
float MotionEventAndroidSourceJava::GetHistoricalTouchMajorPix(
size_t pointer_index,
size_t historical_index) const {
return JNI_MotionEvent::Java_MotionEvent_getHistoricalTouchMajor(
AttachCurrentThread(), event_, pointer_index, historical_index);
}
float MotionEventAndroidSourceJava::GetHistoricalXPix(
size_t pointer_index,
size_t historical_index) const {
return JNI_MotionEvent::Java_MotionEvent_getHistoricalX(
AttachCurrentThread(), event_, pointer_index, historical_index);
}
float MotionEventAndroidSourceJava::GetHistoricalYPix(
size_t pointer_index,
size_t historical_index) const {
return JNI_MotionEvent::Java_MotionEvent_getHistoricalY(
AttachCurrentThread(), event_, pointer_index, historical_index);
}
bool MotionEventAndroidSourceJava::IsLatestEventTimeResampled() const {
return is_latest_event_time_resampled_;
}
int MotionEventAndroidSourceJava::GetSource() const {
return JNI_MotionEvent::Java_MotionEvent_getSource(AttachCurrentThread(),
event_);
}
ScopedJavaLocalRef<jobject> MotionEventAndroidSourceJava::GetJavaObject()
const {
return ScopedJavaLocalRef<jobject>(event_);
}
int MotionEventAndroidSourceJava::GetMetaState() const {
return JNI_MotionEvent::Java_MotionEvent_getMetaState(AttachCurrentThread(),
event_);
}
std::unique_ptr<MotionEventAndroidSource> MotionEventAndroidSourceJava::Clone()
const {
return Create(event_, is_latest_event_time_resampled_);
}
} // namespace ui