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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 342633003: [Android] Select text when stylus first button is pressed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 6 years, 6 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: 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));
}

Powered by Google App Engine
This is Rietveld 408576698