diff --git a/src/CONST.ts b/src/CONST.ts index 0e6c66c297fb..324e7c917387 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -417,6 +417,7 @@ const CONST = { BACKGROUND_IMAGE_TRANSITION_DURATION: 1000, IMAGE_SVG_TRANSITION_DURATION: 200, SCREEN_TRANSITION_END_TIMEOUT: 1000, + LIMIT_TIMEOUT: 2147483647, ARROW_HIDE_DELAY: 3000, MAX_IMAGE_CANVAS_AREA: 16777216, CHUNK_LOAD_ERROR: 'ChunkLoadError', diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 2484439efb5c..6042277257f1 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -509,11 +509,41 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie } const subMillisecondsTime = clearAfterTime.getTime() - currentTime.getTime(); if (subMillisecondsTime > 0) { - const timeoutID = setTimeout(() => { - clearStatus(); - }, subMillisecondsTime); + let intervalId: NodeJS.Timeout | null = null; + let timeoutId: NodeJS.Timeout | null = null; + + if (subMillisecondsTime > CONST.LIMIT_TIMEOUT) { + intervalId = setInterval(() => { + const now = new Date(); + const remainingTime = clearAfterTime.getTime() - now.getTime(); + + if (remainingTime <= 0) { + clearStatus(); + if (intervalId) { + clearInterval(intervalId); + } + } else if (remainingTime <= CONST.LIMIT_TIMEOUT) { + if (intervalId) { + clearInterval(intervalId); + } + timeoutId = setTimeout(() => { + clearStatus(); + }, remainingTime); + } + }, CONST.LIMIT_TIMEOUT); + } else { + timeoutId = setTimeout(() => { + clearStatus(); + }, subMillisecondsTime); + } + return () => { - clearTimeout(timeoutID); + if (intervalId) { + clearInterval(intervalId); + } + if (timeoutId) { + clearTimeout(timeoutId); + } }; }