OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.contextualsearch; | 5 package org.chromium.chrome.browser.contextualsearch; |
6 | 6 |
7 import android.os.Handler; | 7 import android.os.Handler; |
| 8 import android.text.TextUtils; |
8 | 9 |
9 import org.chromium.base.VisibleForTesting; | 10 import org.chromium.base.VisibleForTesting; |
10 import org.chromium.chrome.browser.ChromeActivity; | 11 import org.chromium.chrome.browser.ChromeActivity; |
11 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; | 12 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; |
12 import org.chromium.chrome.browser.contextualsearch.ContextualSearchBlacklist.Bl
acklistReason; | 13 import org.chromium.chrome.browser.contextualsearch.ContextualSearchBlacklist.Bl
acklistReason; |
13 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 14 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
14 import org.chromium.chrome.browser.tab.Tab; | 15 import org.chromium.chrome.browser.tab.Tab; |
15 import org.chromium.content.browser.ContentViewCore; | 16 import org.chromium.content.browser.ContentViewCore; |
16 import org.chromium.content_public.browser.GestureStateListener; | 17 import org.chromium.content_public.browser.GestureStateListener; |
17 import org.chromium.ui.touch_selection.SelectionEventType; | 18 import org.chromium.ui.touch_selection.SelectionEventType; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 private final float mPxToDp; | 63 private final float mPxToDp; |
63 private final Pattern mContainsWordPattern; | 64 private final Pattern mContainsWordPattern; |
64 | 65 |
65 private String mSelectedText; | 66 private String mSelectedText; |
66 private SelectionType mSelectionType; | 67 private SelectionType mSelectionType; |
67 private boolean mWasTapGestureDetected; | 68 private boolean mWasTapGestureDetected; |
68 // Reflects whether the last tap was valid and whether we still have a tap-b
ased selection. | 69 // Reflects whether the last tap was valid and whether we still have a tap-b
ased selection. |
69 private ContextualSearchTapState mLastTapState; | 70 private ContextualSearchTapState mLastTapState; |
70 private TapSuppressionHeuristics mTapHeuristics; | 71 private TapSuppressionHeuristics mTapHeuristics; |
71 private boolean mIsWaitingForInvalidTapDetection; | 72 private boolean mIsWaitingForInvalidTapDetection; |
72 private boolean mIsSelectionEstablished; | |
73 private boolean mShouldHandleSelectionModification; | 73 private boolean mShouldHandleSelectionModification; |
74 private boolean mDidExpandSelection; | 74 private boolean mDidExpandSelection; |
75 | 75 |
76 // Position of the selection. | 76 // Position of the selection. |
77 private float mX; | 77 private float mX; |
78 private float mY; | 78 private float mY; |
79 | 79 |
80 // The time of the most last scroll activity, or 0 if none. | 80 // The time of the most last scroll activity, or 0 if none. |
81 private long mLastScrollTimeNs; | 81 private long mLastScrollTimeNs; |
82 | 82 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 unscheduleInvalidTapNotification(); | 289 unscheduleInvalidTapNotification(); |
290 } | 290 } |
291 break; | 291 break; |
292 case SelectionEventType.SELECTION_HANDLES_CLEARED: | 292 case SelectionEventType.SELECTION_HANDLES_CLEARED: |
293 mHandler.handleSelectionDismissal(); | 293 mHandler.handleSelectionDismissal(); |
294 resetAllStates(); | 294 resetAllStates(); |
295 break; | 295 break; |
296 case SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED: | 296 case SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED: |
297 shouldHandleSelection = mShouldHandleSelectionModification; | 297 shouldHandleSelection = mShouldHandleSelectionModification; |
298 break; | 298 break; |
299 case SelectionEventType.SELECTION_ESTABLISHED: | |
300 mIsSelectionEstablished = true; | |
301 break; | |
302 case SelectionEventType.SELECTION_DISSOLVED: | |
303 mIsSelectionEstablished = false; | |
304 break; | |
305 default: | 299 default: |
306 } | 300 } |
307 | 301 |
308 if (shouldHandleSelection) { | 302 if (shouldHandleSelection) { |
309 ContentViewCore baseContentView = getBaseContentView(); | 303 ContentViewCore baseContentView = getBaseContentView(); |
310 if (baseContentView != null) { | 304 if (baseContentView != null) { |
311 String selection = baseContentView.getSelectedText(); | 305 String selection = baseContentView.getSelectedText(); |
312 if (selection != null) { | 306 if (selection != null) { |
313 mX = posXPix; | 307 mX = posXPix; |
314 mY = posYPix; | 308 mY = posYPix; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 | 500 |
507 /** | 501 /** |
508 * @return whether a tap gesture has been detected, for testing. | 502 * @return whether a tap gesture has been detected, for testing. |
509 */ | 503 */ |
510 @VisibleForTesting | 504 @VisibleForTesting |
511 boolean wasAnyTapGestureDetected() { | 505 boolean wasAnyTapGestureDetected() { |
512 return mIsWaitingForInvalidTapDetection; | 506 return mIsWaitingForInvalidTapDetection; |
513 } | 507 } |
514 | 508 |
515 /** | 509 /** |
516 * @return whether the selection has been established, for testing. | 510 * @return whether selection is empty, for testing. |
517 */ | 511 */ |
518 @VisibleForTesting | 512 @VisibleForTesting |
519 boolean isSelectionEstablished() { | 513 boolean isSelectionEmpty() { |
520 return mIsSelectionEstablished; | 514 return TextUtils.isEmpty(mSelectedText); |
521 } | 515 } |
522 | 516 |
523 /** | 517 /** |
524 * Evaluates whether the given selection is valid and notifies the handler a
bout potential | 518 * Evaluates whether the given selection is valid and notifies the handler a
bout potential |
525 * selection suppression. | 519 * selection suppression. |
526 * TODO(pedrosimonetti): substitute this once the system supports suppressin
g selections. | 520 * TODO(pedrosimonetti): substitute this once the system supports suppressin
g selections. |
527 * @param selection The given selection. | 521 * @param selection The given selection. |
528 * @return Whether the selection is valid. | 522 * @return Whether the selection is valid. |
529 */ | 523 */ |
530 private boolean validateSelectionSuppression(String selection) { | 524 private boolean validateSelectionSuppression(String selection) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 // Starts are inclusive and ends are non-inclusive for both GSAContext &
matcher. | 594 // Starts are inclusive and ends are non-inclusive for both GSAContext &
matcher. |
601 while (matcher.find()) { | 595 while (matcher.find()) { |
602 if (startOffset >= matcher.start() && endOffset <= matcher.end()) { | 596 if (startOffset >= matcher.start() && endOffset <= matcher.end()) { |
603 return true; | 597 return true; |
604 } | 598 } |
605 } | 599 } |
606 | 600 |
607 return false; | 601 return false; |
608 } | 602 } |
609 } | 603 } |
OLD | NEW |