diff --git a/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js b/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js index 98e1f2a93..e75e40534 100644 --- a/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +++ b/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js @@ -170,14 +170,6 @@ var DrawerLayoutAndroid = createReactClass({ return this.refs[INNERVIEW_REF].getInnerViewNode(); }, - componentDidMount: function() { - this._updateStatusBarBackground(); - }, - - componentDidReceiveProps: function() { - this._updateStatusBarBackground(); - }, - render: function() { var drawStatusBar = Platform.Version >= 21 && this.props.statusBarBackgroundColor; var drawerViewWrapper = @@ -195,7 +187,7 @@ var DrawerLayoutAndroid = createReactClass({ {drawStatusBar && } {drawStatusBar && = 21 && this.props.statusBarBackgroundColor) { - // Check if the value is not already transparent to avoid an extra render. - if (this.state.statusBarBackgroundColor !== 'transparent') { - requestAnimationFrame(() => { - this.setState({statusBarBackgroundColor: 'transparent'}); - }); - } - } else { - this.setState({statusBarBackgroundColor: undefined}); - } - }, }); var styles = StyleSheet.create({ diff --git a/Libraries/Components/StatusBar/StatusBar.js b/Libraries/Components/StatusBar/StatusBar.js index b2f52d11e..e2988951a 100644 --- a/Libraries/Components/StatusBar/StatusBar.js +++ b/Libraries/Components/StatusBar/StatusBar.js @@ -145,7 +145,7 @@ function createStackEntry(props: any): any { * set by the static API will get overriden by the one set by the component in * the next render. * - * ### Constants + * ### Constants * * `currentHeight` (Android only) The height of the status bar. */ diff --git a/RNTester/js/StatusBarExample.js b/RNTester/js/StatusBarExample.js index 80e5a8ac7..6524a8c35 100644 --- a/RNTester/js/StatusBarExample.js +++ b/RNTester/js/StatusBarExample.js @@ -29,6 +29,7 @@ const colors = [ '#ff0000', '#00ff00', '#0000ff', + 'rgba(0, 0, 0, 0.4)', ]; const barStyles = [ @@ -405,7 +406,7 @@ const examples = [{ }, platform: 'android', }, { - title: 'StatusBar background color', + title: 'StatusBar translucent', render() { return ; }, diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java index 0c3ebef19..296e9f09c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java @@ -19,7 +19,6 @@ import android.support.v4.view.ViewCompat; import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; - import com.facebook.common.logging.FLog; import com.facebook.react.bridge.GuardedRunnable; import com.facebook.react.bridge.NativeModule; @@ -31,9 +30,7 @@ import com.facebook.react.common.MapBuilder; import com.facebook.react.common.ReactConstants; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.PixelUtil; - import java.util.Map; - import javax.annotation.Nullable; /** @@ -75,31 +72,36 @@ public class StatusBarModule extends ReactContextBaseJavaModule { } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - UiThreadUtil.runOnUiThread( - new GuardedRunnable(getReactApplicationContext()) { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @Override - public void runGuarded() { - if (animated) { - int curColor = activity.getWindow().getStatusBarColor(); - ValueAnimator colorAnimation = ValueAnimator.ofObject( - new ArgbEvaluator(), curColor, color); - colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animator) { - activity.getWindow().setStatusBarColor((Integer) animator.getAnimatedValue()); - } - }); - colorAnimation - .setDuration(300) - .setStartDelay(0); - colorAnimation.start(); - } else { - activity.getWindow().setStatusBarColor(color); + UiThreadUtil.runOnUiThread( + new GuardedRunnable(getReactApplicationContext()) { + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public void runGuarded() { + activity + .getWindow() + .addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + if (animated) { + int curColor = activity.getWindow().getStatusBarColor(); + ValueAnimator colorAnimation = + ValueAnimator.ofObject(new ArgbEvaluator(), curColor, color); + + colorAnimation.addUpdateListener( + new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animator) { + activity + .getWindow() + .setStatusBarColor((Integer) animator.getAnimatedValue()); + } + }); + colorAnimation.setDuration(300).setStartDelay(0); + colorAnimation.start(); + } else { + activity.getWindow().setStatusBarColor(color); + } } - } - }); + }); } }