Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2488)

Unified Diff: blimp/client/android/blimp_view.cc

Issue 1430623004: blimp: Add support for input handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: blimp/client/android/blimp_view.cc
diff --git a/blimp/client/android/blimp_view.cc b/blimp/client/android/blimp_view.cc
index de27258a9817a49cfbc6079cfd254909538a0c66..8c97dd9dd41648b28103ccd6271353bf443f8dd4 100644
--- a/blimp/client/android/blimp_view.cc
+++ b/blimp/client/android/blimp_view.cc
@@ -6,7 +6,11 @@
#include "blimp/client/compositor/blimp_compositor_android.h"
#include "jni/BlimpView_jni.h"
+#include "ui/events/android/motion_event_android.h"
+#include "ui/events/blink/blink_event_util.h"
+#include "ui/events/gesture_detection/gesture_provider_config_helper.h"
#include "ui/gfx/geometry/size.h"
+#include "third_party/WebKit/public/web/WebInputEvent.h"
namespace blimp {
@@ -33,7 +37,12 @@ BlimpView::BlimpView(JNIEnv* env,
const gfx::Size& real_size,
const gfx::Size& size,
float dp_to_px)
- : compositor_(BlimpCompositorAndroid::Create(real_size, size, dp_to_px)),
+ : device_scale_factor_(dp_to_px),
+ compositor_(BlimpCompositorAndroid::Create(real_size, size, dp_to_px)),
+ // TODO(khushalsagar): Verify if any default configurations need to be
+ // changed.
+ gesture_provider_(ui::GetGestureProviderConfig(
+ ui::GestureProviderConfigType::CURRENT_PLATFORM), this),
current_surface_format_(0) {
java_obj_.Reset(env, jobj);
}
@@ -73,4 +82,93 @@ void BlimpView::SetVisibility(JNIEnv* env, jobject jobj, jboolean visible) {
compositor_->SetVisible(visible);
}
+jboolean BlimpView::OnTouchEvent(JNIEnv* env,
+ jobject obj,
+ jobject motion_event,
+ jlong time_ms,
+ 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 raw_pos_x,
+ jfloat raw_pos_y,
+ jint android_tool_type_0,
+ jint android_tool_type_1,
+ jint android_button_state,
+ jint android_meta_state) {
+
+ ui::MotionEventAndroid::Pointer pointer0(pointer_id_0,
+ pos_x_0,
David Trainor- moved to gerrit 2015/11/02 16:55:30 fix indentation. Same for all other MotionEventAn
Khushal 2015/12/01 08:22:25 Done.
+ pos_y_0,
+ touch_major_0,
+ touch_minor_0,
+ orientation_0,
+ android_tool_type_0);
+ ui::MotionEventAndroid::Pointer pointer1(pointer_id_1,
+ pos_x_1,
+ pos_y_1,
+ touch_major_1,
+ touch_minor_1,
+ orientation_1,
+ android_tool_type_1);
+ ui::MotionEventAndroid event(1.f / device_scale_factor_,
+ env,
+ motion_event,
+ time_ms,
+ android_action,
+ pointer_count,
+ history_size,
+ action_index,
+ android_button_state,
+ android_meta_state,
+ raw_pos_x - pos_x_0,
+ raw_pos_y - pos_y_0,
+ pointer0,
+ pointer1);
+
+ ui::FilteredGestureProvider::TouchHandlingResult result =
+ gesture_provider_.OnTouchEvent(event);
+ if (!result.succeeded)
David Trainor- moved to gerrit 2015/11/02 16:55:30 indentation
Khushal 2015/12/01 08:22:25 Moved to BlimpInputManager.
+ return false;
+
+ blink::WebTouchEvent web_event =
+ ui::CreateWebTouchEventFromMotionEvent(event, result.did_generate_scroll);
+
+ // Touch events are queued in the Gesture Provider until acknowledged to
+ // allow them to be consumed by the touch event handlers in blink which can
+ // prevent-default on the event. Since we currently do not support touch
+ // handlers the event is always acknowledged as not consumed.
+ // TODO(khushalsagar): Add support for touch events to blink.
David Trainor- moved to gerrit 2015/11/02 16:55:30 s/blink/blimp?
Khushal 2015/12/01 08:22:25 Moved to BlimpInputManager.
+ gesture_provider_.OnTouchEventAck(web_event.uniqueTouchEventId, false);
+
+ return true;
+}
+
+void BlimpView::OnGestureEvent(const ui::GestureEventData& gesture) {
+ blink::WebGestureEvent web_gesture =
+ ui::CreateWebGestureEventFromGestureEventData(gesture);
+ // TODO(jdduke): Remove this workaround after Android fixes UiAutomator to
+ // stop providing shift meta values to synthetic MotionEvents. This prevents
+ // unintended shift+click interpretation of all accessibility clicks.
+ // See crbug.com/443247.
+ if (web_gesture.type == blink::WebInputEvent::GestureTap &&
+ web_gesture.modifiers == blink::WebInputEvent::ShiftKey) {
+ web_gesture.modifiers = 0;
+ }
+
+ // TODO(khushalsagar): Use the GestureEventQueue.
David Trainor- moved to gerrit 2015/11/02 16:55:30 TODO: Push the event to the compositor?
Khushal 2015/12/01 08:22:25 Done. Moved to BlimpInputManager.
+}
+
} // namespace blimp

Powered by Google App Engine
This is Rietveld 408576698