From 5a109ae43bec251abca49a91fbd41c37e166ebbd Mon Sep 17 00:00:00 2001 From: Andrei Coman Date: Mon, 8 Feb 2016 11:45:32 -0800 Subject: [PATCH] Make keyboard detection more robust Reviewed By: nspaun Differential Revision: D2905647 fb-gh-sync-id: 0bd5405f32a5e63c9f85178b4d1f777fe032f8d5 --- .../main/java/com/facebook/react/ReactRootView.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index e6d356876..2271b20fd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -389,11 +389,13 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView private class KeyboardListener implements ViewTreeObserver.OnGlobalLayoutListener { private final Rect mVisibleViewArea; - + private final int mMinKeyboardHeightDetected; + private int mKeyboardHeight = 0; /* package */ KeyboardListener() { mVisibleViewArea = new Rect(); + mMinKeyboardHeightDetected = (int) PixelUtil.toPixelFromDIP(60); } @Override @@ -409,7 +411,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView getRootView().getWindowVisibleDisplayFrame(mVisibleViewArea); final int heightDiff = DisplayMetricsHolder.getDisplayMetrics().heightPixels - mVisibleViewArea.bottom; - if (mKeyboardHeight != heightDiff && heightDiff > 0) { + if (mKeyboardHeight != heightDiff && heightDiff > mMinKeyboardHeightDetected) { // keyboard is now showing, or the keyboard height has changed mKeyboardHeight = heightDiff; WritableMap params = Arguments.createMap(); @@ -420,9 +422,9 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView coordinates.putDouble("height", PixelUtil.toDIPFromPixel(mKeyboardHeight)); params.putMap("endCoordinates", coordinates); sendEvent("keyboardDidShow", params); - } else if (mKeyboardHeight != 0 && heightDiff == 0) { + } else if (mKeyboardHeight != 0 && heightDiff <= mMinKeyboardHeightDetected) { // keyboard is now hidden - mKeyboardHeight = heightDiff; + mKeyboardHeight = 0; sendEvent("keyboardDidHide", null); } }