Ensure isAppInForegroundAsState lifecycle observer removal occurs on the main thread#6033
Merged
VelikovPetar merged 4 commits intodevelopfrom Dec 12, 2025
Conversation
isAppInForegroundAsState lifecycle observer removal occurs on the main thread
Contributor
SDK Size Comparison 📏
|
…s_state_is_cleaned_up_on_main
andremion
reviewed
Dec 9, 2025
...oid-compose/src/main/java/io/getstream/chat/android/compose/util/IsAppInForegroundAsState.kt
Show resolved
Hide resolved
…s_state_is_cleaned_up_on_main
|
aleksandar-apostolov
approved these changes
Dec 12, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
There is threading issue with the Compose SDK that causes compose instrumented tests to fail with:
The cause is that the
isAppInForegroundAsState()composable adds a lifecycle observer, but when the composable is disposed during test cleanup, theawaitDisposeblock runs on theCompose test dispatcher thread(not themain thread), causing the violation.🛠 Implementation details
removeObserveris invoked on the main thread🎨 UI Changes
NA
🧪 Testing
ComposeNavigationTestand ensure it is successfulNote: I didn't add the test as part of this PR because it is just a quickly hacked test to verify the behaviour. We need a better setup before we add such tests to the project.
Provide the patch summary here