summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheresa Wellington <twellington@google.com>2015-09-04 09:01:06 -0700
committerTheresa Wellington <twellington@google.com>2015-09-04 16:02:21 +0000
commitaee74f00a891a1156e93588e2232adc45cf72cc5 (patch)
treec22c2c3cfa796216ac74dadd9f38ca0aeec0799e
parentea4472b177d1cfdea2eebf8d05002df468ac56e2 (diff)
downloadchromium_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}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java3
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java37
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java3
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java4
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindInPageBridge.java11
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java16
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java12
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarPhone.java4
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java4
-rw-r--r--chrome/browser/android/find_in_page/find_in_page_bridge.cc7
-rw-r--r--chrome/browser/android/find_in_page/find_in_page_bridge.h2
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);