From d8eba8b6ce3c75ee62429cbc9ea0c67b9f9dc6c8 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Wed, 8 Mar 2023 11:46:52 -0500 Subject: [PATCH 1/3] Make status bar transparent on android --- .../java/com/expensify/chat/MainActivity.java | 26 +++++++++--- android/app/src/main/res/values/styles.xml | 2 +- .../CustomStatusBar/index.android.js | 20 +++------ src/components/Modal/BaseModal.js | 8 ++-- src/components/withWindowDimensions.js | 41 ++++++++++++------- .../getSafeAreaPaddingTop/index.android.js | 12 ------ src/libs/getSafeAreaPaddingTop/index.js | 9 ---- .../index.android.js | 4 ++ src/libs/getWindowHeightAdjustment/index.js | 4 ++ src/pages/signin/SignInPage.js | 11 +++-- src/styles/StyleUtils.js | 13 +++--- 11 files changed, 79 insertions(+), 71 deletions(-) delete mode 100644 src/libs/getSafeAreaPaddingTop/index.android.js delete mode 100644 src/libs/getSafeAreaPaddingTop/index.js create mode 100644 src/libs/getWindowHeightAdjustment/index.android.js create mode 100644 src/libs/getWindowHeightAdjustment/index.js diff --git a/android/app/src/main/java/com/expensify/chat/MainActivity.java b/android/app/src/main/java/com/expensify/chat/MainActivity.java index b4eb483f8de6..ff4945f7f71f 100644 --- a/android/app/src/main/java/com/expensify/chat/MainActivity.java +++ b/android/app/src/main/java/com/expensify/chat/MainActivity.java @@ -3,6 +3,9 @@ import android.os.Bundle; import android.content.pm.ActivityInfo; import android.view.KeyEvent; +import android.view.View; +import android.view.WindowInsets; + import com.expensify.chat.bootsplash.BootSplash; import com.expensify.reactnativekeycommand.KeyCommandModule; import com.facebook.react.ReactActivity; @@ -45,6 +48,19 @@ protected void onCreate(Bundle savedInstanceState) { if (getResources().getBoolean(R.bool.portrait_only)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } + + // Sets translucent status bar. This code is based on what the react-native StatusBar + // module does, but we need to do it here to avoid the splash screen jumping on app start. + View decorView = getWindow().getDecorView(); + decorView.setOnApplyWindowInsetsListener( + (v, insets) -> { + WindowInsets defaultInsets = v.onApplyWindowInsets(insets); + return defaultInsets.replaceSystemWindowInsets( + defaultInsets.getSystemWindowInsetLeft(), + 0, + defaultInsets.getSystemWindowInsetRight(), + defaultInsets.getSystemWindowInsetBottom()); + }); } /** @@ -54,15 +70,15 @@ protected void onCreate(Bundle savedInstanceState) { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Disabling hardware ESCAPE support which is handled by Android - if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { - return false; + if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { + return false; } KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); return super.onKeyDown(keyCode, event); } @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { + public boolean onKeyLongPress(int keyCode, KeyEvent event) { // Disabling hardware ESCAPE support which is handled by Android if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { return false; } KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); @@ -70,10 +86,10 @@ public boolean onKeyLongPress(int keyCode, KeyEvent event) { } @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { + public boolean onKeyUp(int keyCode, KeyEvent event) { // Disabling hardware ESCAPE support which is handled by Android if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { return false; } KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); return super.onKeyUp(keyCode, event); } -} \ No newline at end of file +} diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index c789cdfef09f..dc54ab746f8c 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -6,7 +6,7 @@ diff --git a/src/components/SplashScreenHider/index.native.js b/src/components/SplashScreenHider/index.native.js index 8e544b7da2a1..8f0260594e87 100644 --- a/src/components/SplashScreenHider/index.native.js +++ b/src/components/SplashScreenHider/index.native.js @@ -64,7 +64,6 @@ const SplashScreenHider = (props) => { opacityStyle, { // Apply negative margins to center the logo on window (instead of screen) - marginTop: -(StatusBar.currentHeight || 0), marginBottom: -(BootSplash.navigationBarHeight || 0), }, ]} From a94bc4fd51d4e36a0868fea2e3e46438a04f409a Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Wed, 24 May 2023 12:44:18 -0400 Subject: [PATCH 3/3] Fix lint --- src/components/SplashScreenHider/index.native.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SplashScreenHider/index.native.js b/src/components/SplashScreenHider/index.native.js index 8f0260594e87..6b626ceaaf1f 100644 --- a/src/components/SplashScreenHider/index.native.js +++ b/src/components/SplashScreenHider/index.native.js @@ -1,6 +1,6 @@ import {useCallback, useRef} from 'react'; import PropTypes from 'prop-types'; -import {StatusBar, StyleSheet} from 'react-native'; +import {StyleSheet} from 'react-native'; import Reanimated, {useSharedValue, withTiming, Easing, useAnimatedStyle, runOnJS} from 'react-native-reanimated'; import BootSplash from '../../libs/BootSplash'; import Logo from '../../../assets/images/new-expensify-dark.svg';