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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ContextSelectionClient.java

Issue 2863573004: Explicitly tell Smart Select whether or not to suggest (Closed)
Patch Set: Make cancel requests explicit Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.support.annotation.IntDef; 7 import android.support.annotation.IntDef;
8 import android.text.TextUtils; 8 import android.text.TextUtils;
9 9
10 import org.chromium.base.annotations.CalledByNative; 10 import org.chromium.base.annotations.CalledByNative;
11 import org.chromium.base.annotations.JNINamespace; 11 import org.chromium.base.annotations.JNINamespace;
12 import org.chromium.content_public.browser.WebContents; 12 import org.chromium.content_public.browser.WebContents;
13 import org.chromium.ui.base.WindowAndroid; 13 import org.chromium.ui.base.WindowAndroid;
14 import org.chromium.ui.touch_selection.SelectionEventType;
15 14
16 import java.lang.annotation.Retention; 15 import java.lang.annotation.Retention;
17 import java.lang.annotation.RetentionPolicy; 16 import java.lang.annotation.RetentionPolicy;
18 17
19 /** 18 /**
20 * A class that controls the classification of the textual selection. 19 * A class that controls the classification of the textual selection.
21 * It requests the selection together with its surrounding text from the focused frame and sends it 20 * It requests the selection together with its surrounding text from the focused frame and sends it
22 * to ContextSelectionProvider which does the classification itself. 21 * to ContextSelectionProvider which does the classification itself.
23 */ 22 */
24 @JNINamespace("content") 23 @JNINamespace("content")
25 public class ContextSelectionClient implements SelectionClient { 24 public class ContextSelectionClient implements SelectionClient {
boliu 2017/05/05 02:11:50 TODO for tima, please rename this to smart selecti
Tima Vaisburd 2017/05/05 16:54:41 Acknowledged :)
26 @IntDef({CLASSIFY, SUGGEST_AND_CLASSIFY}) 25 @IntDef({CLASSIFY, SUGGEST_AND_CLASSIFY})
27 @Retention(RetentionPolicy.SOURCE) 26 @Retention(RetentionPolicy.SOURCE)
28 private @interface RequestType {} 27 private @interface RequestType {}
29 28
30 // Request to obtain the type (e.g. phone number, e-mail address) and the mo st 29 // Request to obtain the type (e.g. phone number, e-mail address) and the mo st
31 // appropriate operation for the selected text. 30 // appropriate operation for the selected text.
32 private static final int CLASSIFY = 0; 31 private static final int CLASSIFY = 0;
33 32
34 // Request to obtain the type (e.g. phone number, e-mail address), the most 33 // Request to obtain the type (e.g. phone number, e-mail address), the most
35 // appropriate operation for the selected text and a better selection bounda ries. 34 // appropriate operation for the selected text and a better selection bounda ries.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 assert nativeContextSelectionClient == mNativeContextSelectionClient; 69 assert nativeContextSelectionClient == mNativeContextSelectionClient;
71 mNativeContextSelectionClient = 0; 70 mNativeContextSelectionClient = 0;
72 mProvider.cancelAllRequests(); 71 mProvider.cancelAllRequests();
73 } 72 }
74 73
75 // SelectionClient implementation 74 // SelectionClient implementation
76 @Override 75 @Override
77 public void onSelectionChanged(String selection) {} 76 public void onSelectionChanged(String selection) {}
78 77
79 @Override 78 @Override
80 public void onSelectionEvent(int eventType, float posXPix, float posYPix) { 79 public void onSelectionEvent(int eventType, float posXPix, float posYPix) {}
81 switch (eventType) {
82 case SelectionEventType.SELECTION_HANDLES_SHOWN:
83 // This event is sent when the long press is detected which caus es
84 // selection to appear for the first time. Temporarily hiding th e
85 // handles that happens e.g. during scroll does not affect this event.
86 requestSurroundingText(SUGGEST_AND_CLASSIFY);
87 break;
88
89 case SelectionEventType.SELECTION_HANDLES_CLEARED:
90 // The ActionMode should be stopped when this event comes.
91 cancelAllRequests();
92 break;
93
94 case SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED:
95 // This event is sent after a user stopped dragging one of the
96 // selection handles, i.e. stopped modifying the selection.
97 requestSurroundingText(CLASSIFY);
98 break;
99
100 default:
101 break; // ignore
102 }
103 }
104 80
105 @Override 81 @Override
106 public void showUnhandledTapUIIfNeeded(int x, int y) {} 82 public void showUnhandledTapUIIfNeeded(int x, int y) {}
107 83
108 @Override 84 @Override
109 public boolean sendsSelectionPopupUpdates() { 85 public boolean requestSelectionPopupUpdates(boolean shouldSuggest) {
86 requestSurroundingText(shouldSuggest ? SUGGEST_AND_CLASSIFY : CLASSIFY);
110 return true; 87 return true;
111 } 88 }
112 89
113 private void cancelAllRequests() { 90 @Override
91 public void cancelAllRequests() {
114 if (mNativeContextSelectionClient != 0) { 92 if (mNativeContextSelectionClient != 0) {
115 nativeCancelAllRequests(mNativeContextSelectionClient); 93 nativeCancelAllRequests(mNativeContextSelectionClient);
116 } 94 }
117 95
118 mProvider.cancelAllRequests(); 96 mProvider.cancelAllRequests();
119 } 97 }
120 98
121 private void requestSurroundingText(@RequestType int callbackData) { 99 private void requestSurroundingText(@RequestType int callbackData) {
122 if (mNativeContextSelectionClient == 0) { 100 if (mNativeContextSelectionClient == 0) {
123 onSurroundingTextReceived(callbackData, "", 0, 0); 101 onSurroundingTextReceived(callbackData, "", 0, 0);
(...skipping 24 matching lines...) Expand all
148 assert false : "Unexpected callback data"; 126 assert false : "Unexpected callback data";
149 break; 127 break;
150 } 128 }
151 } 129 }
152 130
153 private native long nativeInit(WebContents webContents); 131 private native long nativeInit(WebContents webContents);
154 private native void nativeRequestSurroundingText( 132 private native void nativeRequestSurroundingText(
155 long nativeContextSelectionClient, int numExtraCharacters, int callb ackData); 133 long nativeContextSelectionClient, int numExtraCharacters, int callb ackData);
156 private native void nativeCancelAllRequests(long nativeContextSelectionClien t); 134 private native void nativeCancelAllRequests(long nativeContextSelectionClien t);
157 } 135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698