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 ed905797a539cd..29d08a833f659f 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 @@ -17,6 +17,7 @@ import android.os.Build; import android.support.v4.view.ViewCompat; import android.view.View; +import android.view.WindowManager; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -26,11 +27,10 @@ public class StatusBarModule extends ReactContextBaseJavaModule { - private static final String ERROR_NO_ACTIVITY = + private static final String ERROR_NO_ACTIVITY = "E_NO_ACTIVITY"; + private static final String ERROR_NO_ACTIVITY_MESSAGE = "Tried to change the status bar while not attached to an Activity"; - private int mWindowFlags = 0; - public StatusBarModule(ReactApplicationContext reactContext) { super(reactContext); } @@ -44,7 +44,7 @@ public String getName() { public void setColor(final int color, final boolean animated, final Promise res) { final Activity activity = getCurrentActivity(); if (activity == null) { - res.reject(ERROR_NO_ACTIVITY); + res.reject(ERROR_NO_ACTIVITY, ERROR_NO_ACTIVITY_MESSAGE); return; } @@ -85,21 +85,20 @@ public void onAnimationUpdate(ValueAnimator animator) { public void setTranslucent(final boolean translucent, final Promise res) { final Activity activity = getCurrentActivity(); if (activity == null) { - res.reject(ERROR_NO_ACTIVITY); + res.reject(ERROR_NO_ACTIVITY, ERROR_NO_ACTIVITY_MESSAGE); return; } UiThreadUtil.runOnUiThread( new Runnable() { @Override public void run() { + int flags = activity.getWindow().getDecorView().getSystemUiVisibility(); if (translucent) { - mWindowFlags |= - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; } else { - mWindowFlags &= - ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + flags &= ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } - activity.getWindow().getDecorView().setSystemUiVisibility(mWindowFlags); + activity.getWindow().getDecorView().setSystemUiVisibility(flags); ViewCompat.requestApplyInsets(activity.getWindow().getDecorView()); res.resolve(null); } @@ -111,7 +110,7 @@ public void run() { public void setHidden(final boolean hidden, final Promise res) { final Activity activity = getCurrentActivity(); if (activity == null) { - res.reject(ERROR_NO_ACTIVITY); + res.reject(ERROR_NO_ACTIVITY, ERROR_NO_ACTIVITY_MESSAGE); return; } UiThreadUtil.runOnUiThread( @@ -119,11 +118,13 @@ public void setHidden(final boolean hidden, final Promise res) { @Override public void run() { if (hidden) { - mWindowFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN; + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } else { - mWindowFlags &= ~View.SYSTEM_UI_FLAG_FULLSCREEN; + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } - activity.getWindow().getDecorView().setSystemUiVisibility(mWindowFlags); + res.resolve(null); } }