From 0c52fb0ff0a53751750a4147f1a48e89bfb25b89 Mon Sep 17 00:00:00 2001 From: gongdao123 Date: Tue, 21 May 2019 00:48:31 +0800 Subject: [PATCH 1/5] for the fix --- .../ExtraDimensionsModule.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index 330a3d2..03163d2 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"); @@ -160,4 +174,4 @@ protected static float getNormalNavigationBarHeight(final Context ctx) { } return 0; } -} \ No newline at end of file +} From 7f2c5acc39c9e5d3238005e8c18121cdf9c97770 Mon Sep 17 00:00:00 2001 From: gongdao123 Date: Thu, 23 May 2019 15:44:54 +0800 Subject: [PATCH 2/5] always return a value --- .../java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index 03163d2..e98fd13 100644 --- a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java +++ b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java @@ -114,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 From ba0dae08ecbbaeb050d4db1ad3d6f33a7f3cf0c1 Mon Sep 17 00:00:00 2001 From: gongdao123 Date: Tue, 28 May 2019 16:50:55 +0800 Subject: [PATCH 3/5] add back check --- .../java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index e98fd13..03163d2 100644 --- a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java +++ b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java @@ -114,6 +114,9 @@ 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 From 295f13d488990c9b9b3793b7c6754ded89be9343 Mon Sep 17 00:00:00 2001 From: gongdao123 Date: Tue, 28 May 2019 17:26:32 +0800 Subject: [PATCH 4/5] change method --- .../extradimensions/ExtraDimensionsModule.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index 03163d2..fcf1c1c 100644 --- a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java +++ b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java @@ -86,20 +86,8 @@ public Map getConstants() { } private boolean hasPermanentMenuKey() { - 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(); - } + final Context ctx = getReactApplicationContext(); + boolean hasPermanentMenuKey = ViewConfiguration.get(ctx).hasPermanentMenuKey(); return hasPermanentMenuKey; } From 9e1cc2a92bfeb97fbba74e246e1b0c128580953d Mon Sep 17 00:00:00 2001 From: gongdao123 Date: Tue, 28 May 2019 18:01:14 +0800 Subject: [PATCH 5/5] revert back --- .../ExtraDimensionsModule.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java index fcf1c1c..e98fd13 100644 --- a/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java +++ b/android/src/main/java/ca/jaysoo/extradimensions/ExtraDimensionsModule.java @@ -86,8 +86,20 @@ public Map getConstants() { } private boolean hasPermanentMenuKey() { - final Context ctx = getReactApplicationContext(); - boolean hasPermanentMenuKey = ViewConfiguration.get(ctx).hasPermanentMenuKey(); + 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; } @@ -102,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