|
9 | 9 |
|
10 | 10 | package com.facebook.react.uimanager; |
11 | 11 |
|
| 12 | +import java.lang.reflect.InvocationTargetException; |
12 | 13 | import javax.annotation.Nullable; |
13 | 14 |
|
14 | 15 | import java.util.Arrays; |
15 | 16 | import java.util.List; |
16 | 17 | import java.util.Map; |
17 | 18 |
|
| 19 | +import android.content.Context; |
| 20 | +import android.os.Build; |
18 | 21 | import android.util.DisplayMetrics; |
| 22 | +import android.view.Display; |
| 23 | +import android.view.WindowManager; |
19 | 24 |
|
| 25 | +import com.facebook.common.logging.FLog; |
20 | 26 | import com.facebook.csslayout.CSSLayoutContext; |
21 | 27 | import com.facebook.infer.annotation.Assertions; |
22 | 28 | import com.facebook.react.animation.Animation; |
|
30 | 36 | import com.facebook.react.bridge.ReadableArray; |
31 | 37 | import com.facebook.react.bridge.ReadableMap; |
32 | 38 | import com.facebook.react.bridge.WritableArray; |
| 39 | +import com.facebook.react.common.ReactConstants; |
33 | 40 | import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener; |
34 | 41 | import com.facebook.react.uimanager.events.EventDispatcher; |
35 | 42 | import com.facebook.systrace.Systrace; |
@@ -85,6 +92,26 @@ public UIManagerModule( |
85 | 92 | super(reactContext); |
86 | 93 | mEventDispatcher = new EventDispatcher(reactContext); |
87 | 94 | DisplayMetrics displayMetrics = reactContext.getResources().getDisplayMetrics(); |
| 95 | + |
| 96 | + // Get the real display metrics if we are using API level 17 or higher. |
| 97 | + // The real metrics include system decor elements (e.g. soft menu bar). |
| 98 | + // |
| 99 | + // See: http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics) |
| 100 | + if (Build.VERSION.SDK_INT >= 17) { |
| 101 | + WindowManager wm = (WindowManager)reactContext.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); |
| 102 | + Display display = wm.getDefaultDisplay(); |
| 103 | + |
| 104 | + try { |
| 105 | + Display.class.getMethod("getRealMetrics", DisplayMetrics.class).invoke(display, displayMetrics); |
| 106 | + } catch (InvocationTargetException e) { |
| 107 | + throw new RuntimeException(e); |
| 108 | + } catch (IllegalAccessException e) { |
| 109 | + FLog.e(ReactConstants.TAG, "IllegalAccessException thrown when calling Display.getRealMetrics()"); |
| 110 | + } catch (NoSuchMethodException e) { |
| 111 | + FLog.e(ReactConstants.TAG, "NoSuchMethodException thrown when calling Display.getRealMetrics()"); |
| 112 | + } |
| 113 | + } |
| 114 | + |
88 | 115 | DisplayMetricsHolder.setDisplayMetrics(displayMetrics); |
89 | 116 | mModuleConstants = createConstants(displayMetrics, viewManagerList); |
90 | 117 | mUIImplementation = uiImplementation; |
|
0 commit comments