diff options
author | Theresa Wellington <twellington@google.com> | 2015-09-04 09:01:06 -0700 |
---|---|---|
committer | Theresa Wellington <twellington@google.com> | 2015-09-04 16:02:21 +0000 |
commit | aee74f00a891a1156e93588e2232adc45cf72cc5 (patch) | |
tree | c22c2c3cfa796216ac74dadd9f38ca0aeec0799e | |
parent | ea4472b177d1cfdea2eebf8d05002df468ac56e2 (diff) | |
download | chromium_src-aee74f00a891a1156e93588e2232adc45cf72cc5.zip chromium_src-aee74f00a891a1156e93588e2232adc45cf72cc5.tar.gz chromium_src-aee74f00a891a1156e93588e2232adc45cf72cc5.tar.bz2 |
[Contextual Search] Dismiss the panel when find in page is opened
When the find in page toolbar is opened, the contextual search panel
is dismissed. Conversely, when the contextual search panel is opened,
the find in page toolbar is dismissed.
BUG=517441
TBR=dfalcantara@chromium.org
Review URL: https://codereview.chromium.org/1328473002
Cr-Commit-Position: refs/heads/master@{#346970}
Review URL: https://codereview.chromium.org/1329893002 .
Cr-Commit-Position: refs/branch-heads/2490@{#164}
Cr-Branched-From: 7790a3535f2a81a03685eca31a32cf69ae0c114f-refs/heads/master@{#344925}
11 files changed, 87 insertions, 16 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 97a5a03..b11d417 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java @@ -425,6 +425,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(), getToolbarManager() .getActionModeController().getActionModeCallback()); + if (getContextualSearchManager() != null) { + getContextualSearchManager().setFindToolbarManager(mFindToolbarManager); + } OnClickListener tabSwitcherClickHandler = new OnClickListener() { @Override 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 26bbaf0..da705d5 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 @@ -41,6 +41,8 @@ import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; import org.chromium.chrome.browser.tabmodel.TabModelObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; +import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; +import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver; import org.chromium.components.navigation_interception.InterceptNavigationDelegate; import org.chromium.components.navigation_interception.NavigationParams; import org.chromium.components.web_contents_delegate_android.WebContentsDelegateAndroid; @@ -101,6 +103,8 @@ public class ContextualSearchManager extends ContextualSearchObservable private final ContextualSearchTabPromotionDelegate mTabPromotionDelegate; private TabModelSelectorTabObserver mTabModelSelectorTabObserver; private TabModelObserver mTabModelObserver; + private FindToolbarManager mFindToolbarManager; + private FindToolbarObserver mFindToolbarObserver; private boolean mIsSearchContentViewShowing; private boolean mDidLoadResolvedSearchRequest; private long mLoadedSearchUrlTimeMs; @@ -253,6 +257,30 @@ public class ContextualSearchManager extends ContextualSearchObservable } /** + * Sets the {@link FindToolbarManager} and attaches an observer that dismisses the Contextual + * Search panel when the find toolbar is shown. + * + * @param findToolbarManager The {@link FindToolbarManager} for the current activity. + */ + public void setFindToolbarManager(FindToolbarManager findToolbarManager) { + if (mFindToolbarManager != null) { + mFindToolbarManager.removeObserver(mFindToolbarObserver); + } + + mFindToolbarManager = findToolbarManager; + + if (mFindToolbarObserver == null) { + mFindToolbarObserver = new FindToolbarObserver() { + @Override + public void onFindToolbarShown() { + hideContextualSearch(StateChangeReason.UNKNOWN); + } + }; + } + mFindToolbarManager.addObserver(mFindToolbarObserver); + } + + /** * Destroys the native Contextual Search Manager. * Call this method before orphaning this object to allow it to be garbage collected. */ @@ -265,6 +293,11 @@ public class ContextualSearchManager extends ContextualSearchObservable stopListeningForHideNotifications(); mTabRedirectHandler.clear(); ApplicationStatus.unregisterActivityStateListener(this); + if (mFindToolbarManager != null) { + mFindToolbarManager.removeObserver(mFindToolbarObserver); + mFindToolbarManager = null; + mFindToolbarObserver = null; + } } @Override @@ -442,6 +475,10 @@ public class ContextualSearchManager extends ContextualSearchObservable * @param stateChangeReason The reason explaining the change of state. */ private void showContextualSearch(StateChangeReason stateChangeReason) { + if (mFindToolbarManager != null) { + mFindToolbarManager.hideToolbar(false); + } + if (!mSearchPanelDelegate.isShowing()) { // If visible, hide the infobar container before showing the Contextual Search panel. InfoBarContainer container = getInfoBarContainer(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index 768c2c5..1ed0d50 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java @@ -185,6 +185,9 @@ public class CustomTabActivity extends ChromeActivity { (ViewGroup) findViewById(android.R.id.content), controlContainer); mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(), getToolbarManager().getActionModeController().getActionModeCallback()); + if (getContextualSearchManager() != null) { + getContextualSearchManager().setFindToolbarManager(mFindToolbarManager); + } getToolbarManager().initializeWithNative(getTabModelSelector(), getFullscreenManager(), mFindToolbarManager, null, layoutDriver, null, null, null, new OnClickListener() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java index ed444f4..372391c0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java @@ -519,6 +519,10 @@ public class DocumentActivity extends ChromeActivity { getToolbarManager().getActionModeController() .getActionModeCallback()); + if (getContextualSearchManager() != null) { + getContextualSearchManager().setFindToolbarManager(mFindToolbarManager); + } + getToolbarManager().initializeWithNative(getTabModelSelector(), getFullscreenManager(), mFindToolbarManager, null, layoutDriver, null, null, null, null); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindInPageBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindInPageBridge.java index 0b4e2f3..b0ddf33 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindInPageBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindInPageBridge.java @@ -46,10 +46,13 @@ public class FindInPageBridge { nativeActivateFindInPageResultForAccessibility(mNativeFindInPageBridge); } - /** Stops the current find operation. */ - public void stopFinding() { + /** + * Stops the current find operation. + * @param clearSelection Whether the selection on the page should be cleared. + * */ + public void stopFinding(boolean clearSelection) { assert mNativeFindInPageBridge != 0; - nativeStopFinding(mNativeFindInPageBridge); + nativeStopFinding(mNativeFindInPageBridge, clearSelection); } /** Returns the most recent find text before the current one. */ @@ -80,7 +83,7 @@ public class FindInPageBridge { private native void nativeStartFinding(long nativeFindInPageBridge, String searchString, boolean forwardDirection, boolean caseSensitive); - private native void nativeStopFinding(long nativeFindInPageBridge); + private native void nativeStopFinding(long nativeFindInPageBridge, boolean clearSelection); private native String nativeGetPreviousFindText(long nativeFindInPageBridge); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java index bbe6b69..376c75a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java @@ -201,7 +201,7 @@ public class FindToolbar extends LinearLayout mFindInPageBridge.startFinding(s.toString(), true, false); } else { clearResults(); - mFindInPageBridge.stopFinding(); + mFindInPageBridge.stopFinding(true); } if (!mCurrentTab.isIncognito()) { @@ -500,8 +500,18 @@ public class FindToolbar extends LinearLayout if (mObserver != null) mObserver.onFindToolbarShown(); } - /** Call this just before closing the find toolbar. */ + /** + * Call this just before closing the find toolbar. The selection on the page will be cleared. + */ public void deactivate() { + deactivate(true); + } + + /** + * Call this just before closing the find toolbar. + * @param clearSelection Whether the selection on the page should be cleared. + */ + public void deactivate(boolean clearSelection) { if (!mActive) return; if (mObserver != null) mObserver.onFindToolbarHidden(); @@ -520,7 +530,7 @@ public class FindToolbar extends LinearLayout UiUtils.hideKeyboard(mFindQuery); if (mFindQuery.getText().length() > 0) { clearResults(); - mFindInPageBridge.stopFinding(); + mFindInPageBridge.stopFinding(clearSelection); } mFindInPageBridge.destroy(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java index c9a4556..946c446 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java @@ -47,12 +47,20 @@ public class FindToolbarManager { } /** - * Hides the toolbar. + * Hides the toolbar and clears the selection on the screen. */ public void hideToolbar() { + hideToolbar(true); + } + + /** + * Hides the toolbar. + * @param clearSelection Whether the selection on the page should be cleared. + */ + public void hideToolbar(boolean clearSelection) { if (mFindToolbar == null) return; - mFindToolbar.deactivate(); + mFindToolbar.deactivate(clearSelection); } /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarPhone.java index 57d7ef0..8acbd58 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarPhone.java @@ -33,8 +33,8 @@ public class FindToolbarPhone extends FindToolbar { } @Override - public void deactivate() { - super.deactivate(); + public void deactivate(boolean clearSelection) { + super.deactivate(clearSelection); setVisibility(View.GONE); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java index 243806e0..bd42e21 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java @@ -98,8 +98,8 @@ public class FindToolbarTablet extends FindToolbar { } @Override - public void deactivate() { - super.deactivate(); + public void deactivate(boolean clearSelection) { + super.deactivate(clearSelection); if (mCurrentAnimation == mAnimationLeave) return; diff --git a/chrome/browser/android/find_in_page/find_in_page_bridge.cc b/chrome/browser/android/find_in_page/find_in_page_bridge.cc index 30a2357..10d6422 100644 --- a/chrome/browser/android/find_in_page/find_in_page_bridge.cc +++ b/chrome/browser/android/find_in_page/find_in_page_bridge.cc @@ -34,9 +34,12 @@ void FindInPageBridge::StartFinding(JNIEnv* env, case_sensitive); } -void FindInPageBridge::StopFinding(JNIEnv* env, jobject obj) { +void FindInPageBridge::StopFinding(JNIEnv* env, + jobject obj, + jboolean clearSelection) { FindTabHelper::FromWebContents(web_contents_)-> - StopFinding(FindBarController::kClearSelectionOnPage); + StopFinding(clearSelection ? FindBarController::kClearSelectionOnPage + : FindBarController::kKeepSelectionOnPage); } ScopedJavaLocalRef<jstring> FindInPageBridge::GetPreviousFindText(JNIEnv* env, diff --git a/chrome/browser/android/find_in_page/find_in_page_bridge.h b/chrome/browser/android/find_in_page/find_in_page_bridge.h index bedf149..d822a3a 100644 --- a/chrome/browser/android/find_in_page/find_in_page_bridge.h +++ b/chrome/browser/android/find_in_page/find_in_page_bridge.h @@ -21,7 +21,7 @@ class FindInPageBridge { jboolean forward_direction, jboolean case_sensitive); - void StopFinding(JNIEnv* env, jobject obj); + void StopFinding(JNIEnv* env, jobject obj, jboolean clearSelection); base::android::ScopedJavaLocalRef<jstring> GetPreviousFindText(JNIEnv* env, jobject obj); |