From a063985adcda83a236dcd01c3914ad63e0a06fdf Mon Sep 17 00:00:00 2001 From: Matej Kriz Date: Fri, 17 Jan 2025 15:00:09 +0100 Subject: [PATCH] fix(suite-native): handle device errors only if welcome flow is already completed --- .../device/src/hooks/useDetectDeviceError.tsx | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/suite-native/device/src/hooks/useDetectDeviceError.tsx b/suite-native/device/src/hooks/useDetectDeviceError.tsx index ec6bd2f77b9..a7598a0d2af 100644 --- a/suite-native/device/src/hooks/useDetectDeviceError.tsx +++ b/suite-native/device/src/hooks/useDetectDeviceError.tsx @@ -27,6 +27,7 @@ import { RootStackRoutes, AuthorizeDeviceStackRoutes, } from '@suite-native/navigation'; +import { selectIsOnboardingFinished } from '@suite-native/settings'; import { selectDeviceError, selectIsDeviceFirmwareSupported } from '../selectors'; import { IncompatibleFirmwareModalAppendix } from '../components/IncompatibleFirmwareModalAppendix'; @@ -57,6 +58,7 @@ export const useDetectDeviceError = () => { const isNoPhysicalDeviceConnected = useSelector(selectIsNoPhysicalDeviceConnected); const isDeviceInBootloader = useSelector(selectIsDeviceInBootloader); const hasDeviceFirmwareInstalled = useSelector(selectHasDeviceFirmwareInstalled); + const isOnboardingFinished = useSelector(selectIsOnboardingFinished); const isDeviceFirmwareSupported = useSelector(selectIsDeviceFirmwareSupported); const deviceError = useSelector(selectDeviceError); @@ -79,7 +81,7 @@ export const useDetectDeviceError = () => { // If device is unacquired (restarted app, another app fetched device session, ...), // we cannot work with device anymore. Shouldn't happen on mobile app but just in case. useEffect(() => { - if (isUnacquiredDevice) { + if (isUnacquiredDevice && isOnboardingFinished) { showAlert({ title: , description: , @@ -92,10 +94,15 @@ export const useDetectDeviceError = () => { } else { hideAlert(); } - }, [isUnacquiredDevice, dispatch, hideAlert, showAlert]); + }, [isOnboardingFinished, isUnacquiredDevice, dispatch, hideAlert, showAlert]); useEffect(() => { - if (!isDeviceFirmwareSupported && !isPortfolioTrackerDevice && !wasDeviceEjectedByUser) { + if ( + !isDeviceFirmwareSupported && + isOnboardingFinished && + !isPortfolioTrackerDevice && + !wasDeviceEjectedByUser + ) { showAlert({ title: , description: , @@ -115,6 +122,7 @@ export const useDetectDeviceError = () => { } }, [ isDeviceFirmwareSupported, + isOnboardingFinished, isPortfolioTrackerDevice, wasDeviceEjectedByUser, dispatch, @@ -123,6 +131,8 @@ export const useDetectDeviceError = () => { ]); useEffect(() => { + if (!isOnboardingFinished) return; + if ( isConnectedDeviceUninitialized && !wasDeviceEjectedByUser && @@ -173,6 +183,7 @@ export const useDetectDeviceError = () => { }, [ hasDeviceFirmwareInstalled, isConnectedDeviceUninitialized, + isOnboardingFinished, isUnacquiredDevice, wasDeviceEjectedByUser, showAlert, @@ -182,7 +193,12 @@ export const useDetectDeviceError = () => { ]); useEffect(() => { - if (isDeviceInBootloader && hasDeviceFirmwareInstalled && !wasDeviceEjectedByUser) { + if ( + isDeviceInBootloader && + hasDeviceFirmwareInstalled && + !wasDeviceEjectedByUser && + isOnboardingFinished + ) { showAlert({ title: , description: , @@ -202,6 +218,7 @@ export const useDetectDeviceError = () => { } }, [ isDeviceInBootloader, + isOnboardingFinished, hasDeviceFirmwareInstalled, wasDeviceEjectedByUser, showAlert, @@ -209,7 +226,7 @@ export const useDetectDeviceError = () => { ]); useEffect(() => { - if (deviceError && !isUnacquiredDevice) { + if (deviceError && !isUnacquiredDevice && isOnboardingFinished) { Sentry.captureException(new Error(`device error - ${deviceError}`)); showAlert({ @@ -234,7 +251,15 @@ export const useDetectDeviceError = () => { testID: '@device/errors/alert/error', }); } - }, [deviceError, handleDisconnect, showAlert, openLink, navigation, isUnacquiredDevice]); + }, [ + deviceError, + handleDisconnect, + isOnboardingFinished, + isUnacquiredDevice, + navigation, + openLink, + showAlert, + ]); useEffect(() => { // Hide the error alert when the device is disconnected.