Skip to content

Commit 207245e

Browse files
committed
feat(suite-native): modify OfflineBanner to also display FW revision offline error
1 parent 06319df commit 207245e

File tree

8 files changed

+42
-12
lines changed

8 files changed

+42
-12
lines changed

suite-native/connection-status/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"dependencies": {
1313
"@react-native-community/netinfo": "^11.4.1",
1414
"@suite-native/atoms": "workspace:*",
15+
"@suite-native/device": "workspace:*",
1516
"@suite-native/icons": "workspace:*",
1617
"@suite-native/intl": "workspace:*",
1718
"@suite-native/settings": "workspace:*",
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import { View } from 'react-native';
22

3-
import { HStack, Text } from '@suite-native/atoms';
3+
import { HStack, Text, VStack } from '@suite-native/atoms';
44
import { Icon } from '@suite-native/icons';
55
import { Translation } from '@suite-native/intl';
66
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
77

8+
import { useIsFwRevisionCheckOfflineError } from './useIsFwRevisionCheckOfflineError';
89
import { useIsOfflineBannerVisible } from './useIsOfflineBannerVisible';
910

1011
const containerStyle = prepareNativeStyle(utils => ({
1112
backgroundColor: utils.colors.backgroundAlertYellowBold,
12-
alignItems: 'center',
1313
}));
1414

1515
const contentStyle = prepareNativeStyle<{ topSafeAreaInset: number }>(
1616
(utils, { topSafeAreaInset }) => ({
1717
marginTop: topSafeAreaInset,
1818
paddingTop: utils.spacings.sp8,
19-
paddingBottom: utils.spacings.sp12,
20-
alignItems: 'center',
19+
paddingBottom: utils.spacings.sp16,
20+
paddingHorizontal: utils.spacings.sp16,
2121
}),
2222
);
2323

@@ -27,19 +27,31 @@ export const OfflineBanner = ({ topSafeAreaInset }: OfflineBannerProps) => {
2727
const { applyStyle } = useNativeStyles();
2828

2929
const isOfflineBannerVisible = useIsOfflineBannerVisible();
30+
const isFwRevisionCheckOfflineError = useIsFwRevisionCheckOfflineError();
3031

3132
if (!isOfflineBannerVisible) {
3233
return null;
3334
}
3435

3536
return (
3637
<View style={applyStyle(containerStyle)}>
37-
<HStack style={applyStyle(contentStyle, { topSafeAreaInset })}>
38-
<Icon name="wifiSlash" size="mediumLarge" />
39-
<Text>
40-
<Translation id="generic.banners.offline.title" />
41-
</Text>
42-
</HStack>
38+
<VStack
39+
spacing="sp2"
40+
alignItems="center"
41+
style={applyStyle(contentStyle, { topSafeAreaInset })}
42+
>
43+
<HStack alignItems="center">
44+
<Icon name="wifiSlash" size="mediumLarge" />
45+
<Text variant="highlight">
46+
<Translation id="generic.banners.offline.title" />
47+
</Text>
48+
</HStack>
49+
{isFwRevisionCheckOfflineError && (
50+
<Text textAlign="center">
51+
<Translation id="generic.banners.offline.fwRevisionCheckOfflineError" />
52+
</Text>
53+
)}
54+
</VStack>
4355
</View>
4456
);
4557
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { useSelector } from 'react-redux';
2+
3+
import { selectFirmwareRevisionCheckErrorIfEnabled } from '@suite-native/device';
4+
5+
export const useIsFwRevisionCheckOfflineError = () => {
6+
const firmwareRevisionCheckError = useSelector(selectFirmwareRevisionCheckErrorIfEnabled);
7+
8+
return firmwareRevisionCheckError === 'cannot-perform-check-offline';
9+
};

suite-native/connection-status/src/useIsOfflineBannerVisible.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import { useNetInfo } from '@react-native-community/netinfo';
44

55
import { selectIsOnboardingFinished } from '@suite-native/settings';
66

7+
import { useIsFwRevisionCheckOfflineError } from './useIsFwRevisionCheckOfflineError';
8+
79
export const useIsOfflineBannerVisible = () => {
810
const isOnboardingFinished = useSelector(selectIsOnboardingFinished);
911
const { isInternetReachable } = useNetInfo();
10-
1112
const isReachable = isInternetReachable ?? true;
13+
const isFwRevisionCheckOfflineError = useIsFwRevisionCheckOfflineError();
1214

13-
return !isReachable && isOnboardingFinished;
15+
return (!isReachable || isFwRevisionCheckOfflineError) && isOnboardingFinished;
1416
};

suite-native/connection-status/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"compilerOptions": { "outDir": "libDev" },
44
"references": [
55
{ "path": "../atoms" },
6+
{ "path": "../device" },
67
{ "path": "../icons" },
78
{ "path": "../intl" },
89
{ "path": "../settings" },

suite-native/intl/src/en.ts

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ export const en = {
3030
banners: {
3131
offline: {
3232
title: "You're offline.",
33+
fwRevisionCheckOfflineError:
34+
"Firmware authenticity check couldn't be performed.\nGo online to verify your firmware version.",
3335
},
3436
deviceCompromised: {
3537
title: 'Unofficial firmware detected',

suite-native/module-authenticity-checks/src/components/DeviceCompromisedBanner.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { deviceCompromisedBannerAtom } from '../DeviceCompromisedBannerAtoms';
1313

1414
const containerStyle = prepareNativeStyle(utils => ({
1515
backgroundColor: utils.colors.backgroundAlertRedSubtleOnElevation0,
16+
// MessageSystemBanner critical variant has the same bgColor, so the margin serves to separate them visually
17+
marginBottom: utils.spacings.sp1,
1618
}));
1719

1820
const contentStyle = prepareNativeStyle<{ topSafeAreaInset: number }>(

yarn.lock

+1
Original file line numberDiff line numberDiff line change
@@ -11038,6 +11038,7 @@ __metadata:
1103811038
dependencies:
1103911039
"@react-native-community/netinfo": "npm:^11.4.1"
1104011040
"@suite-native/atoms": "workspace:*"
11041+
"@suite-native/device": "workspace:*"
1104111042
"@suite-native/icons": "workspace:*"
1104211043
"@suite-native/intl": "workspace:*"
1104311044
"@suite-native/settings": "workspace:*"

0 commit comments

Comments
 (0)