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

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

Issue 2706333002: [TTS] Add a Java Context linked to existing native (Closed)
Patch Set: Nothing, I think. 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/ContextualSearchManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index 08613739bcf1897b11de063d94c100b1bc9f44f5..5287bd6f7368509fcd9c81d158b806de2de3cd1b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -120,6 +120,9 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
private boolean mWasActivatedByTap;
private boolean mIsInitialized;
+ // The current search context, or null.
+ private ContextualSearchContext mContext;
+
/**
* This boolean is used for loading content after a long-press when content is not immediately
* loaded.
@@ -303,8 +306,9 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
/**
* @return The Base Page's {@link ContentViewCore}.
*/
- @Nullable private ContentViewCore getBaseContentView() {
- return mSelectionController.getBaseContentView();
+ @Nullable
+ private WebContents getBaseWebContents() {
+ return mSelectionController.getBaseWebContents();
}
/**
@@ -326,6 +330,8 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
* @param reason The {@link StateChangeReason} for hiding Contextual Search.
*/
public void hideContextualSearch(StateChangeReason reason) {
+ if (mContext != null) mContext.destroy();
+ mContext = null;
if (mSearchPanel == null) return;
if (mSearchPanel.isShowing()) {
@@ -419,6 +425,7 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
// TODO(pedrosimonetti): Fix for M47. Replace this with a better delayed load approach.
mSearchPanel.destroyContent();
+ String selection = mSelectionController.getSelectedText();
boolean isTap = mSelectionController.getSelectionType() == SelectionType.TAP;
boolean didRequestSurroundings = false;
if (isTap) {
@@ -426,42 +433,42 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
mShouldLoadDelayedSearch = false;
}
if (isTap && mPolicy.shouldPreviousTapResolve()) {
- mNetworkCommunicator.startSearchTermResolutionRequest(
- mSelectionController.getSelectedText());
+ if (mContext != null) mContext.destroy();
+ mContext = new ContextualSearchContext(
+ selection, mPolicy.getHomeCountry(mActivity), mPolicy.maySendBasePageUrl());
+ nativeGatherSurroundingText(
+ mNativeContextualSearchManagerPtr, mContext, getBaseWebContents());
didRequestSurroundings = true;
// Cache the native translate data, so JNI calls won't be made when time-critical.
mTranslateController.cacheNativeTranslateData();
} else {
boolean shouldPrefetch = mPolicy.shouldPrefetchSearchResult();
- mSearchRequest = createContextualSearchRequest(
- mSelectionController.getSelectedText(), null, null, shouldPrefetch);
+ mSearchRequest = createContextualSearchRequest(selection, null, null, shouldPrefetch);
mTranslateController.forceAutoDetectTranslateUnlessDisabled(mSearchRequest);
mDidStartLoadingResolvedSearchRequest = false;
- mSearchPanel.setSearchTerm(mSelectionController.getSelectedText());
+ mSearchPanel.setSearchTerm(selection);
if (shouldPrefetch) loadSearchUrl();
// Record metrics for manual refinement of the search term from long-press.
// TODO(donnd): remove this section once metrics have been analyzed.
- if (mSelectionController.getSelectionType() == SelectionType.LONG_PRESS
- && mSearchPanel.isPeeking()) {
+ if (!isTap && mSearchPanel.isPeeking()) {
boolean isSingleWord =
- !CONTAINS_WHITESPACE_PATTERN
- .matcher(mSelectionController.getSelectedText().trim())
- .find();
+ !CONTAINS_WHITESPACE_PATTERN.matcher(selection.trim()).find();
RecordUserAction.record(isSingleWord ? "ContextualSearch.ManualRefineSingleWord"
: "ContextualSearch.ManualRefineMultiWord");
}
}
- if (!didRequestSurroundings) {
+ if (!didRequestSurroundings && getBaseWebContents() != null) {
// Gather surrounding text for Icing integration, which will make the selection and
// a shorter version of the surroundings available for Conversational Search.
// Although the surroundings are extracted, they will not be sent to the server as
// part of search term resolution, just sent to Icing which keeps them local until
// the user activates a Voice Search.
- nativeGatherSurroundingText(mNativeContextualSearchManagerPtr,
- mSelectionController.getSelectedText(), NO_HOME_COUNTRY,
- getBaseContentView().getWebContents(), mPolicy.maySendBasePageUrl());
+ if (mContext != null) mContext.destroy();
+ mContext = new ContextualSearchContext();
+ nativeGatherSurroundingText(
+ mNativeContextualSearchManagerPtr, mContext, getBaseWebContents());
}
mWereSearchResultsSeen = false;
@@ -492,8 +499,6 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
mSearchPanel.setDidSearchInvolvePromo();
}
- // TODO(donnd): although we are showing the bar here, we have not yet set the text!
- // Refactor to show the bar and set the text at the same time!
// TODO(donnd): If there was a previously ongoing contextual search, we should ensure
// it's registered as closed.
mSearchPanel.requestPanelShow(stateChangeReason);
@@ -504,21 +509,21 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
@Override
public void startSearchTermResolutionRequest(String selection) {
- ContentViewCore baseContentView = getBaseContentView();
- if (baseContentView != null) {
- nativeStartSearchTermResolutionRequest(mNativeContextualSearchManagerPtr, selection,
- mPolicy.getHomeCountry(mActivity), getBaseContentView().getWebContents(),
- mPolicy.maySendBasePageUrl());
+ WebContents baseWebContents = getBaseWebContents();
+ if (baseWebContents != null) {
+ assert mContext != null;
+ nativeStartSearchTermResolutionRequest(
+ mNativeContextualSearchManagerPtr, mContext, getBaseWebContents());
}
}
@Override
@Nullable public URL getBasePageUrl() {
- ContentViewCore baseContentViewCore = getBaseContentView();
- if (baseContentViewCore == null) return null;
+ WebContents baseWebContents = getBaseWebContents();
+ if (baseWebContents == null) return null;
try {
- return new URL(baseContentViewCore.getWebContents().getUrl());
+ return new URL(baseWebContents.getUrl());
} catch (MalformedURLException e) {
return null;
}
@@ -615,10 +620,11 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
*/
@CalledByNative
private void onSurroundingTextAvailable(final String afterText) {
+ String selection = mSelectionController.getSelectedText();
// TODO(donnd): check if panel has been requested to show.
// We used to call mSearchPanel.isShowing() here, but that's unreliable (crbug.com/669600).
- mSearchPanel.setSearchContext(
- mSelectionController.getSelectedText(), afterText);
+ mSearchPanel.setContextDetails(selection, afterText);
+ mNetworkCommunicator.startSearchTermResolutionRequest(selection);
}
/**
@@ -747,8 +753,13 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
mPolicy.logSearchTermResolutionDetails(searchTerm);
}
+ // Adjust the selection unless the user changed it since we initiated the search.
if (selectionStartAdjust != 0 || selectionEndAdjust != 0) {
- mSelectionController.adjustSelection(selectionStartAdjust, selectionEndAdjust);
+ String originalSelection = mContext == null ? null : mContext.getSelection();
+ if (originalSelection != null
+ && originalSelection.equals(mSelectionController.getSelectedText())) {
+ mSelectionController.adjustSelection(selectionStartAdjust, selectionEndAdjust);
+ }
}
}
@@ -1291,16 +1302,21 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
if (mIsAccessibilityModeEnabled) return;
if (isTapSupported()) {
- // Here we are starting a new Contextual Search with a Tap gesture, therefore
- // we need to clear to properly reflect that a search just started and we don't
- // have the resolved search term yet.
+ // Here we are probably starting a new Contextual Search with a Tap gesture (or we'll
+ // ignore the tap), therefore we need to clear to properly reflect that a search just
+ // started and we don't have the resolved search term yet.
mSearchRequest = null;
- // Let the policy know that a tap gesture has been received.
- mPolicy.registerTap();
+ if (mContext != null) mContext.destroy();
+ mContext = null;
+
+ WebContents baseWebContents = getBaseWebContents();
+ if (baseWebContents != null) {
+ // Let the policy know that a tap gesture has been received.
+ mPolicy.registerTap();
- ContentViewCore baseContentView = getBaseContentView();
- if (baseContentView != null) baseContentView.getWebContents().selectWordAroundCaret();
+ baseWebContents.selectWordAroundCaret();
+ }
}
}
@@ -1313,7 +1329,7 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
StateChangeReason stateChangeReason = type == SelectionType.TAP
? StateChangeReason.TEXT_SELECT_TAP : StateChangeReason.TEXT_SELECT_LONG_PRESS;
ContextualSearchUma.logSelectionIsValid(selectionValid);
- if (selectionValid) {
+ if (selectionValid && mSearchPanel != null) {
mSearchPanel.updateBasePageSelectionYPx(y);
if (!mSearchPanel.isShowing()) {
mSearchPanel.getPanelMetrics().onSelectionEstablished(selection);
@@ -1329,7 +1345,7 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
public void handleSelectionDismissal() {
if (mIsAccessibilityModeEnabled) return;
- if (mSearchPanel.isShowing()
+ if (mSearchPanel != null && mSearchPanel.isShowing()
&& !mIsPromotingToTab
// If the selection is dismissed when the Panel is not peeking anymore,
// which means the Panel is at least partially expanded, then it means
@@ -1346,7 +1362,7 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
String selection, boolean selectionValid, float x, float y) {
if (mIsAccessibilityModeEnabled) return;
- if (mSearchPanel.isShowing()) {
+ if (mSearchPanel != null && mSearchPanel.isShowing()) {
if (selectionValid) {
mSearchPanel.setSearchTerm(selection);
} else {
@@ -1359,7 +1375,7 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
public void handleSelectionSuppression(BlacklistReason reason) {
if (mIsAccessibilityModeEnabled) return;
- mSearchPanel.getPanelMetrics().setBlacklistReason(reason);
+ if (mSearchPanel != null) mSearchPanel.getPanelMetrics().setBlacklistReason(reason);
}
// ============================================================================================
@@ -1431,11 +1447,9 @@ public class ContextualSearchManager implements ContextualSearchManagementDelega
private native long nativeInit();
private native void nativeDestroy(long nativeContextualSearchManager);
private native void nativeStartSearchTermResolutionRequest(long nativeContextualSearchManager,
- String selection, String homeCountry, WebContents baseWebContents,
- boolean maySendBasePageUrl);
+ ContextualSearchContext contextualSearchContext, WebContents baseWebContents);
protected native void nativeGatherSurroundingText(long nativeContextualSearchManager,
- String selection, String homeCountry, WebContents baseWebContents,
- boolean maySendBasePageUrl);
+ ContextualSearchContext contextualSearchContext, WebContents baseWebContents);
private native void nativeEnableContextualSearchJsApiForOverlay(
long nativeContextualSearchManager, WebContents overlayWebContents);
// Don't call these directly, instead call the private methods that cache the results.

Powered by Google App Engine
This is Rietveld 408576698