diff --git a/Libraries/Modal/Modal.js b/Libraries/Modal/Modal.js index 8dea025284a..87b76fe14a5 100644 --- a/Libraries/Modal/Modal.js +++ b/Libraries/Modal/Modal.js @@ -15,6 +15,7 @@ const Platform = require('Platform'); const PropTypes = require('ReactPropTypes'); const React = require('React'); const StyleSheet = require('StyleSheet'); +const UIManager = require('UIManager'); const View = require('View'); const deprecatedPropType = require('deprecatedPropType'); @@ -56,8 +57,9 @@ class Modal extends React.Component { return null; } - const containerBackgroundColor = { + const containerStyles = { backgroundColor: this.props.transparent ? 'transparent' : 'white', + top: Platform.OS === 'android' && Platform.Version >= 19 ? UIManager.RCTModalHostView.Constants.StatusBarHeight : 0, }; let animationType = this.props.animationType; @@ -78,7 +80,7 @@ class Modal extends React.Component { style={styles.modal} onStartShouldSetResponder={this._shouldSetResponder} > - + {this.props.children} @@ -102,4 +104,4 @@ const styles = StyleSheet.create({ } }); -module.exports = Modal; \ No newline at end of file +module.exports = Modal; diff --git a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java index 2687402c660..d389d0f1020 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java @@ -108,7 +108,7 @@ public class MainReactPackage implements ReactPackage { new ReactDropdownPickerManager(), new ReactHorizontalScrollViewManager(), new ReactImageManager(), - new ReactModalHostManager(), + new ReactModalHostManager(reactContext), new ReactProgressBarViewManager(), new ReactRawTextManager(), new ReactScrollViewManager(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java index c8091251e30..4af221dd496 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java @@ -9,13 +9,17 @@ package com.facebook.react.views.modal; +import javax.annotation.Nullable; + import java.util.Map; import android.content.DialogInterface; +import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.common.MapBuilder; import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.LayoutShadowNode; +import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewGroupManager; @@ -29,6 +33,12 @@ public class ReactModalHostManager extends ViewGroupManager private static final String REACT_CLASS = "RCTModalHostView"; + private final ReactApplicationContext mContext; + + public ReactModalHostManager(ReactApplicationContext context) { + mContext = context; + } + @Override public String getName() { return REACT_CLASS; @@ -95,6 +105,18 @@ public class ReactModalHostManager extends ViewGroupManager .build(); } + @Override + public @Nullable Map getExportedViewConstants() { + final int heightResId = mContext.getResources().getIdentifier("status_bar_height", "dimen", "android"); + final float height = heightResId > 0 ? + PixelUtil.toDIPFromPixel(mContext.getResources().getDimensionPixelSize(heightResId)) : + 0; + + return MapBuilder.of( + "StatusBarHeight", height + ); + } + @Override protected void onAfterUpdateTransaction(ReactModalHostView view) { super.onAfterUpdateTransaction(view); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java index 3414429f0a2..24b33892a36 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java @@ -223,6 +223,8 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe private void updateProperties() { Assertions.assertNotNull(mDialog, "mDialog must exist when we call updateProperties"); + mDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + if (mTransparent) { mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); } else {