Prevent focusing message if the listState flow was cancelled before a message item was loaded. #5854
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎯 Goal
Resolves: https://linear.app/stream/issue/AND-634/upgrade-to-latest-stream-sdk-causing-illegalstateexception-crash-in
Prevents calling
focusMessage
in theinit
block of theMessageListController
if thelistState
flow was cancelled before a message was loaded. The following setup in theinitialFocusMessage()
method:behaves in the following way: The
onCompletion
block will be invoked in two scenarios:.first { it.messageItems.isNotEmpty() }
)scope
)We should prevent calling the
focusChannelMessage
from theonCompletion
block in the case when the flow cancelled, because the UI might not be present anymore OR no messages are loaded yet OR the user could already be disconnected.Note: The crash stack trace is: ChatClient::connectUser() must be called before resolving any dependency - but the crash is triggered much earlier in the flow in the
focusMessage
method, where we attempt to focus a message when we cancel the MessageList scope.(See attached videos and testing for reproduction steps)
🛠 Implementation details
focusChannelMessage
from theonCompleted
block in theMessageListController.initialFocusMessage()
message.🎨 UI Changes
focus-message-crash-before.mp4
focus-message-crash-after.mp4
🧪 Testing
Currently only reproduce-able after a process death
MessageList
in loading state (because we don't have reconnect logic after process death)scope
)