Skip to content

Commit 309f55f

Browse files
committed
fix(suite-native): onboarding device disconnected error while onboarding
1 parent 37a0dba commit 309f55f

File tree

8 files changed

+34
-10
lines changed

8 files changed

+34
-10
lines changed

suite-native/device/src/hooks/useHandleDeviceConnection.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ export const useHandleDeviceConnection = () => {
9696
if (
9797
isDeviceSetupSupported &&
9898
isDeviceConnected &&
99+
isOnboardingFinished &&
99100
!isDeviceInitialized &&
100101
!isPortfolioTrackerDevice &&
101102
!isBiometricsOverlayVisible &&
102-
!isOnboardingStackFocused &&
103-
!isOnboardingDeviceDisconnectedAlertDisplayed
103+
!isDeviceOnboardingStackFocused &&
104+
!isOnboardingDeviceDisconnectedAlertDisplayed &&
105+
!isFirmwareInstallationRunning
104106
) {
105107
navigation.navigate(RootStackRoutes.DeviceOnboardingStack, {
106108
screen: DeviceOnboardingStackRoutes.UninitializedDeviceLanding,
@@ -109,12 +111,14 @@ export const useHandleDeviceConnection = () => {
109111
}, [
110112
dispatch,
111113
isDeviceConnected,
112-
isOnboardingStackFocused,
114+
isOnboardingFinished,
113115
isBiometricsOverlayVisible,
114116
navigation,
115117
isDeviceInitialized,
116118
isPortfolioTrackerDevice,
117119
isDeviceSetupSupported,
120+
isDeviceOnboardingStackFocused,
121+
isFirmwareInstallationRunning,
118122
isOnboardingDeviceDisconnectedAlertDisplayed,
119123
]);
120124

@@ -169,7 +173,7 @@ export const useHandleDeviceConnection = () => {
169173
// set connecting screen to be displayed again on the next device connection.
170174
useEffect(() => {
171175
if (
172-
(isFirmwareInstallationRunning && !isOnboardingStackFocused) ||
176+
isFirmwareInstallationRunning ||
173177
!isOnboardingFinished ||
174178
isConnectAndUnlockDeviceScreenFocused
175179
)

suite-native/device/src/hooks/useHandleOnboardingDeviceDisconnection.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ export const useHandleOnboardingDeviceDisconnection = () => {
8282
secondaryButtonTitle: translate('generic.buttons.cancel'),
8383
secondaryButtonVariant: 'redElevation0',
8484
onPressPrimaryButton: hideDeviceDisconnectedAlert,
85-
onPressSecondaryButton: hideDeviceDisconnectedAlert,
85+
onPressSecondaryButton: () => {
86+
hideDeviceDisconnectedAlert();
87+
navigation.goBack();
88+
},
8689
});
8790
}, 300);
8891
}

suite-native/device/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export * from './hooks/useDetectDeviceError';
55
export * from './hooks/useReportDeviceConnectToAnalytics';
66
export * from './hooks/useReportDeviceCompromised';
77
export * from './hooks/useRetryFwAuthenticityChecks';
8+
export * from './hooks/useHandleOnboardingDeviceDisconnection';
89
export * from './components/ConnectDeviceAnimation';
910
export * from './components/ConfirmOnTrezorImage';
1011
export * from './components/ConnectorImage';

suite-native/firmware/src/components/FirmwareInstallationScreenContent.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type FirmwareInstallationScreenContentProps = {
4545
onFirmwareInstallationSuccess: () => void;
4646
onFirmwareInstallationFailure?: () => void;
4747
isCancellationAllowed?: boolean;
48+
isRetryAllowed?: boolean;
4849
};
4950

5051
// This component is shared between `module-onboarding` and `module-device-settings`.
@@ -53,6 +54,7 @@ export const FirmwareInstallationScreenContent = ({
5354
onFirmwareInstallationSuccess,
5455
onFirmwareInstallationFailure,
5556
isCancellationAllowed = true,
57+
isRetryAllowed = true,
5658
}: FirmwareInstallationScreenContentProps) => {
5759
const dispatch = useDispatch();
5860
const { applyStyle } = useNativeStyles();
@@ -228,9 +230,11 @@ export const FirmwareInstallationScreenContent = ({
228230
bottom: bottomButtonOffset,
229231
})}
230232
>
231-
<Button onPress={handleRetry} colorScheme="redBold">
232-
<Translation id="firmware.firmwareUpdateProgress.retryButton" />
233-
</Button>
233+
{isRetryAllowed && (
234+
<Button onPress={handleRetry} colorScheme="redBold">
235+
<Translation id="firmware.firmwareUpdateProgress.retryButton" />
236+
</Button>
237+
)}
234238
<Button onPress={handleContactSupport} colorScheme="tertiaryElevation0">
235239
<Translation id="firmware.firmwareUpdateProgress.contactSupportButton" />
236240
</Button>

suite-native/firmware/src/hooks/useFirmware.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { useFirmwareAnalytics } from './useFirmwareAnalytics';
1515
// If progress doesn't change for 1 minute
1616
const MAYBE_STUCKED_TIMEOUT = 1 * 60 * 1000; // 1 minute
1717

18-
export const useFirmware = (params: UseFirmwareInstallationParams) => {
18+
export const useFirmware = (params?: UseFirmwareInstallationParams) => {
1919
const dispatch = useDispatch();
2020
const {
2121
firmwareUpdate: firmwareUpdateCommon,

suite-native/firmware/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export * from './components/FirmwareInstallationScreenContent';
44
export * from './components/ConfirmFirmwareUpdateScreenContent';
55
export * from './components/ConfirmFirmwareUpdateScreenFooter';
66
export * from './hooks/useIsFirmwareUpdateFeatureEnabled';
7+
export * from './hooks/useFirmware';

suite-native/module-device-onboarding/src/components/OnboardingScreenWithExitButton.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useSetAtom } from 'jotai';
77
import { deviceActions, selectSelectedDevice } from '@suite-common/wallet-core';
88
import { useAlert } from '@suite-native/alerts';
99
import { wasDeviceDisconnectedByUserActionAtom } from '@suite-native/device';
10+
import { useFirmware } from '@suite-native/firmware';
1011
import { useTranslate } from '@suite-native/intl';
1112
import { Screen, ScreenHeader, ScreenProps } from '@suite-native/navigation';
1213

@@ -17,6 +18,7 @@ const DeviceOnboardingExitButtonScreenHeader = () => {
1718
const dispatch = useDispatch();
1819
const selectedDevice = useSelector(selectSelectedDevice);
1920
const setWasDeviceDisconnectedByUserAction = useSetAtom(wasDeviceDisconnectedByUserActionAtom);
21+
const { setIsFirmwareInstallationRunning } = useFirmware();
2022

2123
const handleExitButtonPress = useCallback(() => {
2224
showAlert({
@@ -30,12 +32,20 @@ const DeviceOnboardingExitButtonScreenHeader = () => {
3032
secondaryButtonVariant: 'redElevation0',
3133
onPressPrimaryButton: () => {
3234
if (selectedDevice) {
35+
setIsFirmwareInstallationRunning(false);
3336
setWasDeviceDisconnectedByUserAction(true);
3437
dispatch(deviceActions.deviceDisconnect(selectedDevice));
3538
}
3639
},
3740
});
38-
}, [dispatch, selectedDevice, setWasDeviceDisconnectedByUserAction, translate, showAlert]);
41+
}, [
42+
dispatch,
43+
selectedDevice,
44+
setWasDeviceDisconnectedByUserAction,
45+
setIsFirmwareInstallationRunning,
46+
translate,
47+
showAlert,
48+
]);
3949

4050
useEffect(() => {
4151
// Override default navigation GO_BACK action to align it with the exit button behavior.

suite-native/module-device-onboarding/src/screens/FirmwareInstallationScreen.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const FirmwareInstallationScreen = () => {
1717
<FirmwareInstallationScreenContent
1818
onFirmwareInstallationSuccess={handleFirmwareInstallationSuccess}
1919
isCancellationAllowed={false}
20+
isRetryAllowed={false}
2021
/>
2122
</DeviceOnboardingScreenWithExitButton>
2223
);

0 commit comments

Comments
 (0)