diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index 330a3d2..e98fd13 100644 --- a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java +++ b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java @@ -17,6 +17,7 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @@ -85,11 +86,24 @@ public Map getConstants() { } private boolean hasPermanentMenuKey() { - final Context ctx = getReactApplicationContext(); - int id = ctx.getResources().getIdentifier("config_showNavigationBar", "bool", "android"); - return !(id > 0 && ctx.getResources().getBoolean(id)); + boolean hasPermanentMenuKey = true; + // From: https://www.jianshu.com/p/e164dec92bd8 + try { + Class windowManagerGlobalClass = Class.forName("android.view.WindowManagerGlobal"); + Method getWmServiceMethod = windowManagerGlobalClass.getDeclaredMethod("getWindowManagerService"); + getWmServiceMethod.setAccessible(true); + Object iWindowManager = getWmServiceMethod.invoke(null); + Class iWindowManagerClass = iWindowManager.getClass(); + Method hasNavBarMethod = iWindowManagerClass.getDeclaredMethod("hasNavigationBar"); + hasNavBarMethod.setAccessible(true); + hasPermanentMenuKey = !(Boolean) hasNavBarMethod.invoke(iWindowManager); + } catch (Exception e) { + e.printStackTrace(); + } + return hasPermanentMenuKey; } + private float getStatusBarHeight(DisplayMetrics metrics) { final Context ctx = getReactApplicationContext(); final int heightResId = ctx.getResources().getIdentifier("status_bar_height", "dimen", "android"); @@ -100,9 +114,6 @@ private float getStatusBarHeight(DisplayMetrics metrics) { } private float getSoftMenuBarHeight(DisplayMetrics metrics) { - if(hasPermanentMenuKey()) { - return 0; - } final Context ctx = getReactApplicationContext(); final int heightResId = ctx.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); return @@ -160,4 +171,4 @@ protected static float getNormalNavigationBarHeight(final Context ctx) { } return 0; } -} \ No newline at end of file +}