mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-23 07:15:35 +01:00
Merge branch 'master' into langtsx
This commit is contained in:
commit
fdaa5cda39
44 changed files with 396 additions and 344 deletions
2
App.js
2
App.js
|
@ -11,7 +11,6 @@ import {
|
|||
UIManager,
|
||||
useColorScheme,
|
||||
View,
|
||||
StatusBar,
|
||||
LogBox,
|
||||
} from 'react-native';
|
||||
import { NavigationContainer, CommonActions } from '@react-navigation/native';
|
||||
|
@ -384,7 +383,6 @@ const App = () => {
|
|||
return (
|
||||
<SafeAreaProvider>
|
||||
<View style={styles.root}>
|
||||
<StatusBar barStyle={colorScheme === 'dark' ? 'light-content' : 'dark-content'} backgroundColor="transparent" translucent />
|
||||
<NavigationContainer ref={navigationRef} theme={colorScheme === 'dark' ? BlueDarkTheme : BlueDefaultTheme}>
|
||||
<InitRoot />
|
||||
<Notifications onProcessNotifications={processPushNotifications} />
|
||||
|
|
|
@ -316,14 +316,16 @@ const AztecoRedeemRoot = () => {
|
|||
|
||||
const ScanQRCodeStack = createNativeStackNavigator();
|
||||
const ScanQRCodeRoot = () => (
|
||||
<ScanQRCodeStack.Navigator screenOptions={{ headerShown: false, stackPresentation: isDesktop ? 'containedModal' : 'fullScreenModal' }}>
|
||||
<ScanQRCodeStack.Navigator
|
||||
screenOptions={{ statusBarHidden: true, headerShown: false, stackPresentation: isDesktop ? 'containedModal' : 'fullScreenModal' }}
|
||||
>
|
||||
<ScanQRCodeStack.Screen name="ScanQRCode" component={ScanQRCode} />
|
||||
</ScanQRCodeStack.Navigator>
|
||||
);
|
||||
|
||||
const UnlockWithScreenStack = createNativeStackNavigator();
|
||||
const UnlockWithScreenRoot = () => (
|
||||
<UnlockWithScreenStack.Navigator name="UnlockWithScreenRoot" screenOptions={{ headerShown: false }}>
|
||||
<UnlockWithScreenStack.Navigator name="UnlockWithScreenRoot" screenOptions={{ headerShown: false, statusBarStyle: 'auto' }}>
|
||||
<UnlockWithScreenStack.Screen name="UnlockWithScreen" component={UnlockWith} initialParams={{ unlockOnComponentMount: true }} />
|
||||
</UnlockWithScreenStack.Navigator>
|
||||
);
|
||||
|
@ -376,7 +378,11 @@ const WalletXpubStackRoot = () => {
|
|||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<WalletXpubStack.Navigator name="WalletXpubRoot" screenOptions={{ headerHideShadow: true }} initialRouteName="WalletXpub">
|
||||
<WalletXpubStack.Navigator
|
||||
name="WalletXpubRoot"
|
||||
screenOptions={{ headerHideShadow: true, statusBarStyle: 'light' }}
|
||||
initialRouteName="WalletXpub"
|
||||
>
|
||||
<WalletXpubStack.Screen name="WalletXpub" component={WalletXpub} options={WalletXpub.navigationOptions(theme)} />
|
||||
</WalletXpubStack.Navigator>
|
||||
);
|
||||
|
@ -387,7 +393,11 @@ const SignVerifyStackRoot = () => {
|
|||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<SignVerifyStack.Navigator name="SignVerifyRoot" screenOptions={{ headerHideShadow: true }} initialRouteName="SignVerify">
|
||||
<SignVerifyStack.Navigator
|
||||
name="SignVerifyRoot"
|
||||
screenOptions={{ headerHideShadow: true, statusBarStyle: 'light' }}
|
||||
initialRouteName="SignVerify"
|
||||
>
|
||||
<SignVerifyStack.Screen name="SignVerify" component={SignVerify} options={SignVerify.navigationOptions(theme)} />
|
||||
</SignVerifyStack.Navigator>
|
||||
);
|
||||
|
@ -398,7 +408,11 @@ const WalletExportStackRoot = () => {
|
|||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<WalletExportStack.Navigator name="WalletExportRoot" screenOptions={{ headerHideShadow: true }} initialRouteName="WalletExport">
|
||||
<WalletExportStack.Navigator
|
||||
name="WalletExportRoot"
|
||||
screenOptions={{ headerHideShadow: true, statusBarStyle: 'light' }}
|
||||
initialRouteName="WalletExport"
|
||||
>
|
||||
<WalletExportStack.Screen name="WalletExport" component={WalletExport} options={WalletExport.navigationOptions(theme)} />
|
||||
</WalletExportStack.Navigator>
|
||||
);
|
||||
|
@ -440,7 +454,7 @@ const ViewEditMultisigCosignersRoot = () => {
|
|||
<ViewEditMultisigCosignersStack.Navigator
|
||||
name="ViewEditMultisigCosignersRoot"
|
||||
initialRouteName="ViewEditMultisigCosigners"
|
||||
screenOptions={{ headerHideShadow: true }}
|
||||
screenOptions={{ headerHideShadow: true, statusBarStyle: 'light' }}
|
||||
>
|
||||
<ViewEditMultisigCosignersStack.Screen
|
||||
name="ViewEditMultisigCosigners"
|
||||
|
@ -459,7 +473,7 @@ const ExportMultisigCoordinationSetupRoot = () => {
|
|||
<ExportMultisigCoordinationSetupStack.Navigator
|
||||
name="ExportMultisigCoordinationSetupRoot"
|
||||
initialRouteName="ExportMultisigCoordinationSetup"
|
||||
screenOptions={{ headerHideShadow: true }}
|
||||
screenOptions={{ headerHideShadow: true, statusBarStyle: 'light' }}
|
||||
>
|
||||
<ExportMultisigCoordinationSetupStack.Screen
|
||||
name="ExportMultisigCoordinationSetup"
|
||||
|
@ -486,9 +500,10 @@ const PaymentCodeStackRoot = () => {
|
|||
|
||||
const RootStack = createNativeStackNavigator();
|
||||
const NavigationDefaultOptions = { headerShown: false, stackPresentation: isDesktop ? 'containedModal' : 'modal' };
|
||||
const StatusBarLightOptions = { statusBarStyle: 'light' };
|
||||
const Navigation = () => {
|
||||
return (
|
||||
<RootStack.Navigator initialRouteName="UnlockWithScreenRoot" screenOptions={{ headerHideShadow: true }}>
|
||||
<RootStack.Navigator initialRouteName="UnlockWithScreenRoot" screenOptions={{ headerHideShadow: true, statusBarStyle: 'auto' }}>
|
||||
{/* stacks */}
|
||||
<RootStack.Screen name="WalletsRoot" component={WalletsRoot} options={{ headerShown: false, translucent: false }} />
|
||||
<RootStack.Screen name="AddWalletRoot" component={AddWalletRoot} options={NavigationDefaultOptions} />
|
||||
|
@ -497,15 +512,31 @@ const Navigation = () => {
|
|||
<RootStack.Screen name="ScanLndInvoiceRoot" component={ScanLndInvoiceRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen name="AztecoRedeemRoot" component={AztecoRedeemRoot} options={NavigationDefaultOptions} />
|
||||
{/* screens */}
|
||||
<RootStack.Screen name="WalletExportRoot" component={WalletExportStackRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen
|
||||
name="WalletExportRoot"
|
||||
component={WalletExportStackRoot}
|
||||
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions }}
|
||||
/>
|
||||
<RootStack.Screen
|
||||
name="ExportMultisigCoordinationSetupRoot"
|
||||
component={ExportMultisigCoordinationSetupRoot}
|
||||
options={NavigationDefaultOptions}
|
||||
/>
|
||||
<RootStack.Screen name="ViewEditMultisigCosignersRoot" component={ViewEditMultisigCosignersRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen name="WalletXpubRoot" component={WalletXpubStackRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen name="SignVerifyRoot" component={SignVerifyStackRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen
|
||||
name="ViewEditMultisigCosignersRoot"
|
||||
component={ViewEditMultisigCosignersRoot}
|
||||
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions }}
|
||||
/>
|
||||
<RootStack.Screen
|
||||
name="WalletXpubRoot"
|
||||
component={WalletXpubStackRoot}
|
||||
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions }}
|
||||
/>
|
||||
<RootStack.Screen
|
||||
name="SignVerifyRoot"
|
||||
component={SignVerifyStackRoot}
|
||||
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions }}
|
||||
/>
|
||||
<RootStack.Screen name="SelectWallet" component={SelectWallet} />
|
||||
<RootStack.Screen name="ReceiveDetailsRoot" component={ReceiveDetailsStackRoot} options={NavigationDefaultOptions} />
|
||||
<RootStack.Screen name="LappBrowserRoot" component={LappBrowserStackRoot} options={NavigationDefaultOptions} />
|
||||
|
@ -517,6 +548,7 @@ const Navigation = () => {
|
|||
options={{
|
||||
headerShown: false,
|
||||
stackPresentation: isDesktop ? 'containedModal' : 'fullScreenModal',
|
||||
statusBarHidden: true,
|
||||
}}
|
||||
/>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { View, Image, TouchableOpacity, StyleSheet, StatusBar, ActivityIndicator, useColorScheme, LayoutAnimation } from 'react-native';
|
||||
import { View, Image, TouchableOpacity, StyleSheet, ActivityIndicator, useColorScheme, LayoutAnimation } from 'react-native';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import Biometric from './class/biometrics';
|
||||
import LottieView from 'lottie-react-native';
|
||||
|
@ -129,7 +129,6 @@ const UnlockWith = () => {
|
|||
|
||||
return (
|
||||
<SafeAreaView style={styles.root}>
|
||||
<StatusBar barStyle="default" />
|
||||
<View style={styles.container}>
|
||||
<LottieView source={require('./img/bluewalletsplash.json')} autoPlay loop={false} onAnimationFinish={onAnimationFinish} />
|
||||
<View style={styles.biometric}>{animationDidFinish && <View style={styles.biometricRow}>{renderUnlockOptions()}</View>}</View>
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
|
||||
<application
|
||||
android:name=".MainApplication"
|
||||
android:label="@string/app_name"
|
||||
|
|
|
@ -5,14 +5,16 @@ const BlueApp = require('../BlueApp');
|
|||
let userHasOptedOut = false;
|
||||
|
||||
if (process.env.NODE_ENV !== 'development') {
|
||||
Bugsnag.start({
|
||||
collectUserIp: false,
|
||||
user: {
|
||||
id: getUniqueId(),
|
||||
},
|
||||
onError: function (event) {
|
||||
return !userHasOptedOut;
|
||||
},
|
||||
getUniqueId().then(uniqueID => {
|
||||
Bugsnag.start({
|
||||
collectUserIp: false,
|
||||
user: {
|
||||
id: uniqueID,
|
||||
},
|
||||
onError: function (event) {
|
||||
return !userHasOptedOut;
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import Frisbee from 'frisbee';
|
|||
import { getApplicationName, getVersion, getSystemName, getSystemVersion, hasGmsSync, hasHmsSync } from 'react-native-device-info';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import loc from '../loc';
|
||||
import { requestNotifications } from 'react-native-permissions';
|
||||
|
||||
const PushNotification = require('react-native-push-notification');
|
||||
const constants = require('./constants');
|
||||
|
@ -38,75 +39,80 @@ function Notifications(props) {
|
|||
*/
|
||||
const configureNotifications = async function () {
|
||||
return new Promise(function (resolve) {
|
||||
PushNotification.configure({
|
||||
// (optional) Called when Token is generated (iOS and Android)
|
||||
onRegister: async function (token) {
|
||||
console.log('TOKEN:', token);
|
||||
alreadyConfigured = true;
|
||||
await _setPushToken(token);
|
||||
resolve(true);
|
||||
},
|
||||
requestNotifications(['alert', 'sound', 'badge']).then(({ status, _ }) => {
|
||||
if (status === 'granted') {
|
||||
PushNotification.configure({
|
||||
// (optional) Called when Token is generated (iOS and Android)
|
||||
onRegister: async function (token) {
|
||||
console.log('TOKEN:', token);
|
||||
alreadyConfigured = true;
|
||||
await _setPushToken(token);
|
||||
resolve(true);
|
||||
},
|
||||
|
||||
// (required) Called when a remote is received or opened, or local notification is opened
|
||||
onNotification: async function (notification) {
|
||||
// since we do not know whether we:
|
||||
// 1) received notification while app is in background (and storage is not decrypted so wallets are not loaded)
|
||||
// 2) opening this notification right now but storage is still unencrypted
|
||||
// 3) any of the above but the storage is decrypted, and app wallets are loaded
|
||||
//
|
||||
// ...we save notification in internal notifications queue thats gona be processed later (on unsuspend with decrypted storage)
|
||||
// (required) Called when a remote is received or opened, or local notification is opened
|
||||
onNotification: async function (notification) {
|
||||
// since we do not know whether we:
|
||||
// 1) received notification while app is in background (and storage is not decrypted so wallets are not loaded)
|
||||
// 2) opening this notification right now but storage is still unencrypted
|
||||
// 3) any of the above but the storage is decrypted, and app wallets are loaded
|
||||
//
|
||||
// ...we save notification in internal notifications queue thats gona be processed later (on unsuspend with decrypted storage)
|
||||
|
||||
const payload = Object.assign({}, notification, notification.data);
|
||||
if (notification.data && notification.data.data) Object.assign(payload, notification.data.data);
|
||||
delete payload.data;
|
||||
// ^^^ weird, but sometimes payload data is not in `data` but in root level
|
||||
console.log('got push notification', payload);
|
||||
const payload = Object.assign({}, notification, notification.data);
|
||||
if (notification.data && notification.data.data) Object.assign(payload, notification.data.data);
|
||||
delete payload.data;
|
||||
// ^^^ weird, but sometimes payload data is not in `data` but in root level
|
||||
console.log('got push notification', payload);
|
||||
|
||||
await Notifications.addNotification(payload);
|
||||
await Notifications.addNotification(payload);
|
||||
|
||||
// (required) Called when a remote is received or opened, or local notification is opened
|
||||
notification.finish(PushNotificationIOS.FetchResult.NoData);
|
||||
// (required) Called when a remote is received or opened, or local notification is opened
|
||||
notification.finish(PushNotificationIOS.FetchResult.NoData);
|
||||
|
||||
// if user is staring at the app when he receives the notification we process it instantly
|
||||
// so app refetches related wallet
|
||||
if (payload.foreground) props.onProcessNotifications();
|
||||
},
|
||||
// if user is staring at the app when he receives the notification we process it instantly
|
||||
// so app refetches related wallet
|
||||
if (payload.foreground) props.onProcessNotifications();
|
||||
},
|
||||
|
||||
// (optional) Called when Registered Action is pressed and invokeApp is false, if true onNotification will be called (Android)
|
||||
onAction: function (notification) {
|
||||
console.log('ACTION:', notification.action);
|
||||
console.log('NOTIFICATION:', notification);
|
||||
// (optional) Called when Registered Action is pressed and invokeApp is false, if true onNotification will be called (Android)
|
||||
onAction: function (notification) {
|
||||
console.log('ACTION:', notification.action);
|
||||
console.log('NOTIFICATION:', notification);
|
||||
|
||||
// process the action
|
||||
},
|
||||
// process the action
|
||||
},
|
||||
|
||||
// (optional) Called when the user fails to register for remote notifications. Typically occurs when APNS is having issues, or the device is a simulator. (iOS)
|
||||
onRegistrationError: function (err) {
|
||||
console.error(err.message, err);
|
||||
resolve(false);
|
||||
},
|
||||
// (optional) Called when the user fails to register for remote notifications. Typically occurs when APNS is having issues, or the device is a simulator. (iOS)
|
||||
onRegistrationError: function (err) {
|
||||
console.error(err.message, err);
|
||||
resolve(false);
|
||||
},
|
||||
|
||||
// IOS ONLY (optional): default: all - Permissions to register.
|
||||
permissions: {
|
||||
alert: true,
|
||||
badge: true,
|
||||
sound: true,
|
||||
},
|
||||
// IOS ONLY (optional): default: all - Permissions to register.
|
||||
permissions: {
|
||||
alert: true,
|
||||
badge: true,
|
||||
sound: true,
|
||||
},
|
||||
|
||||
// Should the initial notification be popped automatically
|
||||
// default: true
|
||||
popInitialNotification: true,
|
||||
// Should the initial notification be popped automatically
|
||||
// default: true
|
||||
popInitialNotification: true,
|
||||
|
||||
/**
|
||||
* (optional) default: true
|
||||
* - Specified if permissions (ios) and token (android and ios) will requested or not,
|
||||
* - if not, you must call PushNotificationsHandler.requestPermissions() later
|
||||
* - if you are not using remote notification or do not have Firebase installed, use this:
|
||||
* requestPermissions: Platform.OS === 'ios'
|
||||
*/
|
||||
requestPermissions: true,
|
||||
/**
|
||||
* (optional) default: true
|
||||
* - Specified if permissions (ios) and token (android and ios) will requested or not,
|
||||
* - if not, you must call PushNotificationsHandler.requestPermissions() later
|
||||
* - if you are not using remote notification or do not have Firebase installed, use this:
|
||||
* requestPermissions: Platform.OS === 'ios'
|
||||
*/
|
||||
requestPermissions: true,
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
// …
|
||||
};
|
||||
|
||||
Notifications.cleanUserOptOutFlag = async function () {
|
||||
|
@ -227,8 +233,7 @@ function Notifications(props) {
|
|||
if (!pushToken || !pushToken.token || !pushToken.os) return;
|
||||
|
||||
const api = new Frisbee({ baseURI });
|
||||
|
||||
return await api.post(
|
||||
const postCall = await api.post(
|
||||
'/unsubscribe',
|
||||
Object.assign({}, _getHeaders(), {
|
||||
body: {
|
||||
|
@ -240,6 +245,8 @@ function Notifications(props) {
|
|||
},
|
||||
}),
|
||||
);
|
||||
Notifications.abandonPermissions();
|
||||
return postCall;
|
||||
};
|
||||
|
||||
Notifications.isNotificationsEnabled = async function () {
|
||||
|
|
|
@ -1000,6 +1000,9 @@
|
|||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Brands.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Regular.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Solid.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
|
||||
|
@ -1020,6 +1023,9 @@
|
|||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome6_Brands.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome6_Regular.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome6_Solid.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<key>WidgetsExtension.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>144</integer>
|
||||
<integer>99</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#import <RNScreens/UIViewController+RNScreens.h>
|
||||
#import <Bugsnag/Bugsnag.h>
|
||||
#import "AppDelegate.h"
|
||||
|
||||
#import <React/RCTLinkingManager.h>
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTI18nUtil.h>
|
||||
|
|
|
@ -57,17 +57,17 @@
|
|||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>JSON File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.json</string>
|
||||
</array>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
</dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>JSON File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.json</string>
|
||||
</array>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
|
@ -219,7 +219,7 @@
|
|||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
|
@ -16,7 +16,7 @@ require_relative '../node_modules/@react-native-community/cli-platform-ios/nativ
|
|||
workspace 'BlueWallet'
|
||||
platform :ios, '13.0'
|
||||
prepare_react_native_project!
|
||||
setup_permissions(['Camera'])
|
||||
setup_permissions(['Camera', 'Notifications'])
|
||||
# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
|
||||
# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
|
||||
#
|
||||
|
|
|
@ -302,7 +302,7 @@ PODS:
|
|||
- React-Core
|
||||
- react-native-tor (0.1.8):
|
||||
- React
|
||||
- react-native-webview (12.4.0):
|
||||
- react-native-webview (13.6.2):
|
||||
- React-Core
|
||||
- react-native-widget-center (0.0.9):
|
||||
- React
|
||||
|
@ -404,7 +404,7 @@ PODS:
|
|||
- React-Core
|
||||
- RNDefaultPreference (1.4.4):
|
||||
- React-Core
|
||||
- RNDeviceInfo (8.7.1):
|
||||
- RNDeviceInfo (10.11.0):
|
||||
- React-Core
|
||||
- RNFS (2.20.0):
|
||||
- React-Core
|
||||
|
@ -461,7 +461,7 @@ PODS:
|
|||
- React-Core
|
||||
- RNSVG (13.14.0):
|
||||
- React-Core
|
||||
- RNVectorIcons (9.2.0):
|
||||
- RNVectorIcons (10.0.0):
|
||||
- React-Core
|
||||
- RNWatch (1.1.0):
|
||||
- React
|
||||
|
@ -752,7 +752,7 @@ SPEC CHECKSUMS:
|
|||
react-native-secure-key-store: 910e6df6bc33cb790aba6ee24bc7818df1fe5898
|
||||
react-native-tcp-socket: c1b7297619616b4c9caae6889bcb0aba78086989
|
||||
react-native-tor: 3b14e9160b2eb7fa3f310921b2dee71a5171e5b7
|
||||
react-native-webview: 65f1143983cfeaedf02fd25b2621d3f4a37075de
|
||||
react-native-webview: 8fc09f66a1a5b16bbe37c3878fda27d5982bb776
|
||||
react-native-widget-center: 12dfba20a4fa995850b52cf0afecf734397f4b9c
|
||||
React-perflogger: 4987ad83731c23d11813c84263963b0d3028c966
|
||||
React-RCTActionSheet: 5ad952b2a9740d87a5bd77280c4bc23f6f89ea0c
|
||||
|
@ -774,13 +774,13 @@ SPEC CHECKSUMS:
|
|||
RNCClipboard: d77213bfa269013bf4b857b7a9ca37ee062d8ef1
|
||||
RNCPushNotificationIOS: 64218f3c776c03d7408284a819b2abfda1834bc8
|
||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||
RNDeviceInfo: aad3c663b25752a52bf8fce93f2354001dd185aa
|
||||
RNDeviceInfo: bf8a32acbcb875f568217285d1793b0e8588c974
|
||||
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
|
||||
RNGestureHandler: fa40ab6b6cafaa7609294d31f8e8fbbd0cce8ea6
|
||||
RNHandoff: d3b0754cca3a6bcd9b25f544f733f7f033ccf5fa
|
||||
RNKeychain: a65256b6ca6ba6976132cc4124b238a5b13b3d9c
|
||||
RNLocalize: dbea38dcb344bf80ff18a1757b1becf11f70cae4
|
||||
RNPermissions: eae8b97d8ab0587f082966ee608f47c97b2a349b
|
||||
RNPermissions: e9e703e08dfe50cf4d2ca45852eb45c4ac98f7b7
|
||||
RNPrivacySnapshot: 71919dde3c6a29dd332115409c2aec564afee8f4
|
||||
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
|
||||
RNRate: ef3bcff84f39bb1d1e41c5593d3eea4aab2bd73a
|
||||
|
@ -789,10 +789,10 @@ SPEC CHECKSUMS:
|
|||
RNScreens: 218801c16a2782546d30bd2026bb625c0302d70f
|
||||
RNShare: 32e97adc8d8c97d4a26bcdd3c45516882184f8b6
|
||||
RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396
|
||||
RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8
|
||||
RNVectorIcons: 8b5bb0fa61d54cd2020af4f24a51841ce365c7e9
|
||||
RNWatch: fd30ca40a5b5ef58dcbc195638e68219bc455236
|
||||
Yoga: e71803b4c1fff832ccf9b92541e00f9b873119b9
|
||||
|
||||
PODFILE CHECKSUM: 23bb5c319ccbedd7e109c44fe4273afce6efb48a
|
||||
PODFILE CHECKSUM: 27db07925dc3a89e9ecced7e377a50dba9deb58a
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
COCOAPODS: 1.13.0
|
||||
|
|
258
package-lock.json
generated
258
package-lock.json
generated
|
@ -63,7 +63,7 @@
|
|||
"react-native-camera-kit": "13.0.0",
|
||||
"react-native-crypto": "2.2.0",
|
||||
"react-native-default-preference": "1.4.4",
|
||||
"react-native-device-info": "8.7.1",
|
||||
"react-native-device-info": "10.11.0",
|
||||
"react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#857655cdddf17751c0fae1286a9121fda2a6d568",
|
||||
"react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#ebfddc4",
|
||||
"react-native-elements": "3.4.3",
|
||||
|
@ -94,13 +94,13 @@
|
|||
"react-native-safe-area-context": "3.4.1",
|
||||
"react-native-screens": "3.20.0",
|
||||
"react-native-secure-key-store": "https://github.com/BlueWallet/react-native-secure-key-store#2076b48",
|
||||
"react-native-share": "^9.4.1",
|
||||
"react-native-share": "9.4.1",
|
||||
"react-native-svg": "13.14.0",
|
||||
"react-native-tcp-socket": "5.6.2",
|
||||
"react-native-tor": "0.1.8",
|
||||
"react-native-vector-icons": "9.2.0",
|
||||
"react-native-vector-icons": "10.0.0",
|
||||
"react-native-watch-connectivity": "1.1.0",
|
||||
"react-native-webview": "12.4.0",
|
||||
"react-native-webview": "13.6.2",
|
||||
"react-native-widget-center": "https://github.com/BlueWallet/react-native-widget-center#a128c38",
|
||||
"readable-stream": "3.6.2",
|
||||
"realm": "12.2.1",
|
||||
|
@ -179,10 +179,12 @@
|
|||
"integrity": "sha512-7UDWIIF9hIeJqfKXkNIzkVandlwLf1FWTSdrb9iXvOP8oF544JRXQjCbiTmCv2c9n44n/FIWtehhBfNuAx2CZA=="
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
|
||||
"version": "7.22.13",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
|
||||
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
|
||||
"dependencies": {
|
||||
"@babel/highlight": "^7.18.6"
|
||||
"@babel/highlight": "^7.22.13",
|
||||
"chalk": "^2.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -241,10 +243,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.21.1",
|
||||
"integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
|
||||
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.21.0",
|
||||
"@babel/types": "^7.23.0",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"@jridgewell/trace-mapping": "^0.3.17",
|
||||
"jsesc": "^2.5.1"
|
||||
|
@ -353,8 +356,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-environment-visitor": {
|
||||
"version": "7.18.9",
|
||||
"integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
|
||||
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
|
@ -370,21 +374,23 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-function-name": {
|
||||
"version": "7.21.0",
|
||||
"integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
|
||||
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.20.7",
|
||||
"@babel/types": "^7.21.0"
|
||||
"@babel/template": "^7.22.15",
|
||||
"@babel/types": "^7.23.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-hoist-variables": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
|
||||
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.18.6"
|
||||
"@babel/types": "^7.22.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -497,25 +503,28 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-split-export-declaration": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
|
||||
"version": "7.22.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
|
||||
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.18.6"
|
||||
"@babel/types": "^7.22.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.19.4",
|
||||
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.19.1",
|
||||
"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
|
@ -554,11 +563,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/highlight": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
|
||||
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.18.6",
|
||||
"chalk": "^2.0.0",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"chalk": "^2.4.2",
|
||||
"js-tokens": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -566,8 +576,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
|
||||
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
|
@ -1818,29 +1829,31 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.20.7",
|
||||
"integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
|
||||
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/parser": "^7.22.15",
|
||||
"@babel/types": "^7.22.15"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==",
|
||||
"version": "7.23.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
|
||||
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.21.1",
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-function-name": "^7.21.0",
|
||||
"@babel/helper-hoist-variables": "^7.18.6",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/parser": "^7.21.2",
|
||||
"@babel/types": "^7.21.2",
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/generator": "^7.23.0",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-hoist-variables": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/parser": "^7.23.0",
|
||||
"@babel/types": "^7.23.0",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
|
@ -1849,11 +1862,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.19.4",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
"@babel/helper-string-parser": "^7.22.5",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -18128,8 +18142,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/react-native-device-info": {
|
||||
"version": "8.7.1",
|
||||
"integrity": "sha512-cVMZztFa2Qn6qpQa601W61CtUwZQ1KXfqCOeltejAWEXmgIWivC692WGSdtGudj4upSi1UgMSaGcvKjfcpdGjg==",
|
||||
"version": "10.11.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-10.11.0.tgz",
|
||||
"integrity": "sha512-qRzhuYOm5ZXQi5dhfJFjDq157oipxcEW/fo0QyMm5+TI6V6/+P/tju+Hif6z0rpLCf7MV7iDVRv2Kqha4D/yvQ==",
|
||||
"peerDependencies": {
|
||||
"react-native": "*"
|
||||
}
|
||||
|
@ -18570,14 +18585,17 @@
|
|||
}
|
||||
},
|
||||
"node_modules/react-native-vector-icons": {
|
||||
"version": "9.2.0",
|
||||
"integrity": "sha512-wKYLaFuQST/chH3AJRjmOLoLy3JEs1JR6zMNgTaemFpNoXs0ztRnTxcxFD9xhX7cJe1/zoN5BpQYe7kL0m5yyA==",
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.0.0.tgz",
|
||||
"integrity": "sha512-efMOVbZIebY8RszZPzPBoXi9pvD/NFYmjIDYxRoc9LYSzV8rMJtT8FfcO2hPu85Rn2x9xktha0+qn0B7EqMAcQ==",
|
||||
"dependencies": {
|
||||
"prop-types": "^15.7.2",
|
||||
"yargs": "^16.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"fa-upgrade.sh": "bin/fa-upgrade.sh",
|
||||
"fa5-upgrade": "bin/fa5-upgrade.sh",
|
||||
"fa6-upgrade": "bin/fa6-upgrade.sh",
|
||||
"generate-icon": "bin/generate-icon.js"
|
||||
}
|
||||
},
|
||||
|
@ -18593,9 +18611,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/react-native-webview": {
|
||||
"version": "12.4.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-12.4.0.tgz",
|
||||
"integrity": "sha512-wYzTfNADidmqv6bY+x6NUfX8+uBR9mmF1CO1NOvY4oD2vv+D4rA0XwcwAe2D7RevXUy3fmuTT93kFQcgo8fEhg==",
|
||||
"version": "13.6.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.2.tgz",
|
||||
"integrity": "sha512-QzhQ5JCU+Nf2W285DtvCZOVQy/MkJXMwNDYPZvOWQbAOgxJMSSO+BtqXTMA1UPugDsko6PxJ0TxSlUwIwJijDg==",
|
||||
"dependencies": {
|
||||
"escape-string-regexp": "2.0.0",
|
||||
"invariant": "2.2.4"
|
||||
|
@ -20988,10 +21006,12 @@
|
|||
"integrity": "sha512-7UDWIIF9hIeJqfKXkNIzkVandlwLf1FWTSdrb9iXvOP8oF544JRXQjCbiTmCv2c9n44n/FIWtehhBfNuAx2CZA=="
|
||||
},
|
||||
"@babel/code-frame": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
|
||||
"version": "7.22.13",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
|
||||
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.18.6"
|
||||
"@babel/highlight": "^7.22.13",
|
||||
"chalk": "^2.4.2"
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
|
@ -21030,10 +21050,11 @@
|
|||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.21.1",
|
||||
"integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
|
||||
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.21.0",
|
||||
"@babel/types": "^7.23.0",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"@jridgewell/trace-mapping": "^0.3.17",
|
||||
"jsesc": "^2.5.1"
|
||||
|
@ -21111,8 +21132,9 @@
|
|||
}
|
||||
},
|
||||
"@babel/helper-environment-visitor": {
|
||||
"version": "7.18.9",
|
||||
"integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
|
||||
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
|
||||
},
|
||||
"@babel/helper-explode-assignable-expression": {
|
||||
"version": "7.18.6",
|
||||
|
@ -21122,18 +21144,20 @@
|
|||
}
|
||||
},
|
||||
"@babel/helper-function-name": {
|
||||
"version": "7.21.0",
|
||||
"integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
|
||||
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.20.7",
|
||||
"@babel/types": "^7.21.0"
|
||||
"@babel/template": "^7.22.15",
|
||||
"@babel/types": "^7.23.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-hoist-variables": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
|
||||
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.18.6"
|
||||
"@babel/types": "^7.22.5"
|
||||
}
|
||||
},
|
||||
"@babel/helper-member-expression-to-functions": {
|
||||
|
@ -21213,19 +21237,22 @@
|
|||
}
|
||||
},
|
||||
"@babel/helper-split-export-declaration": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
|
||||
"version": "7.22.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
|
||||
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.18.6"
|
||||
"@babel/types": "^7.22.5"
|
||||
}
|
||||
},
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.19.4",
|
||||
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
|
||||
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.19.1",
|
||||
"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
|
||||
},
|
||||
"@babel/helper-validator-option": {
|
||||
"version": "7.22.15",
|
||||
|
@ -21252,17 +21279,19 @@
|
|||
}
|
||||
},
|
||||
"@babel/highlight": {
|
||||
"version": "7.18.6",
|
||||
"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
|
||||
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.18.6",
|
||||
"chalk": "^2.0.0",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"chalk": "^2.4.2",
|
||||
"js-tokens": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ=="
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
|
||||
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
|
||||
},
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
|
||||
"version": "7.18.6",
|
||||
|
@ -22038,36 +22067,39 @@
|
|||
}
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.20.7",
|
||||
"integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
|
||||
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/parser": "^7.22.15",
|
||||
"@babel/types": "^7.22.15"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==",
|
||||
"version": "7.23.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
|
||||
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.21.1",
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-function-name": "^7.21.0",
|
||||
"@babel/helper-hoist-variables": "^7.18.6",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/parser": "^7.21.2",
|
||||
"@babel/types": "^7.21.2",
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/generator": "^7.23.0",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-hoist-variables": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/parser": "^7.23.0",
|
||||
"@babel/types": "^7.23.0",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.21.2",
|
||||
"integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==",
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
|
||||
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.19.4",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
"@babel/helper-string-parser": "^7.22.5",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
|
@ -34168,8 +34200,9 @@
|
|||
"integrity": "sha512-h0vtgiSKws3UmMRJykXAVM4ne1SgfoocUcoBD19ewRpQd6wqurE0HJRQGrSxcHK5LdKE7QPSIB1VX3YGIVS8Jg=="
|
||||
},
|
||||
"react-native-device-info": {
|
||||
"version": "8.7.1",
|
||||
"integrity": "sha512-cVMZztFa2Qn6qpQa601W61CtUwZQ1KXfqCOeltejAWEXmgIWivC692WGSdtGudj4upSi1UgMSaGcvKjfcpdGjg=="
|
||||
"version": "10.11.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-10.11.0.tgz",
|
||||
"integrity": "sha512-qRzhuYOm5ZXQi5dhfJFjDq157oipxcEW/fo0QyMm5+TI6V6/+P/tju+Hif6z0rpLCf7MV7iDVRv2Kqha4D/yvQ=="
|
||||
},
|
||||
"react-native-document-picker": {
|
||||
"version": "git+ssh://git@github.com/BlueWallet/react-native-document-picker.git#857655cdddf17751c0fae1286a9121fda2a6d568",
|
||||
|
@ -34450,8 +34483,9 @@
|
|||
}
|
||||
},
|
||||
"react-native-vector-icons": {
|
||||
"version": "9.2.0",
|
||||
"integrity": "sha512-wKYLaFuQST/chH3AJRjmOLoLy3JEs1JR6zMNgTaemFpNoXs0ztRnTxcxFD9xhX7cJe1/zoN5BpQYe7kL0m5yyA==",
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.0.0.tgz",
|
||||
"integrity": "sha512-efMOVbZIebY8RszZPzPBoXi9pvD/NFYmjIDYxRoc9LYSzV8rMJtT8FfcO2hPu85Rn2x9xktha0+qn0B7EqMAcQ==",
|
||||
"requires": {
|
||||
"prop-types": "^15.7.2",
|
||||
"yargs": "^16.1.1"
|
||||
|
@ -34465,9 +34499,9 @@
|
|||
}
|
||||
},
|
||||
"react-native-webview": {
|
||||
"version": "12.4.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-12.4.0.tgz",
|
||||
"integrity": "sha512-wYzTfNADidmqv6bY+x6NUfX8+uBR9mmF1CO1NOvY4oD2vv+D4rA0XwcwAe2D7RevXUy3fmuTT93kFQcgo8fEhg==",
|
||||
"version": "13.6.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.2.tgz",
|
||||
"integrity": "sha512-QzhQ5JCU+Nf2W285DtvCZOVQy/MkJXMwNDYPZvOWQbAOgxJMSSO+BtqXTMA1UPugDsko6PxJ0TxSlUwIwJijDg==",
|
||||
"requires": {
|
||||
"escape-string-regexp": "2.0.0",
|
||||
"invariant": "2.2.4"
|
||||
|
|
|
@ -148,7 +148,7 @@
|
|||
"react-native-camera-kit": "13.0.0",
|
||||
"react-native-crypto": "2.2.0",
|
||||
"react-native-default-preference": "1.4.4",
|
||||
"react-native-device-info": "8.7.1",
|
||||
"react-native-device-info": "10.11.0",
|
||||
"react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#857655cdddf17751c0fae1286a9121fda2a6d568",
|
||||
"react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#ebfddc4",
|
||||
"react-native-elements": "3.4.3",
|
||||
|
@ -183,9 +183,9 @@
|
|||
"react-native-svg": "13.14.0",
|
||||
"react-native-tcp-socket": "5.6.2",
|
||||
"react-native-tor": "0.1.8",
|
||||
"react-native-vector-icons": "9.2.0",
|
||||
"react-native-vector-icons": "10.0.0",
|
||||
"react-native-watch-connectivity": "1.1.0",
|
||||
"react-native-webview": "12.4.0",
|
||||
"react-native-webview": "13.6.2",
|
||||
"react-native-widget-center": "https://github.com/BlueWallet/react-native-widget-center#a128c38",
|
||||
"readable-stream": "3.6.2",
|
||||
"realm": "12.2.1",
|
||||
|
|
|
@ -1,18 +1,7 @@
|
|||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import {
|
||||
ActivityIndicator,
|
||||
Alert,
|
||||
BackHandler,
|
||||
Keyboard,
|
||||
Platform,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
TextInput,
|
||||
TouchableOpacity,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import { ActivityIndicator, Alert, BackHandler, Keyboard, Platform, StyleSheet, TextInput, TouchableOpacity, View } from 'react-native';
|
||||
import { WebView } from 'react-native-webview';
|
||||
|
||||
import { SafeBlueArea } from '../../BlueComponents';
|
||||
|
@ -440,8 +429,6 @@ export default class Browser extends Component {
|
|||
return (
|
||||
<SafeBlueArea>
|
||||
<View style={styles.safeRoot}>
|
||||
<StatusBar barStyle="default" />
|
||||
|
||||
<Button
|
||||
icon={{
|
||||
type: 'ionicon',
|
||||
|
@ -534,6 +521,7 @@ Browser.navigationOptions = navigationStyle(
|
|||
{
|
||||
headerHideBackButton: true,
|
||||
closeButton: true,
|
||||
statusBarStyle: 'auto',
|
||||
},
|
||||
opts => ({ ...opts, title: loc.wallets.list_ln_browser }),
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||
import { View, StatusBar, StyleSheet, Text, Keyboard, TouchableOpacity, SectionList } from 'react-native';
|
||||
import { View, StyleSheet, Text, Keyboard, TouchableOpacity, SectionList } from 'react-native';
|
||||
import { RouteProp, useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import { SafeBlueArea, BlueButton, BlueSpacing20, BlueSpacing10, BlueLoading, BlueTextCentered } from '../../BlueComponents';
|
||||
import navigationStyle from '../../components/navigationStyle';
|
||||
|
@ -373,7 +373,6 @@ const LdkInfo = () => {
|
|||
// @ts-ignore This kind of magic is not allowed in typescript, we should try and be more specific
|
||||
return (
|
||||
<SafeBlueArea styles={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="default" />
|
||||
<SectionList
|
||||
ref={(ref: SectionList) => {
|
||||
sectionList.current = ref;
|
||||
|
@ -460,6 +459,7 @@ LdkInfo.navigationOptions = navigationStyle(
|
|||
(options, { theme, navigation, route }) => {
|
||||
return {
|
||||
...options,
|
||||
statusBarStyle: 'auto',
|
||||
};
|
||||
},
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||
import { View, StatusBar, StyleSheet } from 'react-native';
|
||||
import { View, StyleSheet } from 'react-native';
|
||||
import { RouteProp, useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import { BlueLoading, SafeBlueArea, BlueButton, BlueDismissKeyboardInputAccessory, BlueSpacing20, BlueText } from '../../BlueComponents';
|
||||
import navigationStyle from '../../components/navigationStyle';
|
||||
|
@ -273,12 +273,7 @@ const LdkOpenChannel = (props: any) => {
|
|||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<SafeBlueArea styles={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="default" />
|
||||
{render()}
|
||||
</SafeBlueArea>
|
||||
);
|
||||
return <SafeBlueArea styles={[styles.root, stylesHook.root]}>{render()}</SafeBlueArea>;
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
@ -310,6 +305,7 @@ LdkOpenChannel.navigationOptions = navigationStyle(
|
|||
...options,
|
||||
headerTitle: loc.lnd.new_channel,
|
||||
headerLargeTitle: true,
|
||||
statusBarStyle: 'auto',
|
||||
};
|
||||
},
|
||||
);
|
||||
|
|
|
@ -4,7 +4,6 @@ import {
|
|||
Image,
|
||||
Keyboard,
|
||||
KeyboardAvoidingView,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TextInput,
|
||||
|
@ -404,7 +403,6 @@ const LNDCreateInvoice = () => {
|
|||
if (!wallet.current) {
|
||||
return (
|
||||
<View style={[styles.root, styleHooks.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<BlueLoading />
|
||||
</View>
|
||||
);
|
||||
|
@ -413,7 +411,6 @@ const LNDCreateInvoice = () => {
|
|||
return (
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<View style={[styles.root, styleHooks.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<View style={[styles.amount, styleHooks.amount]}>
|
||||
<KeyboardAvoidingView enabled={!Platform.isPad} behavior="position">
|
||||
<AmountInput
|
||||
|
@ -538,6 +535,7 @@ LNDCreateInvoice.navigationOptions = navigationStyle(
|
|||
{
|
||||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
statusBarStyle: 'light',
|
||||
},
|
||||
opts => ({ ...opts, title: loc.receive.header }),
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||
import { View, Text, StatusBar, ScrollView, BackHandler, TouchableOpacity, StyleSheet, I18nManager, Image } from 'react-native';
|
||||
import { View, Text, ScrollView, BackHandler, TouchableOpacity, StyleSheet, I18nManager, Image } from 'react-native';
|
||||
import Share from 'react-native-share';
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
import { Icon } from 'react-native-elements';
|
||||
|
@ -282,12 +282,7 @@ const LNDViewInvoice = () => {
|
|||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<SafeBlueArea onLayout={onLayout}>
|
||||
<StatusBar barStyle="default" />
|
||||
{render()}
|
||||
</SafeBlueArea>
|
||||
);
|
||||
return <SafeBlueArea onLayout={onLayout}>{render()}</SafeBlueArea>;
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
@ -334,6 +329,7 @@ const styles = StyleSheet.create({
|
|||
LNDViewInvoice.navigationOptions = navigationStyle({}, (options, { theme }) => {
|
||||
return {
|
||||
...options,
|
||||
statusBarStyle: 'auto',
|
||||
headerTitle: loc.lndViewInvoice.lightning_invoice,
|
||||
headerStyle: {
|
||||
backgroundColor: theme.colors.customHeader,
|
||||
|
|
|
@ -5,7 +5,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
View,
|
||||
TouchableOpacity,
|
||||
StatusBar,
|
||||
Keyboard,
|
||||
ScrollView,
|
||||
StyleSheet,
|
||||
|
@ -299,7 +298,6 @@ const ScanLndInvoice = () => {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={stylesHook.root}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<View style={[styles.root, stylesHook.root]}>
|
||||
<ScrollView contentContainerStyle={styles.scroll} keyboardShouldPersistTaps="handled">
|
||||
<KeyboardAvoidingView enabled behavior="position" keyboardVerticalOffset={20}>
|
||||
|
@ -371,7 +369,7 @@ ScanLndInvoice.navigationOptions = navigationStyle(
|
|||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
},
|
||||
opts => ({ ...opts, title: loc.send.header }),
|
||||
opts => ({ ...opts, title: loc.send.header, statusBarStyle: 'light' }),
|
||||
);
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Keyboard, Text, TouchableOpacity, StatusBar, TouchableWithoutFeedback, View, StyleSheet, I18nManager } from 'react-native';
|
||||
import { Keyboard, Text, TouchableOpacity, TouchableWithoutFeedback, View, StyleSheet, I18nManager } from 'react-native';
|
||||
import { Icon } from 'react-native-elements';
|
||||
|
||||
import { BlueButton, BlueLoading, BlueSpacing, BlueText } from '../../BlueComponents';
|
||||
|
@ -153,7 +153,6 @@ export default class AztecoRedeem extends Component {
|
|||
return (
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<View>
|
||||
<StatusBar barStyle="default" />
|
||||
<View style={styles.root}>
|
||||
<Text>{loc.azteco.codeIs}</Text>
|
||||
<BlueText style={styles.code}>
|
||||
|
@ -185,4 +184,4 @@ AztecoRedeem.propTypes = {
|
|||
}),
|
||||
};
|
||||
|
||||
AztecoRedeem.navigationOptions = navigationStyleTx({}, opts => ({ ...opts, title: loc.azteco.title }));
|
||||
AztecoRedeem.navigationOptions = navigationStyleTx({}, opts => ({ ...opts, title: loc.azteco.title, statusBarStyle: 'auto' }));
|
||||
|
|
|
@ -6,7 +6,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
Platform,
|
||||
ScrollView,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
TextInput,
|
||||
View,
|
||||
|
@ -459,7 +458,6 @@ const ReceiveDetails = () => {
|
|||
|
||||
return (
|
||||
<View style={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
{address !== undefined && showAddress && (
|
||||
<HandoffComponent title={loc.send.details_address} type={HandoffComponent.activityTypes.ReceiveOnchain} userInfo={{ address }} />
|
||||
)}
|
||||
|
@ -541,7 +539,7 @@ ReceiveDetails.navigationOptions = navigationStyle(
|
|||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
},
|
||||
opts => ({ ...opts, title: loc.receive.header }),
|
||||
opts => ({ ...opts, title: loc.receive.header, statusBarStyle: 'light' }),
|
||||
);
|
||||
|
||||
export default ReceiveDetails;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { Image, View, TouchableOpacity, StatusBar, Platform, StyleSheet, TextInput, Alert } from 'react-native';
|
||||
import { Image, View, TouchableOpacity, Platform, StyleSheet, TextInput, Alert } from 'react-native';
|
||||
import { CameraScreen } from 'react-native-camera-kit';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import { launchImageLibrary } from 'react-native-image-picker';
|
||||
|
@ -398,12 +398,7 @@ const ScanQRCode = () => {
|
|||
</>
|
||||
);
|
||||
|
||||
return (
|
||||
<View style={styles.root}>
|
||||
<StatusBar hidden />
|
||||
{render}
|
||||
</View>
|
||||
);
|
||||
return <View style={styles.root}>{render}</View>;
|
||||
};
|
||||
|
||||
export default ScanQRCode;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { useCallback, useEffect } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { TextInput, FlatList, Linking, TouchableOpacity, StyleSheet, Text, View, Platform, PermissionsAndroid, Alert } from 'react-native';
|
||||
import { TextInput, FlatList, Linking, TouchableOpacity, StyleSheet, Text, View, Platform, Alert } from 'react-native';
|
||||
import Clipboard from '@react-native-clipboard/clipboard';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import Share from 'react-native-share';
|
||||
|
@ -15,6 +15,7 @@ import { DynamicQRCode } from '../../components/DynamicQRCode';
|
|||
import { isDesktop } from '../../blue_modules/environment';
|
||||
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import alert from '../../components/Alert';
|
||||
import { PERMISSIONS, RESULTS, request } from 'react-native-permissions';
|
||||
const bitcoin = require('bitcoinjs-lib');
|
||||
const currency = require('../../blue_modules/currency');
|
||||
|
||||
|
@ -68,15 +69,8 @@ const SendCreate = () => {
|
|||
RNFS.unlink(filePath);
|
||||
});
|
||||
} else if (Platform.OS === 'android') {
|
||||
const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, {
|
||||
title: loc.send.permission_storage_title,
|
||||
message: loc.send.permission_storage_message,
|
||||
buttonNeutral: loc.send.permission_storage_later,
|
||||
buttonNegative: loc._.cancel,
|
||||
buttonPositive: loc._.ok,
|
||||
});
|
||||
|
||||
if (granted === PermissionsAndroid.RESULTS.GRANTED || Platform.Version >= 33) {
|
||||
const granted = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
|
||||
if (granted === RESULTS.GRANTED) {
|
||||
console.log('Storage Permission: Granted');
|
||||
const filePath = RNFS.DownloadDirectoryPath + `/${fileName}`;
|
||||
try {
|
||||
|
|
|
@ -9,7 +9,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
LayoutAnimation,
|
||||
Platform,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TextInput,
|
||||
|
@ -1439,7 +1438,6 @@ const SendDetails = () => {
|
|||
return (
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<View style={[styles.root, stylesHook.root]} onLayout={e => setWidth(e.nativeEvent.layout.width)}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<View>
|
||||
<KeyboardAvoidingView enabled={!Platform.isPad} behavior="position">
|
||||
<FlatList
|
||||
|
@ -1681,4 +1679,5 @@ const styles = StyleSheet.create({
|
|||
SendDetails.navigationOptions = navigationStyleTx({}, options => ({
|
||||
...options,
|
||||
title: loc.send.header,
|
||||
statusBarStyle: 'light',
|
||||
}));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useContext } from 'react';
|
||||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { TouchableOpacity, ScrollView, Linking, Image, View, Text, StyleSheet, useWindowDimensions, Platform, Alert } from 'react-native';
|
||||
import { useNavigation, useTheme } from '@react-navigation/native';
|
||||
import { Icon } from 'react-native-elements';
|
||||
|
@ -20,6 +20,7 @@ const About = () => {
|
|||
const { colors } = useTheme();
|
||||
const { width, height } = useWindowDimensions();
|
||||
const { isElectrumDisabled } = useContext(BlueStorageContext);
|
||||
const [uniqueID, setUniqueID] = useState();
|
||||
const styles = StyleSheet.create({
|
||||
copyToClipboard: {
|
||||
justifyContent: 'center',
|
||||
|
@ -75,6 +76,10 @@ const About = () => {
|
|||
},
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
getUniqueId().then(setUniqueID);
|
||||
}, []);
|
||||
|
||||
const handleOnReleaseNotesPress = () => {
|
||||
navigate('ReleaseNotes');
|
||||
};
|
||||
|
@ -244,12 +249,12 @@ const About = () => {
|
|||
<BlueTextCentered>
|
||||
w, h = {width}, {height}
|
||||
</BlueTextCentered>
|
||||
<BlueTextCentered>Unique ID: {getUniqueId()}</BlueTextCentered>
|
||||
<BlueTextCentered>Unique ID: {uniqueID}</BlueTextCentered>
|
||||
<View style={styles.copyToClipboard}>
|
||||
<TouchableOpacity
|
||||
accessibilityRole="button"
|
||||
onPress={() => {
|
||||
const stringToCopy = 'userId:' + getUniqueId();
|
||||
const stringToCopy = 'userId:' + uniqueID;
|
||||
A.logError('copied unique id');
|
||||
Clipboard.setString(stringToCopy);
|
||||
}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useLayoutEffect, useState } from 'react';
|
||||
import { View, ScrollView, TouchableOpacity, Text, TextInput, Linking, StatusBar, StyleSheet, Keyboard } from 'react-native';
|
||||
import { View, ScrollView, TouchableOpacity, Text, TextInput, Linking, StyleSheet, Keyboard } from 'react-native';
|
||||
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import Clipboard from '@react-native-clipboard/clipboard';
|
||||
import { BlueCard, BlueCopyToClipboardButton, BlueLoading, BlueSpacing20, BlueText } from '../../BlueComponents';
|
||||
|
@ -217,7 +217,6 @@ const TransactionsDetails = () => {
|
|||
type={HandoffComponent.activityTypes.ViewInBlockExplorer}
|
||||
url={`https://mempool.space/tx/${tx.hash}`}
|
||||
/>
|
||||
<StatusBar barStyle="default" />
|
||||
<BlueCard>
|
||||
<View>
|
||||
<TextInput
|
||||
|
@ -412,6 +411,7 @@ export default TransactionsDetails;
|
|||
TransactionsDetails.navigationOptions = navigationStyle({ headerTitle: loc.transactions.details_title }, (options, { theme }) => {
|
||||
return {
|
||||
...options,
|
||||
statusBarStyle: 'auto',
|
||||
headerStyle: {
|
||||
backgroundColor: theme.colors.customHeader,
|
||||
borderBottomWidth: 0,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
||||
import { View, ActivityIndicator, Text, TouchableOpacity, StyleSheet, StatusBar, BackHandler } from 'react-native';
|
||||
import { View, ActivityIndicator, Text, TouchableOpacity, StyleSheet, BackHandler } from 'react-native';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
|
@ -361,7 +361,6 @@ const TransactionsStatus = () => {
|
|||
url={`https://mempool.space/tx/${tx.hash}`}
|
||||
/>
|
||||
|
||||
<StatusBar barStyle="default" />
|
||||
<View style={styles.container}>
|
||||
<BlueCard>
|
||||
<View style={styles.center}>
|
||||
|
@ -540,6 +539,7 @@ const styles = StyleSheet.create({
|
|||
TransactionsStatus.navigationOptions = navigationStyle(
|
||||
{
|
||||
headerTitle: '',
|
||||
statusBarStyle: 'auto',
|
||||
},
|
||||
(options, { theme }) => ({
|
||||
...options,
|
||||
|
|
|
@ -7,7 +7,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
Platform,
|
||||
View,
|
||||
StatusBar,
|
||||
TextInput,
|
||||
StyleSheet,
|
||||
useColorScheme,
|
||||
|
@ -46,6 +45,7 @@ const ButtonSelected = Object.freeze({
|
|||
|
||||
const WalletsAdd = () => {
|
||||
const { colors } = useTheme();
|
||||
const colorScheme = useColorScheme();
|
||||
const { addWallet, saveToDisk, isAdvancedModeEnabled, wallets } = useContext(BlueStorageContext);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [walletBaseURI, setWalletBaseURI] = useState('');
|
||||
|
@ -54,7 +54,7 @@ const WalletsAdd = () => {
|
|||
const [isAdvancedOptionsEnabled, setIsAdvancedOptionsEnabled] = useState(false);
|
||||
const [selectedWalletType, setSelectedWalletType] = useState(false);
|
||||
const [backdoorPressed, setBackdoorPressed] = useState(1);
|
||||
const { navigate, goBack } = useNavigation();
|
||||
const { navigate, goBack, setOptions } = useNavigation();
|
||||
const [entropy, setEntropy] = useState();
|
||||
const [entropyButtonText, setEntropyButtonText] = useState(loc.wallets.add_entropy_provide);
|
||||
const stylesHook = {
|
||||
|
@ -89,6 +89,12 @@ const WalletsAdd = () => {
|
|||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [isAdvancedOptionsEnabled]);
|
||||
|
||||
useEffect(() => {
|
||||
setOptions({
|
||||
statusBarStyle: Platform.select({ ios: 'light', default: colorScheme === 'dark' ? 'light' : 'dark' }),
|
||||
});
|
||||
}, [colorScheme, setOptions]);
|
||||
|
||||
const entropyGenerated = newEntropy => {
|
||||
let entropyTitle;
|
||||
if (!newEntropy) {
|
||||
|
@ -258,9 +264,6 @@ const WalletsAdd = () => {
|
|||
|
||||
return (
|
||||
<ScrollView style={stylesHook.root}>
|
||||
<StatusBar
|
||||
barStyle={Platform.select({ ios: 'light-content', default: useColorScheme() === 'dark' ? 'light-content' : 'dark-content' })}
|
||||
/>
|
||||
<BlueSpacing20 />
|
||||
<KeyboardAvoidingView enabled behavior={Platform.OS === 'ios' ? 'padding' : null} keyboardVerticalOffset={62}>
|
||||
<BlueFormLabel>{loc.wallets.add_wallet_name}</BlueFormLabel>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import { Image, View, Text, ScrollView, StyleSheet, StatusBar } from 'react-native';
|
||||
import { Image, View, Text, ScrollView, StyleSheet } from 'react-native';
|
||||
import { useTheme } from '@react-navigation/native';
|
||||
import { SafeBlueArea, BlueLoading } from '../../BlueComponents';
|
||||
import navigationStyle from '../../components/navigationStyle';
|
||||
|
@ -39,7 +39,6 @@ const WalletsAddMultisigHelp = () => {
|
|||
<BlueLoading />
|
||||
) : (
|
||||
<SafeBlueArea style={stylesHook.root}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<ScrollView>
|
||||
<View style={[styles.intro, stylesHook.intro]}>
|
||||
<Text style={[styles.introTitle, stylesHook.introTitle]}>{loc.multisig.ms_help_title}</Text>
|
||||
|
@ -133,6 +132,7 @@ WalletsAddMultisigHelp.navigationOptions = navigationStyle({
|
|||
},
|
||||
headerTintColor: '#FFFFFF',
|
||||
headerBackTitleVisible: false,
|
||||
statusBarStyle: 'light',
|
||||
});
|
||||
|
||||
export default WalletsAddMultisigHelp;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useCallback, useState, useContext, useRef, useEffect, useLayoutEffect } from 'react';
|
||||
import { ActivityIndicator, FlatList, StyleSheet, View, StatusBar } from 'react-native';
|
||||
import { ActivityIndicator, FlatList, StyleSheet, View } from 'react-native';
|
||||
import { useFocusEffect, useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
import Privacy from '../../blue_modules/Privacy';
|
||||
import { BlueStorageContext } from '../../blue_modules/storage-context';
|
||||
|
@ -142,7 +142,6 @@ const WalletAddresses = () => {
|
|||
|
||||
return (
|
||||
<View style={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="default" />
|
||||
<FlatList
|
||||
contentContainerStyle={stylesHook.root}
|
||||
ref={addressList}
|
||||
|
@ -161,6 +160,7 @@ const WalletAddresses = () => {
|
|||
|
||||
WalletAddresses.navigationOptions = navigationStyle({
|
||||
title: loc.addresses.addresses_title,
|
||||
statusBarStyle: 'auto',
|
||||
});
|
||||
|
||||
export default WalletAddresses;
|
||||
|
|
|
@ -12,9 +12,7 @@ import {
|
|||
Platform,
|
||||
Linking,
|
||||
StyleSheet,
|
||||
StatusBar,
|
||||
ScrollView,
|
||||
PermissionsAndroid,
|
||||
InteractionManager,
|
||||
ActivityIndicator,
|
||||
I18nManager,
|
||||
|
@ -45,6 +43,7 @@ import { AbstractHDElectrumWallet } from '../../class/wallets/abstract-hd-electr
|
|||
import alert from '../../components/Alert';
|
||||
import { BitcoinUnit, Chain } from '../../models/bitcoinUnits';
|
||||
import { writeFileAndExport } from '../../blue_modules/fs';
|
||||
import { PERMISSIONS, RESULTS, request } from 'react-native-permissions';
|
||||
|
||||
const prompt = require('../../helpers/prompt');
|
||||
|
||||
|
@ -364,15 +363,8 @@ const WalletDetails = () => {
|
|||
RNFS.unlink(filePath);
|
||||
});
|
||||
} else if (Platform.OS === 'android') {
|
||||
const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, {
|
||||
title: loc.send.permission_storage_title,
|
||||
message: loc.send.permission_storage_message,
|
||||
buttonNeutral: loc.send.permission_storage_later,
|
||||
buttonNegative: loc._.cancel,
|
||||
buttonPositive: loc._.ok,
|
||||
});
|
||||
|
||||
if (granted === PermissionsAndroid.RESULTS.GRANTED || Platform.Version >= 33) {
|
||||
const granted = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
|
||||
if (granted === RESULTS.GRANTED) {
|
||||
console.log('Storage Permission: Granted');
|
||||
const filePath = RNFS.DownloadDirectoryPath + `/${fileName}`;
|
||||
try {
|
||||
|
@ -496,8 +488,6 @@ const WalletDetails = () => {
|
|||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<View>
|
||||
<BlueCard style={styles.address}>
|
||||
<StatusBar barStyle="default" />
|
||||
|
||||
{(() => {
|
||||
if (
|
||||
[LegacyWallet.type, SegwitBech32Wallet.type, SegwitP2SHWallet.type].includes(wallet.type) ||
|
||||
|
@ -709,6 +699,10 @@ const WalletDetails = () => {
|
|||
);
|
||||
};
|
||||
|
||||
WalletDetails.navigationOptions = navigationStyle({}, opts => ({ ...opts, headerTitle: loc.wallets.details_title }));
|
||||
WalletDetails.navigationOptions = navigationStyle({}, opts => ({
|
||||
...opts,
|
||||
headerTitle: loc.wallets.details_title,
|
||||
statusBarStyle: 'auto',
|
||||
}));
|
||||
|
||||
export default WalletDetails;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useState, useCallback, useContext, useRef, useEffect } from 'react';
|
||||
import { InteractionManager, ScrollView, ActivityIndicator, StatusBar, View, StyleSheet, AppState } from 'react-native';
|
||||
import { InteractionManager, ScrollView, ActivityIndicator, View, StyleSheet, AppState } from 'react-native';
|
||||
import { useTheme, useNavigation, useFocusEffect, useRoute } from '@react-navigation/native';
|
||||
|
||||
import { BlueSpacing20, SafeBlueArea, BlueText, BlueCopyTextToClipboard, BlueCard } from '../../BlueComponents';
|
||||
|
@ -94,7 +94,6 @@ const WalletExport = () => {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={[styles.root, stylesHook.root]} onLayout={onLayout}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<ScrollView contentContainerStyle={styles.scrollViewContent} testID="WalletExportScroll">
|
||||
<View>
|
||||
<BlueText style={[styles.type, stylesHook.type]}>{wallet.typeReadable}</BlueText>
|
||||
|
@ -164,6 +163,7 @@ WalletExport.navigationOptions = navigationStyle(
|
|||
{
|
||||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
statusBarStyle: 'light',
|
||||
},
|
||||
opts => ({ ...opts, title: loc.wallets.export_title }),
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useCallback, useContext, useRef, useState } from 'react';
|
||||
import { ActivityIndicator, InteractionManager, ScrollView, StatusBar, StyleSheet, View } from 'react-native';
|
||||
import { ActivityIndicator, InteractionManager, ScrollView, StyleSheet, View } from 'react-native';
|
||||
import { useFocusEffect, useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
|
||||
import { BlueSpacing20, BlueText, SafeBlueArea } from '../../BlueComponents';
|
||||
|
@ -76,7 +76,6 @@ const ExportMultisigCoordinationSetup = () => {
|
|||
</View>
|
||||
) : (
|
||||
<SafeBlueArea style={stylesHook.root}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<ScrollView contentContainerStyle={styles.scrollViewContent}>
|
||||
<View>
|
||||
<BlueText style={[styles.type, stylesHook.type]}>{wallet.getLabel()}</BlueText>
|
||||
|
@ -131,6 +130,7 @@ ExportMultisigCoordinationSetup.navigationOptions = navigationStyle(
|
|||
{
|
||||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
statusBarStyle: 'light',
|
||||
},
|
||||
opts => ({ ...opts, title: loc.multisig.export_coordination_setup }),
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useState, useRef, useMemo } from 'react';
|
||||
import { FlatList, StatusBar, StyleSheet, TextInput, View } from 'react-native';
|
||||
import { FlatList, StyleSheet, TextInput, View } from 'react-native';
|
||||
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
|
||||
|
||||
import { BlueButton, BlueFormLabel, BlueSpacing20, BlueTextCentered, SafeBlueArea } from '../../BlueComponents';
|
||||
|
@ -118,7 +118,6 @@ const ImportCustomDerivationPath = () => {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<BlueSpacing20 />
|
||||
<BlueFormLabel>{loc.wallets.import_derivation_subtitle}</BlueFormLabel>
|
||||
<BlueSpacing20 />
|
||||
|
@ -181,6 +180,10 @@ const styles = StyleSheet.create({
|
|||
},
|
||||
});
|
||||
|
||||
ImportCustomDerivationPath.navigationOptions = navigationStyle({}, opts => ({ ...opts, title: loc.wallets.import_derivation_title }));
|
||||
ImportCustomDerivationPath.navigationOptions = navigationStyle({}, opts => ({
|
||||
...opts,
|
||||
title: loc.wallets.import_derivation_title,
|
||||
statusBarStyle: 'light',
|
||||
}));
|
||||
|
||||
export default ImportCustomDerivationPath;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useState } from 'react';
|
||||
import { Alert, View, StatusBar, StyleSheet, TextInput, ActivityIndicator } from 'react-native';
|
||||
import { Alert, View, StyleSheet, TextInput, ActivityIndicator } from 'react-native';
|
||||
import { useNavigation, useTheme } from '@react-navigation/native';
|
||||
|
||||
import { HDSegwitBech32Wallet, WatchOnlyWallet } from '../../class';
|
||||
|
@ -72,7 +72,6 @@ const WalletsImportSpeed = () => {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={styles.root}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<BlueSpacing20 />
|
||||
<BlueFormLabel>Mnemonic</BlueFormLabel>
|
||||
<BlueSpacing20 />
|
||||
|
@ -90,6 +89,6 @@ const WalletsImportSpeed = () => {
|
|||
);
|
||||
};
|
||||
|
||||
WalletsImportSpeed.navigationOptions = navigationStyle({}, opts => ({ ...opts, title: loc.wallets.import_title }));
|
||||
WalletsImportSpeed.navigationOptions = navigationStyle({}, opts => ({ ...opts, statusBarStyle: 'light', title: loc.wallets.import_title }));
|
||||
|
||||
export default WalletsImportSpeed;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
||||
import {
|
||||
StatusBar,
|
||||
View,
|
||||
TouchableOpacity,
|
||||
Text,
|
||||
|
@ -39,7 +38,7 @@ const WalletsList = () => {
|
|||
const { wallets, getTransactions, getBalance, refreshAllWalletTransactions, setSelectedWallet, isElectrumDisabled } =
|
||||
useContext(BlueStorageContext);
|
||||
const { width } = useWindowDimensions();
|
||||
const { colors, scanImage, barStyle } = useTheme();
|
||||
const { colors, scanImage } = useTheme();
|
||||
const { navigate, setOptions } = useNavigation();
|
||||
const isFocused = useIsFocused();
|
||||
const routeName = useRoute().name;
|
||||
|
@ -361,7 +360,6 @@ const WalletsList = () => {
|
|||
|
||||
return (
|
||||
<View style={styles.root} onLayout={onLayout}>
|
||||
<StatusBar barStyle={barStyle} backgroundColor="transparent" translucent animated />
|
||||
<View style={[styles.walletsListWrapper, stylesHook.walletsListWrapper]}>
|
||||
<SectionList
|
||||
removeClippedSubviews
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useEffect, useRef, useContext, useState } from 'react';
|
||||
import { View, Image, Text, StyleSheet, StatusBar, I18nManager, Pressable, useColorScheme, Platform } from 'react-native';
|
||||
import { View, Image, Text, StyleSheet, I18nManager, Pressable, useColorScheme, Platform } from 'react-native';
|
||||
import { BluePrivateBalance } from '../../BlueComponents';
|
||||
import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
|
@ -74,8 +74,8 @@ const ReorderWallets = () => {
|
|||
const sortableList = useRef();
|
||||
const { colors } = useTheme();
|
||||
const { wallets, setWalletsWithNewOrder } = useContext(BlueStorageContext);
|
||||
|
||||
const { navigate } = useNavigation();
|
||||
const colorScheme = useColorScheme();
|
||||
const { navigate, setOptions } = useNavigation();
|
||||
const stylesHook = {
|
||||
root: {
|
||||
backgroundColor: colors.elevated,
|
||||
|
@ -90,6 +90,12 @@ const ReorderWallets = () => {
|
|||
setWalletData(wallets);
|
||||
}, [wallets]);
|
||||
|
||||
useEffect(() => {
|
||||
setOptions({
|
||||
statusBarStyle: Platform.select({ ios: 'light', default: colorScheme === 'dark' ? 'light' : 'dark' }),
|
||||
});
|
||||
}, [colorScheme, setOptions]);
|
||||
|
||||
const navigateToWallet = wallet => {
|
||||
const walletID = wallet.getID();
|
||||
navigate('WalletTransactions', {
|
||||
|
@ -178,11 +184,9 @@ const ReorderWallets = () => {
|
|||
<Text style={{ color: colors.foregroundColor }}>{loc.wallets.reorder_instructions}</Text>
|
||||
</View>
|
||||
);
|
||||
|
||||
return (
|
||||
<GestureHandlerRootView style={[styles.root, stylesHook.root]}>
|
||||
<StatusBar
|
||||
barStyle={Platform.select({ ios: 'light-content', default: useColorScheme() === 'dark' ? 'light-content' : 'dark-content' })}
|
||||
/>
|
||||
<DraggableFlatList
|
||||
ListHeaderComponent={ListHeaderComponent}
|
||||
ref={sortableList}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { View, ActivityIndicator, Image, Text, TouchableOpacity, I18nManager, FlatList, StyleSheet, StatusBar } from 'react-native';
|
||||
import { View, ActivityIndicator, Image, Text, TouchableOpacity, I18nManager, FlatList, StyleSheet } from 'react-native';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
import { useRoute, useTheme, useNavigation, useNavigationState } from '@react-navigation/native';
|
||||
|
@ -100,6 +100,14 @@ const SelectWallet = () => {
|
|||
setIsLoading(false);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (isLoading || data.length === 0) {
|
||||
setOptions({ statusBarStyle: 'light' });
|
||||
} else {
|
||||
setOptions({ statusBarStyle: 'auto' });
|
||||
}
|
||||
}, [isLoading, data.length, setOptions]);
|
||||
|
||||
useEffect(() => {
|
||||
setOptions(
|
||||
isModal
|
||||
|
@ -176,14 +184,12 @@ const SelectWallet = () => {
|
|||
if (isLoading) {
|
||||
return (
|
||||
<View style={styles.loading}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<ActivityIndicator />
|
||||
</View>
|
||||
);
|
||||
} else if (data.length <= 0) {
|
||||
return (
|
||||
<SafeBlueArea>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<View style={styles.noWallets}>
|
||||
<BlueText style={styles.center}>{loc.wallets.select_no_bitcoin}</BlueText>
|
||||
<BlueSpacing20 />
|
||||
|
@ -194,7 +200,6 @@ const SelectWallet = () => {
|
|||
} else {
|
||||
return (
|
||||
<SafeBlueArea>
|
||||
<StatusBar barStyle="default" />
|
||||
<FlatList extraData={data} data={data} renderItem={renderItem} keyExtractor={(_item, index) => `${index}`} />
|
||||
</SafeBlueArea>
|
||||
);
|
||||
|
|
|
@ -6,7 +6,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
LayoutAnimation,
|
||||
Platform,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
TextInput,
|
||||
TouchableWithoutFeedback,
|
||||
|
@ -113,7 +112,6 @@ const SignVerify = () => {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={[styles.root, stylesHooks.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<KeyboardAvoidingView style={[styles.root, stylesHooks.root]}>
|
||||
{!isKeyboardVisible && (
|
||||
|
@ -232,7 +230,7 @@ const SignVerify = () => {
|
|||
);
|
||||
};
|
||||
|
||||
SignVerify.navigationOptions = navigationStyle({ closeButton: true, headerHideBackButton: true }, opts => ({
|
||||
SignVerify.navigationOptions = navigationStyle({ closeButton: true, headerHideBackButton: true, statusBarStyle: 'light' }, opts => ({
|
||||
...opts,
|
||||
title: loc.addresses.sign_title,
|
||||
}));
|
||||
|
|
|
@ -8,7 +8,6 @@ import {
|
|||
PixelRatio,
|
||||
Platform,
|
||||
ScrollView,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
Text,
|
||||
findNodeHandle,
|
||||
|
@ -501,6 +500,10 @@ const WalletTransactions = ({ navigation }) => {
|
|||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setOptions({ statusBarStyle: 'light', barTintColor: WalletGradient.headerColorFor(wallet.type) });
|
||||
}, [setOptions, wallet.type]);
|
||||
|
||||
const getItemLayout = (_, index) => ({
|
||||
length: 64,
|
||||
offset: 64 * index,
|
||||
|
@ -509,7 +512,6 @@ const WalletTransactions = ({ navigation }) => {
|
|||
|
||||
return (
|
||||
<View style={styles.flex}>
|
||||
<StatusBar barStyle="light-content" backgroundColor={WalletGradient.headerColorFor(wallet.type)} animated />
|
||||
<TransactionsNavigationHeader
|
||||
navigation={navigation}
|
||||
wallet={wallet}
|
||||
|
|
|
@ -8,7 +8,6 @@ import {
|
|||
KeyboardAvoidingView,
|
||||
LayoutAnimation,
|
||||
Platform,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
Switch,
|
||||
Text,
|
||||
|
@ -561,7 +560,6 @@ const ViewEditMultisigCosigners = () => {
|
|||
|
||||
return (
|
||||
<View style={[styles.root, stylesHook.root]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<KeyboardAvoidingView
|
||||
enabled={!Platform.isPad}
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : null}
|
||||
|
@ -659,6 +657,7 @@ ViewEditMultisigCosigners.navigationOptions = navigationStyle(
|
|||
{
|
||||
closeButton: true,
|
||||
headerHideBackButton: true,
|
||||
statusBarStyle: 'light',
|
||||
},
|
||||
opts => ({ ...opts, headerTitle: loc.multisig.manage_keys }),
|
||||
);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useCallback, useContext, useEffect, useState } from 'react';
|
||||
import { InteractionManager, ActivityIndicator, View, StatusBar, StyleSheet } from 'react-native';
|
||||
import { InteractionManager, ActivityIndicator, View, StyleSheet } from 'react-native';
|
||||
import { useFocusEffect, useRoute, useNavigation, useTheme } from '@react-navigation/native';
|
||||
import navigationStyle from '../../components/navigationStyle';
|
||||
import { BlueSpacing20, SafeBlueArea, BlueText, BlueCopyTextToClipboard, BlueButton } from '../../BlueComponents';
|
||||
|
@ -83,7 +83,6 @@ const WalletXpub = () => {
|
|||
</View>
|
||||
) : (
|
||||
<SafeBlueArea style={[styles.root, stylesHook.root]} onLayout={onLayout}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<>
|
||||
<View style={styles.container}>
|
||||
{wallet && (
|
||||
|
|
|
@ -50,6 +50,8 @@ jest.mock('@react-native-community/push-notification-ios', () => {
|
|||
return {};
|
||||
});
|
||||
|
||||
jest.mock('react-native-permissions', () => require('react-native-permissions/mock'));
|
||||
|
||||
jest.mock('react-native-device-info', () => {
|
||||
return {
|
||||
getUniqueId: jest.fn().mockReturnValue('uniqueId'),
|
||||
|
|
Loading…
Add table
Reference in a new issue