fix(android): ensure Appearance change listener does not skip events #46017
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.
Summary:
I'm able to reproduce a case when Appearance module methods are called in the following order:
starting point: dark mode enabled
setColorScheme
lightgetColorScheme
, which setscolorScheme
to light hereif (colorScheme != newColorScheme)
does not evaluate to true, so no event is dispatched to JS. That means JS is not in sync with the native state.The issue was the
getColorScheme
had a side-effect of settingcolorScheme
private member (not sure what its use was). The fix remembers the last emitted color scheme value and emits event if new value is different.Changelog:
[ANDROID] [FIXED] - ensure Appearance change listener does not skip events
Test Plan:
tested locally with RN tester