// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_ANDROID_EVENT_FORWARDER_H_ #define UI_ANDROID_EVENT_FORWARDER_H_ #include "base/android/scoped_java_ref.h" #include "base/memory/raw_ptr.h" #include "base/observer_list.h" #include "ui/android/ui_android_export.h" namespace ui { class MotionEventAndroid; class ViewAndroid; class UI_ANDROID_EXPORT EventForwarder { public: // Interface for observing events on the `EventForwarder`. class Observer : public base::CheckedObserver { public: ~Observer() override = default; virtual void OnTouchEvent(const ui::MotionEventAndroid&) {} virtual void OnMouseEvent(const ui::MotionEventAndroid&) {} virtual void OnGenericMotionEvent(const ui::MotionEventAndroid&) {} }; EventForwarder(const EventForwarder&) = delete; EventForwarder& operator=(const EventForwarder&) = delete; ~EventForwarder(); base::android::ScopedJavaLocalRef GetJavaWindowAndroid( JNIEnv* env, const base::android::JavaParamRef& obj); jboolean OnTouchEvent( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& motion_event, jlong time_ns, jint android_action, jint pointer_count, jint history_size, jint action_index, jfloat pos_x_0, jfloat pos_y_0, jfloat pos_x_1, jfloat pos_y_1, jint pointer_id_0, jint pointer_id_1, jfloat touch_major_0, jfloat touch_major_1, jfloat touch_minor_0, jfloat touch_minor_1, jfloat orientation_0, jfloat orientation_1, jfloat tilt_0, jfloat tilt_1, jfloat raw_pos_x, jfloat raw_pos_y, jint android_tool_type_0, jint android_tool_type_1, jint android_gesture_classification, jint android_button_state, jint android_meta_state, jboolean is_touch_handle_event); void OnMouseEvent(JNIEnv* env, const base::android::JavaParamRef& obj, jlong time_ns, jint android_action, jfloat x, jfloat y, jint pointer_id, jfloat pressure, jfloat orientation, jfloat tilt, jint android_changed_button, jint android_button_state, jint android_meta_state, jint tool_type); void OnDragEvent(JNIEnv* env, const base::android::JavaParamRef& jobj, jint action, jfloat x, jfloat y, jfloat screen_x, jfloat screen_y, const base::android::JavaParamRef& j_mimeTypes, const base::android::JavaParamRef& j_content); jboolean OnGestureEvent(JNIEnv* env, const base::android::JavaParamRef& jobj, jint type, jlong time_ms, jfloat scale); jboolean OnGenericMotionEvent( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& motion_event, jlong time_ns); jboolean OnKeyUp(JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& key_event, jint key_code); jboolean DispatchKeyEvent( JNIEnv* env, const base::android::JavaParamRef& obj, const base::android::JavaParamRef& motion_event); void ScrollBy(JNIEnv* env, const base::android::JavaParamRef& jobj, jfloat delta_x, jfloat delta_y); void ScrollTo(JNIEnv* env, const base::android::JavaParamRef& jobj, jfloat x, jfloat y); void DoubleTap(JNIEnv* env, const base::android::JavaParamRef& jobj, jlong time_ms, jint x, jint y); void StartFling(JNIEnv* env, const base::android::JavaParamRef& jobj, jlong time_ms, jfloat velocity_x, jfloat velocity_y, jboolean synthetic_scroll, jboolean prevent_boosting); void CancelFling(JNIEnv* env, const base::android::JavaParamRef& jobj, jlong time_ms, jboolean prevent_boosting); void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); private: friend class ViewAndroid; explicit EventForwarder(ViewAndroid* view); base::android::ScopedJavaLocalRef GetJavaObject(); const raw_ptr view_; base::android::ScopedJavaGlobalRef java_obj_; base::ObserverList observers_; }; } // namespace ui #endif // UI_ANDROID_EVENT_FORWARDER_H_