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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java

Issue 2703473002: [TTS] Extract tapped text before showing UI. (Closed)
Patch Set: Minor update. Created 3 years, 9 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: chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java
index 1ad2a6528e5087d7f6ce242986cf5256414961c9..d184d43d2d850a36f08f92f7e43d8b88512e624a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java
@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.contextualsearch;
+import android.text.TextUtils;
+
import org.chromium.base.annotations.CalledByNative;
/**
@@ -11,33 +13,48 @@ import org.chromium.base.annotations.CalledByNative;
* Includes the selection, selection offsets, surrounding page content, etc.
*/
public class ContextualSearchContext {
- // The initial selection that established this context, or null.
- private final String mSelection;
+ private static final int INVALID_SELECTION_OFFSET = -1;
// Pointer to the native instance of this class.
private long mNativePointer;
+ // The initial word selected by a Tap, or null.
+ private String mSelectedWord;
+
+ // The text that follows the selection (shown in grey in the bar).
+ private String mTextFollowingSelection;
+
+ // A shortened version of the actual text content surrounding the selection, or null if not yet
+ // established.
+ private String mSurroundingText;
+
+ // The original encoding of the base page.
+ private String mEncoding;
+
+ // The start and end offsets of the selection within the text content.
+ private int mSelectionStartOffset = INVALID_SELECTION_OFFSET;
+ private int mSelectionEndOffset = INVALID_SELECTION_OFFSET;
+
+ private long mSelectionStartTimeNanoseconds;
+
/**
* Constructs a context that cannot resolve a search term and has a small amount of
* page content.
*/
ContextualSearchContext() {
mNativePointer = nativeInit();
- mSelection = null;
}
/**
* Constructs a context that can resolve a search term and has a large amount of
* page content.
- * @param selection The current selection.
* @param homeCountry The country where the user usually resides, or an empty string if not
* known.
* @param maySendBasePageUrl Whether policy allows sending the base-page URL to the server.
*/
- ContextualSearchContext(String selection, String homeCountry, boolean maySendBasePageUrl) {
+ ContextualSearchContext(String homeCountry, boolean maySendBasePageUrl) {
mNativePointer = nativeInit();
- mSelection = selection;
- nativeSetResolveProperties(getNativePointer(), selection, homeCountry, maySendBasePageUrl);
+ nativeSetResolveProperties(getNativePointer(), homeCountry, maySendBasePageUrl);
}
/**
@@ -48,15 +65,120 @@ public class ContextualSearchContext {
assert mNativePointer != 0;
nativeDestroy(mNativePointer);
mNativePointer = 0;
+
+ // Also zero out private data that may be sizable.
+ mTextFollowingSelection = null;
+ mSurroundingText = null;
+ }
+
+ /**
+ * @return the initial word selected by a Tap.
+ */
+ String getSelectedWord() {
+ return mSelectedWord;
+ }
+
+ long getSelectionStartTimeNanoseconds() {
+ return mSelectionStartTimeNanoseconds;
+ }
+
+ String getEncoding() {
+ return mEncoding;
+ }
+
+ int getSelectionStartOffset() {
+ return mSelectionStartOffset;
+ }
+
+ int getSelectionEndOffset() {
+ return mSelectionEndOffset;
+ }
+
+ String getSurroundingText() {
+ return mSurroundingText;
}
/**
- * @return the original selection.
+ * @return the text content that follows the selection (one side of the surrounding text)
*/
- String getSelection() {
- return mSelection;
+ String getTextContentFollowingSelection() {
+ return mTextFollowingSelection;
+ }
+
+ // DOCUMENT!!!!!!!!!!!!!!
+ void setTextContentFollowingSelection(String textFollowingSelection) {
+ mTextFollowingSelection = textFollowingSelection;
}
+ void setSelectionAdjust(int startAdjust, int endAdjust) {
+ makeSelectionAdjustments(startAdjust, endAdjust);
+ }
+
+ void setSurroundingText(
+ String encoding, String surroundingText, int startOffset, int endOffset) {
+ mEncoding = encoding;
+ mSurroundingText = surroundingText;
+ mSelectionStartOffset = startOffset;
+ mSelectionEndOffset = endOffset;
+ }
+
+ // Update the context based on the new selection.
+ //
+ //
+ /**
+ * Update the context based on the given selection.
+ * TODO(donnd): This method of finding the adjustment to the selection is unreliable!
+ * TODO(donnd): Replace by getting the selection adjustment directly from a
+ * SelectWordAroundCaretAck, since it knows how the selection was adjusted.
+ * @param selection The new selection.
+ * @param selectionStartTimeNanoseconds The time in nanoseconds when the selection was started.
+ * @return Whether the adjustment could be determined or not.
+ */
+ boolean updateContextFromSelection(String selection, long selectionStartTimeNanoseconds) {
+ // TODO(donnd): consider the case where the user extends the selection, and how to notify
+ // icing correctly!
+ mSelectedWord = selection;
+ mSelectionStartTimeNanoseconds = selectionStartTimeNanoseconds;
+ if (mSelectionStartOffset != INVALID_SELECTION_OFFSET
+ && mSelectionEndOffset != INVALID_SELECTION_OFFSET
+ && !TextUtils.isEmpty(mSurroundingText) && !TextUtils.isEmpty(selection)) {
+ int selectionLength = selection.length();
+ for (int i = 0; i <= selectionLength; i++) {
+ int possibleStart = mSelectionStartOffset - i;
+ int possibleEnd = possibleStart + selectionLength;
+ if (possibleStart < 0 || possibleEnd > mSurroundingText.length()) return false;
+
+ if (selection.equals(mSurroundingText.substring(possibleStart, possibleEnd))) {
+ mSelectionStartOffset = possibleStart;
+ mSelectionEndOffset = possibleEnd;
+ makeSelectionAdjustments(-i, selectionLength - i);
+ return true;
+ }
+ }
+ }
+ System.out.println("ctxs update context failed!!!!!!!");
+ return false;
+ }
+
+ /**
+ * Makes adjustments to the selection offsets.
+ * @param startAdjust
+ * @param endAdjust
+ */
+ private void makeSelectionAdjustments(int startAdjust, int endAdjust) {
+ nativeAdjustSelection(getNativePointer(), startAdjust, endAdjust);
+ if (mTextFollowingSelection != null && endAdjust > 0
+ && endAdjust <= mTextFollowingSelection.length()) {
+ mTextFollowingSelection = mTextFollowingSelection.substring(endAdjust);
+ }
+ // Needed??????????????
+ mSelectionStartOffset += startAdjust;
+ mSelectionEndOffset += endAdjust;
+ }
+
+ // DLD Add a stub for analyze context?
+ // DLD Add a test for this class, or for a separate Analyze Context class?
+
// ============================================================================================
// Native callback support.
// ============================================================================================
@@ -72,6 +194,8 @@ public class ContextualSearchContext {
// ============================================================================================
private native long nativeInit();
private native void nativeDestroy(long nativeContextualSearchContext);
- private native void nativeSetResolveProperties(long nativeContextualSearchContext,
- String selection, String homeCountry, boolean maySendBasePageUrl);
+ private native void nativeSetResolveProperties(
+ long nativeContextualSearchContext, String homeCountry, boolean maySendBasePageUrl);
+ private native void nativeAdjustSelection(
+ long nativeContextualSearchContext, int startAdjust, int endAdjust);
}

Powered by Google App Engine
This is Rietveld 408576698