Fix StatusBar not applying to Modal windows on Android#55721
Open
zoontek wants to merge 5 commits intofacebook:mainfrom
Open
Fix StatusBar not applying to Modal windows on Android#55721zoontek wants to merge 5 commits intofacebook:mainfrom
zoontek wants to merge 5 commits intofacebook:mainfrom
Conversation
Contributor
Author
|
Here is an example with transparent modals (it behaves like iOS) transparent-modal.mp4 |
3 tasks
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.
Summary:
Currently, when a
Modalis displayed on Android, it creates a newDialogwith its ownWindow. Modules likeStatusBarModuleonly apply their configuration to the main Activity's window, so status bar changes (color, style, visibility, translucency) are not reflected in Modal windows. This leads to visual inconsistencies where the status bar appearance resets when a Modal is shown.This PR introduces a
WindowEventListenerinterface that allows native modules to be notified when new windows are created or destroyed (e.g. Modal dialogs).StatusBarModuleis refactored to:WindowEventListenerto track extra windowsWindowextension functions (setStatusBarColor,setStatusBarStyle) intoWindowUtil.ktfor reuseThird-party libraries can also implement
WindowEventListenerand emit window events throughReactContext.onWindowCreated/ReactContext.onWindowDestroyed. This opens the door for libraries likeexpo-navigation-barto build a properNavigationBarmodule that stays in sync across all windows (including Modals), supports full transparency, and generally works the same wayStatusBarModulenow does.This also fixes a race condition that occurs when opening a Modal and changing the status bar state at the same time.
👉 Note that the interface and method names may be updated. Please feel free to suggest changes.
Related issues
Changelog:
[ANDROID] [ADDED] - Add
WindowEventListenerinterface to allow native modules to react to window creation/destruction (e.g. Modal dialogs)[ANDROID] [FIXED] - StatusBar configuration now applies to Modal windows, fixing visual inconsistencies
Test Plan:
modal-status-bar.mp4