Index: chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java |
index 9dc8a9860b4073bb498982825d4de174ba3cdef4..ad12e21d13c770772f88b39b1a03ee6809873240 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java |
@@ -23,6 +23,7 @@ import android.text.style.ReplacementSpan; |
import android.util.AttributeSet; |
import android.util.Pair; |
import android.view.GestureDetector; |
+import android.view.KeyEvent; |
import android.view.MotionEvent; |
import android.view.View; |
import android.view.accessibility.AccessibilityEvent; |
@@ -39,6 +40,7 @@ import org.chromium.base.Log; |
import org.chromium.base.SysUtils; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.WindowDelegate; |
import org.chromium.chrome.browser.metrics.StartupMetrics; |
import org.chromium.chrome.browser.omnibox.LocationBarLayout.OmniboxLivenessListener; |
import org.chromium.chrome.browser.tab.Tab; |
@@ -90,6 +92,9 @@ public class UrlBar extends VerticallyFixedEditText { |
* because the URL bar has custom touch event handling. See: {@link #onTouchEvent}. |
*/ |
private final GestureDetector mGestureDetector; |
+ |
+ private final KeyboardHideHelper mKeyboardHideHelper; |
+ |
private boolean mFocused; |
private boolean mAllowFocus = true; |
@@ -171,6 +176,11 @@ public class UrlBar extends VerticallyFixedEditText { |
* @return Whether the light security theme should be used. |
*/ |
boolean shouldEmphasizeHttpsScheme(); |
+ |
+ /** |
+ * Called to notify that back key has been pressed while the URL bar has focus. |
+ */ |
+ void backKeyPressed(); |
} |
public UrlBar(Context context, AttributeSet attrs) { |
@@ -219,12 +229,25 @@ public class UrlBar extends VerticallyFixedEditText { |
} |
}); |
mGestureDetector.setOnDoubleTapListener(null); |
+ mKeyboardHideHelper = new KeyboardHideHelper(this, new Runnable() { |
+ @Override |
+ public void run() { |
+ if (mUrlBarDelegate != null) mUrlBarDelegate.backKeyPressed(); |
+ } |
+ }); |
mAccessibilityManager = |
(AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); |
} |
/** |
+ * Initialize the delegate that allows interaction with the Window. |
+ */ |
+ public void setWindowDelegate(WindowDelegate windowDelegate) { |
+ mKeyboardHideHelper.setWindowDelegate(windowDelegate); |
+ } |
+ |
+ /** |
* Specifies whether the URL bar should use dark text colors or light colors. |
* @param useDarkColors Whether the text colors should be dark (i.e. appropriate for use |
* on a light background). |
@@ -268,6 +291,14 @@ public class UrlBar extends VerticallyFixedEditText { |
} |
} |
+ @Override |
+ public boolean onKeyPreIme(int keyCode, KeyEvent event) { |
+ if (KeyEvent.KEYCODE_BACK == keyCode && event.getAction() == KeyEvent.ACTION_UP) { |
+ mKeyboardHideHelper.monitorForKeyboardHidden(); |
+ } |
+ return super.onKeyPreIme(keyCode, event); |
+ } |
+ |
/** |
* Sets whether text changes should trigger autocomplete. |
* <p> |