Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b33223db authored by Abhishek Aggarwal's avatar Abhishek Aggarwal
Browse files

fix(login): make beginSubmission a single state update

parent e4e817c2
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -150,17 +150,19 @@ class LoginViewModel @Inject constructor(
    }

    private fun beginSubmission(): Boolean {
        // Atomic compare-and-set: the first caller to flip isSubmitting false -> true wins and
        // returns true. A read-modify-write on _uiState.value would let two concurrent callers
        // both read isSubmitting=false and both proceed, kicking off duplicate submissions.
        while (true) {
            val currentState = _uiState.value
        if (currentState.isSubmitting) {
            return false
        }

        _uiState.value = currentState.copy(
            if (currentState.isSubmitting) return false
            val nextState = currentState.copy(
                isSubmitting = true,
                errorMessage = null,
                navigationTarget = null,
            )
        return true
            if (_uiState.compareAndSet(currentState, nextState)) return true
        }
    }

    private fun finishSubmission() {