Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_android.cc |
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
| index f4217357c753379b26a0ac67d7a27ff0d0c22425..df07b0fac7f5806e94319f57b22929753ae9fbbe 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
| @@ -61,6 +61,7 @@ |
| #include "third_party/skia/include/core/SkCanvas.h" |
| #include "ui/base/android/window_android.h" |
| #include "ui/base/android/window_android_compositor.h" |
| +#include "ui/events/event_constants.h" |
| #include "ui/events/gesture_detection/gesture_config_helper.h" |
| #include "ui/events/gesture_detection/motion_event.h" |
| #include "ui/gfx/android/device_display_info.h" |
| @@ -194,7 +195,8 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| widget_host->GetRoutingID()) != NULL), |
| frame_evictor_(new DelegatedFrameEvictor(this)), |
| locks_on_frame_count_(0), |
| - observing_root_window_(false) { |
| + observing_root_window_(false), |
| + gesture_text_selection_triggered_(false) { |
| host_->SetView(this); |
| SetContentViewCore(content_view_core); |
| ImageTransportFactoryAndroid::AddObserver(this); |
| @@ -553,6 +555,23 @@ void RenderWidgetHostViewAndroid::OnSmartClipDataExtracted( |
| content_view_core_->OnSmartClipDataExtracted(result); |
| } |
| +bool RenderWidgetHostViewAndroid::ShouldTriggerOrUntriggerTextSelection( |
| + const ui::MotionEvent& event) { |
| + // Currently we aren't supporting stylus + touch case. |
| + if (event.GetPointerCount() == 0 || |
|
jdduke (slow)
2014/06/23 15:09:59
Nit: GetPointerCount() should never be 0, so I wou
Changwan Ryu
2014/06/24 09:29:48
Done.
|
| + event.GetToolType(0) != ui::MotionEvent::TOOL_TYPE_STYLUS) |
| + return false; |
| + const bool is_button_pressed = |
|
jdduke (slow)
2014/06/23 15:09:59
Maybe rename to |is_secondary_button_pressed|?
Changwan Ryu
2014/06/24 09:29:48
Done.
|
| + (event.GetButtonState() & ui::MotionEvent::BUTTON_SECONDARY) != 0; |
| + const bool is_action_up = event.GetAction() == ui::MotionEvent::ACTION_UP; |
|
jdduke (slow)
2014/06/23 15:09:59
Hmm, this is a little confusing, why do we check f
Changwan Ryu
2014/06/24 09:29:48
Done.
|
| + return (is_button_pressed && !is_action_up) || |
| + (!is_button_pressed && gesture_text_selection_triggered_ && is_action_up); |
| +} |
| + |
| +bool RenderWidgetHostViewAndroid::IsGestureTextSelectionTriggered() const { |
| + return gesture_text_selection_triggered_; |
| +} |
| + |
| bool RenderWidgetHostViewAndroid::OnTouchEvent( |
| const ui::MotionEvent& event) { |
| if (!host_) |
| @@ -561,6 +580,20 @@ bool RenderWidgetHostViewAndroid::OnTouchEvent( |
| if (!gesture_provider_.OnTouchEvent(event)) |
| return false; |
| + if (event.GetAction() == ui::MotionEvent::ACTION_DOWN) { |
| + gesture_text_selection_triggered_ = |
| + ShouldTriggerOrUntriggerTextSelection(event); |
| + } |
| + |
| + if (gesture_text_selection_triggered_) { |
| + const bool event_consumed = false; |
| + gesture_provider_.OnTouchEventAck(event_consumed); |
| + if (event.GetAction() == ui::MotionEvent::ACTION_UP || |
|
jdduke (slow)
2014/06/23 15:09:59
As I said, we can't reset the state using ACTION_U
Changwan Ryu
2014/06/24 09:29:48
Removed.
|
| + event.GetAction() == ui::MotionEvent::ACTION_CANCEL) |
| + gesture_text_selection_triggered_ = false; |
| + return true; |
| + } |
| + |
| // Short-circuit touch forwarding if no touch handlers exist. |
| if (!host_->ShouldForwardTouchEvent()) { |
| const bool event_consumed = false; |
| @@ -1290,6 +1323,14 @@ void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
| void RenderWidgetHostViewAndroid::OnGestureEvent( |
| const ui::GestureEventData& gesture) { |
| + if (gesture_text_selection_triggered_) { |
| + if (gesture.type() == ui::ET_GESTURE_LONG_PRESS) { |
| + // Exits the text selection mode until ACTION_DOWN resets it. |
| + gesture_text_selection_triggered_ = false; |
|
jdduke (slow)
2014/06/23 15:09:59
Hmm, I don't think we want to reset this here. Can
Changwan Ryu
2014/06/24 09:29:48
Fixed to call SelectWord instead.
But reset is sti
|
| + } else { |
| + return; |
|
jdduke (slow)
2014/06/23 15:09:59
I thought Samsung wanted to be able to highlight a
Changwan Ryu
2014/06/24 09:29:48
Samsung confirmed that it's only for LONG PRESS.
|
| + } |
| + } |
| SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); |
| } |