Index: ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
index 86cb72dffbcdbea0a1779f4525d9fc4d3fa3e500..050e09bd2448531fe81611a2852ff026b4890094 100644 |
--- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
+++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
@@ -26,6 +26,7 @@ import org.chromium.ui.VSyncMonitor; |
import java.lang.ref.WeakReference; |
import java.util.HashMap; |
import java.util.HashSet; |
+import java.util.LinkedList; |
/** |
* The window base class that has the minimum functionality. |
@@ -58,6 +59,15 @@ public class WindowAndroid { |
private ViewGroup mKeyboardAccessoryView; |
+ /** |
+ * An interface to notify listeners of changes in the soft keyboard's visibility. |
+ */ |
+ public interface KeyboardVisibilityListener { |
+ public void keyboardVisibilityChanged(boolean isShowing); |
+ } |
+ private LinkedList<KeyboardVisibilityListener> mKeyboardVisibilityListeners = |
+ new LinkedList<KeyboardVisibilityListener>(); |
+ |
private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listener() { |
@Override |
public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { |
@@ -327,6 +337,34 @@ public class WindowAndroid { |
} |
/** |
+ * Adds a listener that is updated of keyboard visibility changes. This works as a best guess. |
+ * {@see UiUtils.isKeyboardShowing} |
+ */ |
+ public void addKeyboardVisibilityListener(KeyboardVisibilityListener listener) { |
+ mKeyboardVisibilityListeners.add(listener); |
+ } |
+ |
+ /** |
+ * {@see addKeyboardVisibilityListener()}. |
+ */ |
+ public void removeKeyboardVisibilityListener(KeyboardVisibilityListener listener) { |
+ mKeyboardVisibilityListeners.remove(listener); |
+ } |
+ |
+ /** |
+ * To be called when the keyboard visibility state has changed. Informs listeners of the state |
+ * change. |
+ */ |
+ public void keyboardVisibilityChanged(boolean isShowing) { |
+ // Clone the list in case a listener tries to remove itself during the callback. |
+ LinkedList<KeyboardVisibilityListener> listeners = |
+ new LinkedList<KeyboardVisibilityListener>(mKeyboardVisibilityListeners); |
+ for (KeyboardVisibilityListener listener : listeners) { |
+ listener.keyboardVisibilityChanged(isShowing); |
+ } |
+ } |
+ |
+ /** |
* Start a post-layout animation on top of web content. |
* |
* By default, Android optimizes what it shows on top of SurfaceViews (saves power). |