-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Appearance: Cache colorScheme
in JavaScript
#46122
Conversation
Summary: Straightforward migration of the `Appearance` module to use ESM named exports. Changelog: [Internal] Reviewed By: TheSavior Differential Revision: D61567882
Summary: Updates `Appearance` on Android to supply the native module to `NativeEventEmitter` so that the native listener count can be managed like it is on iOS. This was previously required by macOS and iOS. Android and Windows also already implement: ``` interface NativeModule { addListener(eventType: string): void; removeListeners(count: number): void; } ``` So we should start passing `NativeAppearance` into the `NativeEventEmitter` constructor across all platforms. Changelog: [Internal] Reviewed By: TheSavior Differential Revision: D61567883
This pull request was exported from Phabricator. Differential Revision: D61567880 |
Summary: Currently, the implementation of `Appearance` duplicates the validation logic of string `colorScheme` values multiple times. This leads to more complicated code and also unnecessary work in certain edge cases (e.g. when `NativeAppearance` is not registered). This refactors `Appearance` to be simpler and to do less work. I've also configured `NativeAppearance.setColorScheme` to be non-nullable because it has existed since 2023. Changelog: [Internal] Differential Revision: D61567881
This pull request was exported from Phabricator. Differential Revision: D61567880 |
Summary: Pull Request resolved: facebook#46122 Implements a JavaScript cache for `colorScheme` in the `Appearance` module, so that we avoid potentially expensive and unnecessary native property accesses. Changelog: [General][Changed] - Improved `Appearance.getColorScheme` performance Reviewed By: rickhanlonii Differential Revision: D61567880
c45a303
to
5e84eac
Compare
This pull request was exported from Phabricator. Differential Revision: D61567880 |
Summary: Pull Request resolved: facebook#46122 Implements a JavaScript cache for `colorScheme` in the `Appearance` module, so that we avoid potentially expensive and unnecessary native property accesses. Changelog: [General][Changed] - Improved `Appearance.getColorScheme` performance Reviewed By: rickhanlonii Differential Revision: D61567880
5e84eac
to
8a4ee9f
Compare
This pull request was exported from Phabricator. Differential Revision: D61567880 |
Summary: Pull Request resolved: facebook#46122 Implements a JavaScript cache for `colorScheme` in the `Appearance` module, so that we avoid potentially expensive and unnecessary native property accesses. Changelog: [General][Changed] - Improved `Appearance.getColorScheme` performance Reviewed By: rickhanlonii Differential Revision: D61567880
8a4ee9f
to
34a7140
Compare
Summary: Pull Request resolved: facebook#46122 Implements a JavaScript cache for `colorScheme` in the `Appearance` module, so that we avoid potentially expensive and unnecessary native property accesses. Changelog: [General][Changed] - Improved `Appearance.getColorScheme` performance Reviewed By: rickhanlonii Differential Revision: D61567880
This pull request was exported from Phabricator. Differential Revision: D61567880 |
34a7140
to
92f8f7a
Compare
This pull request has been merged in 8f0f50f. |
} | ||
let colorScheme = null; | ||
if (NativeAppearance != null) { | ||
if (appearance == null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry to intervene, but I think I found a bug here, appearance.colorScheme
can be also null
here, which is not checked.
Reason: When I set the color scheme to null with setColorScheme
, the next call to getColorScheme
returns null
because of that missing condition preventing the colorScheme to get reset with the system color scheme, which in the end causes the function to return null
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @sangonz193 for the comment and the fix!
Summary:
Implements a JavaScript cache for
colorScheme
in theAppearance
module, so that we avoid potentially expensive and unnecessary native property accesses.Changelog:
[General][Changed] - Improved
Appearance.getColorScheme
performanceReviewed By: rickhanlonii
Differential Revision: D61567880