diff --git a/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModel.kt b/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModel.kt index 2195e3bcd1..cffa6c14f7 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModel.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModel.kt @@ -25,6 +25,7 @@ import org.signal.registration.RegistrationRoute import org.signal.registration.screens.EventDrivenViewModel import org.signal.registration.screens.util.navigateBack import org.signal.registration.screens.util.navigateTo +import kotlin.time.Duration.Companion.days /** * ViewModel for the registration lock PIN entry screen. @@ -173,8 +174,8 @@ class PinEntryForRegistrationLockViewModel( state } is NetworkController.RegisterAccountError.RegistrationLock -> { - Log.w(TAG, "[PinEntered] Still getting registration lock error after providing token. This shouldn't happen. Resetting state.") - parentEventEmitter(RegistrationFlowEvent.ResetState) + Log.w(TAG, "[PinEntered] Still getting registration lock error after providing token. This implies that the MasterKey and reglock token on AccountAttributes is out of sync. All we can do is report the account as locked.") + parentEventEmitter.navigateTo(RegistrationRoute.AccountLocked(7.days.inWholeMilliseconds)) state } is NetworkController.RegisterAccountError.RateLimited -> { diff --git a/feature/registration/src/test/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModelTest.kt b/feature/registration/src/test/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModelTest.kt index 8bd51f9cbb..6c5853e9c7 100644 --- a/feature/registration/src/test/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModelTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/screens/pinentry/PinEntryForRegistrationLockViewModelTest.kt @@ -27,6 +27,7 @@ import org.signal.registration.RegistrationFlowEvent import org.signal.registration.RegistrationFlowState import org.signal.registration.RegistrationRepository import org.signal.registration.RegistrationRoute +import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds class PinEntryForRegistrationLockViewModelTest { @@ -296,7 +297,7 @@ class PinEntryForRegistrationLockViewModelTest { } @Test - fun `PinEntered with registration lock error during registration emits ResetState`() = runTest { + fun `PinEntered with registration lock error during registration navigates to AccountLocked`() = runTest { val masterKey = mockk(relaxed = true) val registrationLockData = mockk(relaxed = true) val initialState = PinEntryState(mode = PinEntryState.Mode.RegistrationLock) @@ -312,7 +313,12 @@ class PinEntryForRegistrationLockViewModelTest { assertThat(emittedParentEvents).hasSize(2) assertThat(emittedParentEvents[0]).isInstanceOf() - assertThat(emittedParentEvents[1]).isEqualTo(RegistrationFlowEvent.ResetState) + assertThat(emittedParentEvents[1]) + .isInstanceOf() + .prop(RegistrationFlowEvent.NavigateToScreen::route) + .isInstanceOf() + .prop(RegistrationRoute.AccountLocked::timeRemainingMs) + .isEqualTo(7.days.inWholeMilliseconds) } @Test