react-native-bootsplash 6.1.5 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +6 -4
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplash.kt +13 -0
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashDialog.kt +79 -0
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashModuleImpl.kt +242 -0
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashPackage.kt +37 -0
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashQueue.kt +26 -0
- package/android/src/main/res/values/colors.xml +8 -0
- package/android/src/main/res/values/styles.xml +13 -13
- package/android/src/main/res/values-night/styles.xml +1 -1
- package/android/src/main/res/values-v23/styles.xml +2 -2
- package/android/src/main/res/values-v29/styles.xml +1 -1
- package/android/src/main/res/values-v31/styles.xml +1 -1
- package/android/src/newarch/com/zoontek/rnbootsplash/RNBootSplashModule.kt +39 -0
- package/android/src/oldarch/com/zoontek/rnbootsplash/RNBootSplashModule.kt +43 -0
- package/dist/commonjs/addon/index.js +31 -31
- package/dist/commonjs/generate.js +14 -11
- package/dist/commonjs/generate.js.map +1 -1
- package/dist/commonjs/index.js +13 -4
- package/dist/commonjs/index.js.map +1 -1
- package/dist/module/addon/index.js +31 -31
- package/dist/module/generate.js +14 -11
- package/dist/module/generate.js.map +1 -1
- package/dist/module/index.js +13 -4
- package/dist/module/index.js.map +1 -1
- package/dist/typescript/generate.d.ts.map +1 -1
- package/dist/typescript/index.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/generate.ts +22 -17
- package/src/index.ts +25 -6
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplash.java +0 -13
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashDialog.java +0 -119
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashModuleImpl.java +0 -306
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashPackage.java +0 -46
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashQueue.java +0 -31
- package/android/src/newarch/com/zoontek/rnbootsplash/RNBootSplashModule.java +0 -51
- package/android/src/oldarch/com/zoontek/rnbootsplash/RNBootSplashModule.java +0 -55
package/dist/module/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { Platform, StyleSheet } from "react-native";
|
|
5
|
+
import { isEdgeToEdge } from "react-native-is-edge-to-edge";
|
|
5
6
|
import NativeModule from "./NativeRNBootSplash";
|
|
6
7
|
export function hide(config = {}) {
|
|
7
8
|
const {
|
|
@@ -21,8 +22,8 @@ export function useHideAnimation(config) {
|
|
|
21
22
|
brand: brandSrc,
|
|
22
23
|
darkBrand: darkBrandSrc,
|
|
23
24
|
animate,
|
|
24
|
-
statusBarTranslucent
|
|
25
|
-
navigationBarTranslucent
|
|
25
|
+
statusBarTranslucent,
|
|
26
|
+
navigationBarTranslucent
|
|
26
27
|
} = config;
|
|
27
28
|
const skipLogo = logoSrc == null;
|
|
28
29
|
const skipBrand = manifest.brand == null || brandSrc == null;
|
|
@@ -114,13 +115,21 @@ export function useHideAnimation(config) {
|
|
|
114
115
|
brand
|
|
115
116
|
};
|
|
116
117
|
}
|
|
118
|
+
if (__DEV__) {
|
|
119
|
+
const hasNavigationBarOption = navigationBarTranslucent != null;
|
|
120
|
+
const hasStatusBarOption = statusBarTranslucent != null;
|
|
121
|
+
const hasBothOptions = hasStatusBarOption && hasNavigationBarOption;
|
|
122
|
+
if (isEdgeToEdge() && (hasStatusBarOption || hasNavigationBarOption)) {
|
|
123
|
+
console.warn(hasBothOptions ? "statusBarTranslucent and navigationBarTranslucent options are ignored when using react-native-edge-to-edge" : `${hasStatusBarOption ? "status" : "navigation"}BarTranslucent option is ignored when using react-native-edge-to-edge`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
117
126
|
return {
|
|
118
127
|
container: {
|
|
119
128
|
...container,
|
|
120
129
|
style: {
|
|
121
130
|
...containerStyle,
|
|
122
|
-
marginTop: statusBarTranslucent ? undefined : -statusBarHeight,
|
|
123
|
-
marginBottom: navigationBarTranslucent ? undefined : -navigationBarHeight
|
|
131
|
+
marginTop: isEdgeToEdge() || (statusBarTranslucent ?? false) ? undefined : -statusBarHeight,
|
|
132
|
+
marginBottom: isEdgeToEdge() || (navigationBarTranslucent ?? false) ? undefined : -navigationBarHeight
|
|
124
133
|
}
|
|
125
134
|
},
|
|
126
135
|
logo: {
|
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","Platform","StyleSheet","NativeModule","hide","config","fade","then","isVisible","useHideAnimation","manifest","ready","logo","logoSrc","darkLogo","darkLogoSrc","brand","brandSrc","darkBrand","darkBrandSrc","animate","statusBarTranslucent","navigationBarTranslucent","skipLogo","skipBrand","logoWidth","width","logoHeight","height","brandBottom","bottom","brandWidth","brandHeight","darkModeEnabled","logoSizeRatio","navigationBarHeight","statusBarHeight","getConstants","backgroundColor","darkBackground","background","logoFinalSrc","undefined","brandFinalSrc","ref","layoutReady","logoReady","brandReady","userReady","animateHasBeenCalled","maybeRunAnimate","current","catch","containerStyle","absoluteFillObject","alignItems","justifyContent","container","style","onLayout","source","fadeDuration","resizeMode","onLoadEnd","position","OS","marginTop","marginBottom"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACzE,SAKEC,QAAQ,EACRC,UAAU,QAEL,cAAc;AACrB,OAAOC,YAAY,MAAM,sBAAsB;AA8D/C,OAAO,SAASC,IAAIA,CAACC,MAAc,GAAG,CAAC,CAAC,EAAiB;EACvD,MAAM;IAAEC,IAAI,GAAG;EAAM,CAAC,GAAGD,MAAM;EAC/B,OAAOF,YAAY,CAACC,IAAI,CAACE,IAAI,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C;AAEA,OAAO,SAASC,SAASA,CAAA,EAAqB;EAC5C,OAAOL,YAAY,CAACK,SAAS,CAAC,CAAC;AACjC;AAEA,OAAO,SAASC,gBAAgBA,CAACJ,MAA8B,EAAE;EAC/D,MAAM;IACJK,QAAQ;IACRC,KAAK,GAAG,IAAI;IAEZC,IAAI,EAAEC,OAAO;IACbC,QAAQ,EAAEC,WAAW;IACrBC,KAAK,EAAEC,QAAQ;IACfC,SAAS,EAAEC,YAAY;IAEvBC,OAAO;IAEPC,oBAAoB
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","Platform","StyleSheet","isEdgeToEdge","NativeModule","hide","config","fade","then","isVisible","useHideAnimation","manifest","ready","logo","logoSrc","darkLogo","darkLogoSrc","brand","brandSrc","darkBrand","darkBrandSrc","animate","statusBarTranslucent","navigationBarTranslucent","skipLogo","skipBrand","logoWidth","width","logoHeight","height","brandBottom","bottom","brandWidth","brandHeight","darkModeEnabled","logoSizeRatio","navigationBarHeight","statusBarHeight","getConstants","backgroundColor","darkBackground","background","logoFinalSrc","undefined","brandFinalSrc","ref","layoutReady","logoReady","brandReady","userReady","animateHasBeenCalled","maybeRunAnimate","current","catch","containerStyle","absoluteFillObject","alignItems","justifyContent","container","style","onLayout","source","fadeDuration","resizeMode","onLoadEnd","position","OS","__DEV__","hasNavigationBarOption","hasStatusBarOption","hasBothOptions","console","warn","marginTop","marginBottom"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACzE,SAKEC,QAAQ,EACRC,UAAU,QAEL,cAAc;AACrB,SAASC,YAAY,QAAQ,8BAA8B;AAC3D,OAAOC,YAAY,MAAM,sBAAsB;AA8D/C,OAAO,SAASC,IAAIA,CAACC,MAAc,GAAG,CAAC,CAAC,EAAiB;EACvD,MAAM;IAAEC,IAAI,GAAG;EAAM,CAAC,GAAGD,MAAM;EAC/B,OAAOF,YAAY,CAACC,IAAI,CAACE,IAAI,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C;AAEA,OAAO,SAASC,SAASA,CAAA,EAAqB;EAC5C,OAAOL,YAAY,CAACK,SAAS,CAAC,CAAC;AACjC;AAEA,OAAO,SAASC,gBAAgBA,CAACJ,MAA8B,EAAE;EAC/D,MAAM;IACJK,QAAQ;IACRC,KAAK,GAAG,IAAI;IAEZC,IAAI,EAAEC,OAAO;IACbC,QAAQ,EAAEC,WAAW;IACrBC,KAAK,EAAEC,QAAQ;IACfC,SAAS,EAAEC,YAAY;IAEvBC,OAAO;IAEPC,oBAAoB;IACpBC;EACF,CAAC,GAAGjB,MAAM;EAEV,MAAMkB,QAAQ,GAAGV,OAAO,IAAI,IAAI;EAChC,MAAMW,SAAS,GAAGd,QAAQ,CAACM,KAAK,IAAI,IAAI,IAAIC,QAAQ,IAAI,IAAI;EAE5D,MAAMQ,SAAS,GAAGf,QAAQ,CAACE,IAAI,CAACc,KAAK;EACrC,MAAMC,UAAU,GAAGjB,QAAQ,CAACE,IAAI,CAACgB,MAAM;EACvC,MAAMC,WAAW,GAAGnB,QAAQ,CAACM,KAAK,EAAEc,MAAM;EAC1C,MAAMC,UAAU,GAAGrB,QAAQ,CAACM,KAAK,EAAEU,KAAK;EACxC,MAAMM,WAAW,GAAGtB,QAAQ,CAACM,KAAK,EAAEY,MAAM;EAE1C,MAAM,CACJ;IACEK,eAAe;IACfC,aAAa,GAAG,CAAC;IACjBC,mBAAmB,GAAG,CAAC;IACvBC,eAAe,GAAG;EACpB,CAAC,CACF,GAAGrC,QAAQ,CAAC,MAAMI,YAAY,CAACkC,YAAY,CAAC,CAAC,CAAC;EAE/C,MAAMC,eAAuB,GAC3BL,eAAe,IAAIvB,QAAQ,CAAC6B,cAAc,IAAI,IAAI,GAC9C7B,QAAQ,CAAC6B,cAAc,GACvB7B,QAAQ,CAAC8B,UAAU;EAEzB,MAAMC,YAA4C,GAAGlB,QAAQ,GACzDmB,SAAS,GACTT,eAAe,IAAIlB,WAAW,IAAI,IAAI,GACpCA,WAAW,GACXF,OAAO;EAEb,MAAM8B,aAA6C,GAAGnB,SAAS,GAC3DkB,SAAS,GACTT,eAAe,IAAId,YAAY,IAAI,IAAI,GACrCA,YAAY,GACZF,QAAQ;EAEd,MAAM2B,GAAG,GAAG9C,MAAM,CAAC;IACjB+C,WAAW,EAAE,KAAK;IAClBC,SAAS,EAAEvB,QAAQ;IACnBwB,UAAU,EAAEvB,SAAS;IACrBwB,SAAS,EAAErC,KAAK;IAEhBS,OAAO;IACP6B,oBAAoB,EAAE;EACxB,CAAC,CAAC;EAEF,MAAMC,eAAe,GAAGvD,WAAW,CAAC,MAAM;IACxC,IACEiD,GAAG,CAACO,OAAO,CAACN,WAAW,IACvBD,GAAG,CAACO,OAAO,CAACL,SAAS,IACrBF,GAAG,CAACO,OAAO,CAACJ,UAAU,IACtBH,GAAG,CAACO,OAAO,CAACH,SAAS,IACrB,CAACJ,GAAG,CAACO,OAAO,CAACF,oBAAoB,EACjC;MACAL,GAAG,CAACO,OAAO,CAACF,oBAAoB,GAAG,IAAI;MAEvC7C,IAAI,CAAC;QAAEE,IAAI,EAAE;MAAM,CAAC,CAAC,CAClBC,IAAI,CAAC,MAAMqC,GAAG,CAACO,OAAO,CAAC/B,OAAO,CAAC,CAAC,CAAC,CACjCgC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpB;EACF,CAAC,EAAE,EAAE,CAAC;EAENxD,SAAS,CAAC,MAAM;IACdgD,GAAG,CAACO,OAAO,CAAC/B,OAAO,GAAGA,OAAO;IAC7BwB,GAAG,CAACO,OAAO,CAACH,SAAS,GAAGrC,KAAK;IAE7BuC,eAAe,CAAC,CAAC;EACnB,CAAC,CAAC;EAEF,OAAOrD,OAAO,CAAmB,MAAM;IACrC,MAAMwD,cAAyB,GAAG;MAChC,GAAGpD,UAAU,CAACqD,kBAAkB;MAChChB,eAAe;MACfiB,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC;IAED,MAAMC,SAAyB,GAAG;MAChCC,KAAK,EAAEL,cAAc;MACrBM,QAAQ,EAAEA,CAAA,KAAM;QACdf,GAAG,CAACO,OAAO,CAACN,WAAW,GAAG,IAAI;QAC9BK,eAAe,CAAC,CAAC;MACnB;IACF,CAAC;IAED,MAAMtC,IAAe,GACnB6B,YAAY,IAAI,IAAI,GAChB;MAAEmB,MAAM,EAAE,CAAC;IAAE,CAAC,GACd;MACEA,MAAM,EAAEnB,YAAY;MACpBoB,YAAY,EAAE,CAAC;MACfC,UAAU,EAAE,SAAS;MACrBJ,KAAK,EAAE;QACLhC,KAAK,EAAED,SAAS;QAChBG,MAAM,EAAED;MACV,CAAC;MACDoC,SAAS,EAAEA,CAAA,KAAM;QACfnB,GAAG,CAACO,OAAO,CAACL,SAAS,GAAG,IAAI;QAC5BI,eAAe,CAAC,CAAC;MACnB;IACF,CAAC;IAEP,MAAMlC,KAAiB,GACrB2B,aAAa,IAAI,IAAI,GACjB;MAAEiB,MAAM,EAAE,CAAC;IAAE,CAAC,GACd;MACEA,MAAM,EAAEjB,aAAa;MACrBkB,YAAY,EAAE,CAAC;MACfC,UAAU,EAAE,SAAS;MACrBJ,KAAK,EAAE;QACLM,QAAQ,EAAE,UAAU;QACpBlC,MAAM,EAAE9B,QAAQ,CAACiE,EAAE,KAAK,KAAK,GAAG,EAAE,GAAGpC,WAAW;QAChDH,KAAK,EAAEK,UAAU;QACjBH,MAAM,EAAEI;MACV,CAAC;MACD+B,SAAS,EAAEA,CAAA,KAAM;QACfnB,GAAG,CAACO,OAAO,CAACJ,UAAU,GAAG,IAAI;QAC7BG,eAAe,CAAC,CAAC;MACnB;IACF,CAAC;IAEP,IAAIlD,QAAQ,CAACiE,EAAE,KAAK,SAAS,EAAE;MAC7B,OAAO;QAAER,SAAS;QAAE7C,IAAI;QAAEI;MAAM,CAAC;IACnC;IAEA,IAAIkD,OAAO,EAAE;MACX,MAAMC,sBAAsB,GAAG7C,wBAAwB,IAAI,IAAI;MAC/D,MAAM8C,kBAAkB,GAAG/C,oBAAoB,IAAI,IAAI;MACvD,MAAMgD,cAAc,GAAGD,kBAAkB,IAAID,sBAAsB;MAEnE,IAAIjE,YAAY,CAAC,CAAC,KAAKkE,kBAAkB,IAAID,sBAAsB,CAAC,EAAE;QACpEG,OAAO,CAACC,IAAI,CACVF,cAAc,GACV,4GAA4G,GAC5G,GAAGD,kBAAkB,GAAG,QAAQ,GAAG,YAAY,uEACrD,CAAC;MACH;IACF;IAEA,OAAO;MACLX,SAAS,EAAE;QACT,GAAGA,SAAS;QACZC,KAAK,EAAE;UACL,GAAGL,cAAc;UACjBmB,SAAS,EACPtE,YAAY,CAAC,CAAC,KAAKmB,oBAAoB,IAAI,KAAK,CAAC,GAC7CqB,SAAS,GACT,CAACN,eAAe;UACtBqC,YAAY,EACVvE,YAAY,CAAC,CAAC,KAAKoB,wBAAwB,IAAI,KAAK,CAAC,GACjDoB,SAAS,GACT,CAACP;QACT;MACF,CAAC;MACDvB,IAAI,EAAE;QACJ,GAAGA,IAAI;QACP8C,KAAK,EAAE;UACLhC,KAAK,EAAED,SAAS,GAAGS,aAAa;UAChCN,MAAM,EAAED,UAAU,GAAGO;QACvB;MACF,CAAC;MACDlB;IACF,CAAC;EACH,CAAC,EAAE,CACDkB,aAAa,EACbC,mBAAmB,EACnBC,eAAe,EAEfc,eAAe,EAEfzB,SAAS,EACTE,UAAU,EACVE,WAAW,EACXE,UAAU,EACVC,WAAW,EAEXM,eAAe,EACfG,YAAY,EACZE,aAAa,EAEbtB,oBAAoB,EACpBC,wBAAwB,CACzB,CAAC;AACJ;AAEA,eAAe;EACblB,IAAI;EACJI,SAAS;EACTC;AACF,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/generate.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAKtD,OAAc,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGrC,OAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAW/D,KAAK,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9C,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;AAE/C,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,QAAQ,CAAC;CACf,CAAC;AAOF,eAAO,MAAM,GAAG;kBACA,MAAM;mBAGL,MAAM,QAAQ,MAAM;iBAGtB,MAAM;sBAGD,MAAM,eAAe;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAQzE,CAAC;AA2FF,eAAO,MAAM,GAAG;mBACC,MAAM;mBACN,MAAM;kBACP,MAAM;iBACP,MAAM,KAAmD,OAAO;oBAC7D,MAAM;qBACL,MAAM;eACZ,MAAM;iBACJ,MAAM;gBAEP,MAAM,QAAQ,MAAM;qBAYf,MAAM;kBAGT,MAAM,WAAW,MAAM;CAItC,CAAC;AAmBF,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAkC7D,CAAC;AAEF,eAAO,MAAM,SAAS,aAAc,MAAM,WAAW,MAAM,SAG1D,CAAC;AAEF,KAAK,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAA;CAAE,GAAG,CACpD;IACE,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACzE,sBAAsB,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC;CACpE,GACD;IACE,SAAS,EAAE,cAAc,CAAC;IAC1B,+BAA+B,CAAC,EAAE,mBAAmB,CAAC,iCAAiC,CAAC,CAAC;CAC1F,CACJ,CAAC;AAEF,eAAO,MAAM,WAAW,aAAc,MAAM;;;;;CAO3C,CAAC;AAEF,eAAO,MAAM,YAAY,aACb,MAAM,WACP,MAAM,gCACe,aAAa,kBA2C5C,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,MAAM,SAczC,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,UAAU,EAGV,SAAS,EACV,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,UAAU,EAGV,SAAS,EACV,MAAM,cAAc,CAAC;AAItB,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,wBAAgB,IAAI,CAAC,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvD;AAED,wBAAgB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,oBAsM9D;;;;;;AAED,wBAIE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-bootsplash",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Display a bootsplash on your app starts. Hide it when you want.",
|
|
6
6
|
"author": "Mathieu Acthernoene <zoontek@gmail.com>",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"node-html-parser": "^6.1.13",
|
|
72
72
|
"picocolors": "^1.1.0",
|
|
73
73
|
"prettier": "^3.3.3",
|
|
74
|
+
"react-native-is-edge-to-edge": "^0.1.0",
|
|
74
75
|
"sharp": "^0.32.6",
|
|
75
76
|
"ts-dedent": "^2.2.0",
|
|
76
77
|
"xml-formatter": "^3.6.3"
|
|
@@ -79,16 +80,16 @@
|
|
|
79
80
|
"@babel/core": "^7.20.0",
|
|
80
81
|
"@babel/preset-env": "^7.20.0",
|
|
81
82
|
"@types/fs-extra": "^11.0.4",
|
|
82
|
-
"@types/node": "^20.16.
|
|
83
|
-
"@types/react": "^18.2.
|
|
83
|
+
"@types/node": "^20.16.11",
|
|
84
|
+
"@types/react": "^18.2.6",
|
|
84
85
|
"@types/semver": "^7.5.8",
|
|
85
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
86
|
-
"@typescript-eslint/parser": "^8.
|
|
86
|
+
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
|
87
|
+
"@typescript-eslint/parser": "^8.8.1",
|
|
87
88
|
"eslint": "^8.57.0",
|
|
88
89
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
89
90
|
"prettier-plugin-organize-imports": "^4.1.0",
|
|
90
91
|
"react": "18.3.1",
|
|
91
|
-
"react-native": "0.75.
|
|
92
|
+
"react-native": "0.75.4",
|
|
92
93
|
"react-native-builder-bob": "^0.30.2",
|
|
93
94
|
"semver": "^7.6.3",
|
|
94
95
|
"typescript": "^5.5.3"
|
package/src/generate.ts
CHANGED
|
@@ -439,8 +439,28 @@ const getAndroidOutputPath = ({
|
|
|
439
439
|
if (!platforms.includes("android")) {
|
|
440
440
|
return;
|
|
441
441
|
}
|
|
442
|
+
|
|
443
|
+
const withSizeChecks = (assetsOutputPath: string) => {
|
|
444
|
+
if (logoWidth > 288 || logoHeight > 288) {
|
|
445
|
+
return log.warn(
|
|
446
|
+
"Logo size exceeding 288x288dp will be cropped by Android. Skipping Android assets generation…",
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
if (brandWidth > 200 || brandHeight > 80) {
|
|
450
|
+
return log.warn(
|
|
451
|
+
"Brand size exceeding 200x80dp will be cropped by Android. Skipping Android assets generation…",
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if (logoWidth > 192 || logoHeight > 192) {
|
|
456
|
+
log.warn("Logo size exceeds 192x192dp. It might be cropped by Android.");
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
return assetsOutputPath;
|
|
460
|
+
};
|
|
461
|
+
|
|
442
462
|
if (isExpo) {
|
|
443
|
-
return path.resolve(assetsOutputPath, "android");
|
|
463
|
+
return withSizeChecks(path.resolve(assetsOutputPath, "android"));
|
|
444
464
|
}
|
|
445
465
|
if (android == null) {
|
|
446
466
|
return;
|
|
@@ -463,22 +483,7 @@ const getAndroidOutputPath = ({
|
|
|
463
483
|
);
|
|
464
484
|
}
|
|
465
485
|
|
|
466
|
-
|
|
467
|
-
return log.warn(
|
|
468
|
-
"Logo size exceeding 288x288dp will be cropped by Android. Skipping Android assets generation…",
|
|
469
|
-
);
|
|
470
|
-
}
|
|
471
|
-
if (brandWidth > 200 || brandHeight > 80) {
|
|
472
|
-
return log.warn(
|
|
473
|
-
"Brand size exceeding 200x80dp will be cropped by Android. Skipping Android assets generation…",
|
|
474
|
-
);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
if (logoWidth > 192 || logoHeight > 192) {
|
|
478
|
-
log.warn("Logo size exceeds 192x192dp. It might be cropped by Android.");
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
return androidOutputPath;
|
|
486
|
+
return withSizeChecks(androidOutputPath);
|
|
482
487
|
};
|
|
483
488
|
|
|
484
489
|
const getIOSOutputPath = ({
|
package/src/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
StyleSheet,
|
|
9
9
|
ViewStyle,
|
|
10
10
|
} from "react-native";
|
|
11
|
+
import { isEdgeToEdge } from "react-native-is-edge-to-edge";
|
|
11
12
|
import NativeModule from "./NativeRNBootSplash";
|
|
12
13
|
|
|
13
14
|
export type Config = {
|
|
@@ -91,8 +92,8 @@ export function useHideAnimation(config: UseHideAnimationConfig) {
|
|
|
91
92
|
|
|
92
93
|
animate,
|
|
93
94
|
|
|
94
|
-
statusBarTranslucent
|
|
95
|
-
navigationBarTranslucent
|
|
95
|
+
statusBarTranslucent,
|
|
96
|
+
navigationBarTranslucent,
|
|
96
97
|
} = config;
|
|
97
98
|
|
|
98
99
|
const skipLogo = logoSrc == null;
|
|
@@ -219,15 +220,33 @@ export function useHideAnimation(config: UseHideAnimationConfig) {
|
|
|
219
220
|
return { container, logo, brand };
|
|
220
221
|
}
|
|
221
222
|
|
|
223
|
+
if (__DEV__) {
|
|
224
|
+
const hasNavigationBarOption = navigationBarTranslucent != null;
|
|
225
|
+
const hasStatusBarOption = statusBarTranslucent != null;
|
|
226
|
+
const hasBothOptions = hasStatusBarOption && hasNavigationBarOption;
|
|
227
|
+
|
|
228
|
+
if (isEdgeToEdge() && (hasStatusBarOption || hasNavigationBarOption)) {
|
|
229
|
+
console.warn(
|
|
230
|
+
hasBothOptions
|
|
231
|
+
? "statusBarTranslucent and navigationBarTranslucent options are ignored when using react-native-edge-to-edge"
|
|
232
|
+
: `${hasStatusBarOption ? "status" : "navigation"}BarTranslucent option is ignored when using react-native-edge-to-edge`,
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
222
237
|
return {
|
|
223
238
|
container: {
|
|
224
239
|
...container,
|
|
225
240
|
style: {
|
|
226
241
|
...containerStyle,
|
|
227
|
-
marginTop:
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
242
|
+
marginTop:
|
|
243
|
+
isEdgeToEdge() || (statusBarTranslucent ?? false)
|
|
244
|
+
? undefined
|
|
245
|
+
: -statusBarHeight,
|
|
246
|
+
marginBottom:
|
|
247
|
+
isEdgeToEdge() || (navigationBarTranslucent ?? false)
|
|
248
|
+
? undefined
|
|
249
|
+
: -navigationBarHeight,
|
|
231
250
|
},
|
|
232
251
|
},
|
|
233
252
|
logo: {
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
package com.zoontek.rnbootsplash;
|
|
2
|
-
|
|
3
|
-
import android.app.Activity;
|
|
4
|
-
|
|
5
|
-
import androidx.annotation.NonNull;
|
|
6
|
-
import androidx.annotation.StyleRes;
|
|
7
|
-
|
|
8
|
-
public class RNBootSplash {
|
|
9
|
-
|
|
10
|
-
public static void init(@NonNull final Activity activity, @StyleRes int themeResId) {
|
|
11
|
-
RNBootSplashModuleImpl.init(activity, themeResId);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
package com.zoontek.rnbootsplash;
|
|
2
|
-
|
|
3
|
-
import android.app.Activity;
|
|
4
|
-
import android.app.Dialog;
|
|
5
|
-
import android.content.DialogInterface;
|
|
6
|
-
import android.os.Bundle;
|
|
7
|
-
import android.view.Window;
|
|
8
|
-
import android.view.WindowManager;
|
|
9
|
-
|
|
10
|
-
import androidx.annotation.NonNull;
|
|
11
|
-
import androidx.annotation.StyleRes;
|
|
12
|
-
|
|
13
|
-
public class RNBootSplashDialog extends Dialog {
|
|
14
|
-
|
|
15
|
-
private final boolean mFade;
|
|
16
|
-
|
|
17
|
-
public RNBootSplashDialog(@NonNull Activity activity, @StyleRes int themeResId, boolean fade) {
|
|
18
|
-
super(activity, themeResId);
|
|
19
|
-
|
|
20
|
-
mFade = fade;
|
|
21
|
-
|
|
22
|
-
setOwnerActivity(activity);
|
|
23
|
-
setCancelable(false);
|
|
24
|
-
setCanceledOnTouchOutside(false);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@Override
|
|
28
|
-
public void onBackPressed() {
|
|
29
|
-
Activity activity = getOwnerActivity();
|
|
30
|
-
|
|
31
|
-
if (activity != null) {
|
|
32
|
-
activity.moveTaskToBack(true);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@Override
|
|
37
|
-
public void dismiss() {
|
|
38
|
-
if (!isShowing()) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
super.dismiss();
|
|
44
|
-
} catch (Exception ignored) {}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public void dismiss(@NonNull final Runnable callback) {
|
|
48
|
-
if (!isShowing()) {
|
|
49
|
-
callback.run();
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
setOnDismissListener(new OnDismissListener() {
|
|
54
|
-
@Override
|
|
55
|
-
public void onDismiss(DialogInterface dialog) {
|
|
56
|
-
callback.run();
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
super.dismiss();
|
|
62
|
-
} catch (Exception ignored) {
|
|
63
|
-
callback.run();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@Override
|
|
68
|
-
public void show() {
|
|
69
|
-
if (isShowing()) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
super.show();
|
|
75
|
-
} catch (Exception ignored) {}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
public void show(@NonNull final Runnable callback) {
|
|
79
|
-
if (isShowing()) {
|
|
80
|
-
callback.run();
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
setOnShowListener(new DialogInterface.OnShowListener() {
|
|
85
|
-
@Override
|
|
86
|
-
public void onShow(DialogInterface dialog) {
|
|
87
|
-
callback.run();
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
super.show();
|
|
93
|
-
} catch (Exception ignored) {
|
|
94
|
-
callback.run();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
@Override
|
|
99
|
-
protected void onCreate(Bundle savedInstanceState) {
|
|
100
|
-
final Window window = getWindow();
|
|
101
|
-
|
|
102
|
-
if (window != null) {
|
|
103
|
-
window.setLayout(
|
|
104
|
-
WindowManager.LayoutParams.MATCH_PARENT,
|
|
105
|
-
WindowManager.LayoutParams.MATCH_PARENT
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
window.setWindowAnimations(mFade
|
|
109
|
-
? R.style.BootSplashFadeOutAnimation
|
|
110
|
-
: R.style.BootSplashNoAnimation);
|
|
111
|
-
|
|
112
|
-
if (RNBootSplashModuleImpl.isSamsungOneUI4()) {
|
|
113
|
-
window.setBackgroundDrawableResource(R.drawable.compat_splash_screen_oneui_4);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
super.onCreate(savedInstanceState);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
package com.zoontek.rnbootsplash;
|
|
2
|
-
|
|
3
|
-
import android.annotation.SuppressLint;
|
|
4
|
-
import android.app.Activity;
|
|
5
|
-
import android.content.res.Configuration;
|
|
6
|
-
import android.content.res.Resources;
|
|
7
|
-
import android.os.Build;
|
|
8
|
-
import android.util.TypedValue;
|
|
9
|
-
import android.view.View;
|
|
10
|
-
import android.view.ViewConfiguration;
|
|
11
|
-
import android.view.ViewTreeObserver;
|
|
12
|
-
import android.window.SplashScreen;
|
|
13
|
-
import android.window.SplashScreenView;
|
|
14
|
-
|
|
15
|
-
import androidx.annotation.NonNull;
|
|
16
|
-
import androidx.annotation.Nullable;
|
|
17
|
-
import androidx.annotation.StyleRes;
|
|
18
|
-
|
|
19
|
-
import com.facebook.common.logging.FLog;
|
|
20
|
-
import com.facebook.react.bridge.Promise;
|
|
21
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
22
|
-
import com.facebook.react.bridge.UiThreadUtil;
|
|
23
|
-
import com.facebook.react.common.ReactConstants;
|
|
24
|
-
import com.facebook.react.uimanager.PixelUtil;
|
|
25
|
-
|
|
26
|
-
import java.lang.reflect.Field;
|
|
27
|
-
import java.util.HashMap;
|
|
28
|
-
import java.util.Map;
|
|
29
|
-
import java.util.Timer;
|
|
30
|
-
import java.util.TimerTask;
|
|
31
|
-
|
|
32
|
-
public class RNBootSplashModuleImpl {
|
|
33
|
-
|
|
34
|
-
public static final String NAME = "RNBootSplash";
|
|
35
|
-
|
|
36
|
-
private static final RNBootSplashQueue<Promise> mPromiseQueue = new RNBootSplashQueue<>();
|
|
37
|
-
|
|
38
|
-
private enum Status {
|
|
39
|
-
HIDDEN,
|
|
40
|
-
HIDING,
|
|
41
|
-
INITIALIZING,
|
|
42
|
-
VISIBLE,
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@NonNull
|
|
46
|
-
private static Status mStatus = Status.HIDDEN;
|
|
47
|
-
|
|
48
|
-
@StyleRes
|
|
49
|
-
private static int mThemeResId = -1;
|
|
50
|
-
|
|
51
|
-
@Nullable
|
|
52
|
-
private static RNBootSplashDialog mInitialDialog = null;
|
|
53
|
-
@Nullable
|
|
54
|
-
private static RNBootSplashDialog mFadeOutDialog = null;
|
|
55
|
-
|
|
56
|
-
protected static void init(
|
|
57
|
-
@Nullable final Activity activity,
|
|
58
|
-
@StyleRes int themeResId
|
|
59
|
-
) {
|
|
60
|
-
if (mThemeResId != -1) {
|
|
61
|
-
FLog.w(ReactConstants.TAG, NAME + ": Ignored initialization, module is already initialized.");
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
mThemeResId = themeResId;
|
|
66
|
-
|
|
67
|
-
if (activity == null) {
|
|
68
|
-
FLog.w(ReactConstants.TAG, NAME + ": Ignored initialization, current activity is null.");
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Apply postBootSplashTheme
|
|
73
|
-
TypedValue typedValue = new TypedValue();
|
|
74
|
-
Resources.Theme currentTheme = activity.getTheme();
|
|
75
|
-
|
|
76
|
-
if (currentTheme
|
|
77
|
-
.resolveAttribute(R.attr.postBootSplashTheme, typedValue, true)) {
|
|
78
|
-
int finalThemeId = typedValue.resourceId;
|
|
79
|
-
|
|
80
|
-
if (finalThemeId != 0) {
|
|
81
|
-
activity.setTheme(finalThemeId);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Keep the splash screen on-screen until Dialog is shown
|
|
86
|
-
final View contentView = activity.findViewById(android.R.id.content);
|
|
87
|
-
mStatus = Status.INITIALIZING;
|
|
88
|
-
|
|
89
|
-
contentView
|
|
90
|
-
.getViewTreeObserver()
|
|
91
|
-
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
|
92
|
-
@Override
|
|
93
|
-
public boolean onPreDraw() {
|
|
94
|
-
if (mStatus == Status.INITIALIZING) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
contentView
|
|
99
|
-
.getViewTreeObserver()
|
|
100
|
-
.removeOnPreDrawListener(this);
|
|
101
|
-
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
107
|
-
// This is not called on Android 12 when activity is started using intent
|
|
108
|
-
// (Android studio / CLI / notification / widget…)
|
|
109
|
-
SplashScreen.OnExitAnimationListener listener = new SplashScreen.OnExitAnimationListener() {
|
|
110
|
-
@Override
|
|
111
|
-
public void onSplashScreenExit(@NonNull SplashScreenView view) {
|
|
112
|
-
view.remove(); // Remove it immediately, without animation
|
|
113
|
-
|
|
114
|
-
activity
|
|
115
|
-
.getSplashScreen()
|
|
116
|
-
.clearOnExitAnimationListener();
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
activity
|
|
121
|
-
.getSplashScreen()
|
|
122
|
-
.setOnExitAnimationListener(listener);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
mInitialDialog = new RNBootSplashDialog(activity, mThemeResId, false);
|
|
126
|
-
|
|
127
|
-
UiThreadUtil.runOnUiThread(new Runnable() {
|
|
128
|
-
@Override
|
|
129
|
-
public void run() {
|
|
130
|
-
mInitialDialog.show(new Runnable() {
|
|
131
|
-
@Override
|
|
132
|
-
public void run() {
|
|
133
|
-
mStatus = Status.VISIBLE;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private static void clearPromiseQueue() {
|
|
141
|
-
while (!mPromiseQueue.isEmpty()) {
|
|
142
|
-
Promise promise = mPromiseQueue.shift();
|
|
143
|
-
|
|
144
|
-
if (promise != null) {
|
|
145
|
-
promise.resolve(true);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private static @NonNull Runnable getHideSequenceRunnable() {
|
|
151
|
-
final Runnable fadeOutDialogDismiss = new Runnable() {
|
|
152
|
-
@Override
|
|
153
|
-
public void run() {
|
|
154
|
-
mFadeOutDialog = null;
|
|
155
|
-
mStatus = Status.HIDDEN;
|
|
156
|
-
clearPromiseQueue();
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
final Runnable initialDialogDismiss = new Runnable() {
|
|
161
|
-
@Override
|
|
162
|
-
public void run() {
|
|
163
|
-
mInitialDialog = null;
|
|
164
|
-
|
|
165
|
-
if (mFadeOutDialog != null) {
|
|
166
|
-
mFadeOutDialog.dismiss(fadeOutDialogDismiss);
|
|
167
|
-
} else {
|
|
168
|
-
fadeOutDialogDismiss.run();
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
return new Runnable() {
|
|
174
|
-
@Override
|
|
175
|
-
public void run() {
|
|
176
|
-
if (mInitialDialog != null) {
|
|
177
|
-
mInitialDialog.dismiss(initialDialogDismiss);
|
|
178
|
-
} else {
|
|
179
|
-
initialDialogDismiss.run();
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
private static void hideAndClearPromiseQueue(
|
|
186
|
-
final ReactApplicationContext reactContext,
|
|
187
|
-
final boolean fade
|
|
188
|
-
) {
|
|
189
|
-
UiThreadUtil.runOnUiThread(new Runnable() {
|
|
190
|
-
@Override
|
|
191
|
-
public void run() {
|
|
192
|
-
final Activity activity = reactContext.getCurrentActivity();
|
|
193
|
-
|
|
194
|
-
if (mStatus == Status.INITIALIZING
|
|
195
|
-
|| activity == null
|
|
196
|
-
|| activity.isFinishing()
|
|
197
|
-
|| activity.isDestroyed()
|
|
198
|
-
) {
|
|
199
|
-
final Timer timer = new Timer();
|
|
200
|
-
|
|
201
|
-
timer.schedule(new TimerTask() {
|
|
202
|
-
@Override
|
|
203
|
-
public void run() {
|
|
204
|
-
timer.cancel();
|
|
205
|
-
hideAndClearPromiseQueue(reactContext, fade);
|
|
206
|
-
}
|
|
207
|
-
}, 100);
|
|
208
|
-
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (mStatus == Status.HIDING) {
|
|
213
|
-
return; // wait until fade out end for clearPromiseQueue
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (mStatus == Status.HIDDEN) {
|
|
217
|
-
clearPromiseQueue();
|
|
218
|
-
return; // both initial and fade out dialog are hidden
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
mStatus = Status.HIDING;
|
|
222
|
-
|
|
223
|
-
if (fade) {
|
|
224
|
-
// Create a new Dialog instance with fade out animation
|
|
225
|
-
mFadeOutDialog = new RNBootSplashDialog(activity, mThemeResId, true);
|
|
226
|
-
mFadeOutDialog.show(getHideSequenceRunnable());
|
|
227
|
-
} else if (mInitialDialog != null) {
|
|
228
|
-
mInitialDialog.dismiss(getHideSequenceRunnable());
|
|
229
|
-
} else {
|
|
230
|
-
getHideSequenceRunnable().run();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// From https://stackoverflow.com/a/61062773
|
|
237
|
-
public static boolean isSamsungOneUI4() {
|
|
238
|
-
String name = "SEM_PLATFORM_INT";
|
|
239
|
-
|
|
240
|
-
try {
|
|
241
|
-
Field field = Build.VERSION.class.getDeclaredField(name);
|
|
242
|
-
int version = (field.getInt(null) - 90000) / 10000;
|
|
243
|
-
return version == 4;
|
|
244
|
-
} catch (Exception ignored) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
protected static void onHostDestroy() {
|
|
250
|
-
mStatus = Status.HIDDEN;
|
|
251
|
-
mThemeResId = -1;
|
|
252
|
-
clearPromiseQueue();
|
|
253
|
-
|
|
254
|
-
if (mInitialDialog != null) {
|
|
255
|
-
mInitialDialog.dismiss();
|
|
256
|
-
mInitialDialog = null;
|
|
257
|
-
}
|
|
258
|
-
if (mFadeOutDialog != null) {
|
|
259
|
-
mFadeOutDialog.dismiss();
|
|
260
|
-
mFadeOutDialog = null;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
public static Map<String, Object> getConstants(final ReactApplicationContext reactContext) {
|
|
265
|
-
final Resources resources = reactContext.getResources();
|
|
266
|
-
HashMap<String, Object> constants = new HashMap<>();
|
|
267
|
-
|
|
268
|
-
int uiMode =
|
|
269
|
-
reactContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
|
270
|
-
|
|
271
|
-
@SuppressLint({"InternalInsetResource", "DiscouragedApi"}) final int statusBarHeightResId =
|
|
272
|
-
resources.getIdentifier("status_bar_height", "dimen", "android");
|
|
273
|
-
|
|
274
|
-
@SuppressLint({"InternalInsetResource", "DiscouragedApi"}) final int navigationBarHeightResId =
|
|
275
|
-
resources.getIdentifier("navigation_bar_height", "dimen", "android");
|
|
276
|
-
|
|
277
|
-
float statusBarHeight = statusBarHeightResId > 0
|
|
278
|
-
? PixelUtil.toDIPFromPixel(resources.getDimensionPixelSize(statusBarHeightResId))
|
|
279
|
-
: 0;
|
|
280
|
-
|
|
281
|
-
float navigationBarHeight = navigationBarHeightResId > 0 &&
|
|
282
|
-
!ViewConfiguration.get(reactContext).hasPermanentMenuKey()
|
|
283
|
-
? PixelUtil.toDIPFromPixel(resources.getDimensionPixelSize(navigationBarHeightResId))
|
|
284
|
-
: 0;
|
|
285
|
-
|
|
286
|
-
constants.put("darkModeEnabled", uiMode == Configuration.UI_MODE_NIGHT_YES);
|
|
287
|
-
constants.put("logoSizeRatio", isSamsungOneUI4() ? 0.5 : 1);
|
|
288
|
-
constants.put("navigationBarHeight", navigationBarHeight);
|
|
289
|
-
constants.put("statusBarHeight", statusBarHeight);
|
|
290
|
-
|
|
291
|
-
return constants;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
public static void hide(
|
|
295
|
-
final ReactApplicationContext reactContext,
|
|
296
|
-
final boolean fade,
|
|
297
|
-
final Promise promise
|
|
298
|
-
) {
|
|
299
|
-
mPromiseQueue.push(promise);
|
|
300
|
-
hideAndClearPromiseQueue(reactContext, fade);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
public static void isVisible(final Promise promise) {
|
|
304
|
-
promise.resolve(mStatus != Status.HIDDEN);
|
|
305
|
-
}
|
|
306
|
-
}
|