diff --git a/desktop/flipper-frontend-core/src/devices/__tests__/BaseDevice.node.tsx b/desktop/flipper-frontend-core/src/devices/__tests__/BaseDevice.node.tsx index ccdfedb44..97f493b90 100644 --- a/desktop/flipper-frontend-core/src/devices/__tests__/BaseDevice.node.tsx +++ b/desktop/flipper-frontend-core/src/devices/__tests__/BaseDevice.node.tsx @@ -264,6 +264,7 @@ test('log listeners are resumed and suspended automatically - 1', async () => { enableMenuEntries: jest.fn(), selectPlugin: jest.fn(), showNotification: jest.fn(), + settings: jest.fn(), }); device.loadDevicePlugins( @@ -352,6 +353,7 @@ test('log listeners are resumed and suspended automatically - 2', async () => { enableMenuEntries: jest.fn(), selectPlugin: jest.fn(), showNotification: jest.fn(), + settings: jest.fn(), }); device.loadDevicePlugins( diff --git a/desktop/flipper-frontend-core/src/flipperLibImplementation/index.tsx b/desktop/flipper-frontend-core/src/flipperLibImplementation/index.tsx index b02e3b463..c28dc061a 100644 --- a/desktop/flipper-frontend-core/src/flipperLibImplementation/index.tsx +++ b/desktop/flipper-frontend-core/src/flipperLibImplementation/index.tsx @@ -31,7 +31,10 @@ export function baseFlipperLibImplementation( | 'showNotification' | 'createPaste' | 'intern' -> & {intern: Omit} { + | 'settings' +> & { + intern: Omit; +} { return { isFB: !constants.IS_PUBLIC_BUILD, logger, diff --git a/desktop/flipper-plugin-core/src/plugin/FlipperLib.tsx b/desktop/flipper-plugin-core/src/plugin/FlipperLib.tsx index 97476de99..98dd29757 100644 --- a/desktop/flipper-plugin-core/src/plugin/FlipperLib.tsx +++ b/desktop/flipper-plugin-core/src/plugin/FlipperLib.tsx @@ -207,6 +207,9 @@ export interface FlipperLib { }; remoteServerContext: RemoteServerContext; intern: InternAPI; + settings: () => { + isDarkMode: boolean; + }; } interface InternAPI { diff --git a/desktop/flipper-plugin-core/src/test-utils/test-utils.tsx b/desktop/flipper-plugin-core/src/test-utils/test-utils.tsx index b7027443f..956ec4389 100644 --- a/desktop/flipper-plugin-core/src/test-utils/test-utils.tsx +++ b/desktop/flipper-plugin-core/src/test-utils/test-utils.tsx @@ -106,6 +106,7 @@ export function createMockFlipperLib(options?: StartPluginOptions): FlipperLib { }, downloadFile: createStubFunction(), }, + settings: createStubFunction(), }; } diff --git a/desktop/flipper-server-companion/src/initializeFlipperLibImplementation.tsx b/desktop/flipper-server-companion/src/initializeFlipperLibImplementation.tsx index 9858a7639..0c71e1f9c 100644 --- a/desktop/flipper-server-companion/src/initializeFlipperLibImplementation.tsx +++ b/desktop/flipper-server-companion/src/initializeFlipperLibImplementation.tsx @@ -38,5 +38,8 @@ export function initializeFlipperLibImplementation( // TODO: Write to stdout/stderr? throw new Error('Not supported in headless context'); }, + settings() { + return {isDarkMode: false}; + }, }); } diff --git a/desktop/flipper-ui-core/src/utils/flipperLibImplementation/index.tsx b/desktop/flipper-ui-core/src/utils/flipperLibImplementation/index.tsx index 678a302dc..6889f7a0e 100644 --- a/desktop/flipper-ui-core/src/utils/flipperLibImplementation/index.tsx +++ b/desktop/flipper-ui-core/src/utils/flipperLibImplementation/index.tsx @@ -59,5 +59,16 @@ export function initializeFlipperLibImplementation( ); }, DetailsSidebarImplementation: DetailSidebarImpl, + settings() { + const darkModeState = store.getState().settingsState.darkMode; + let isDarkMode = darkModeState === 'dark'; + if ( + darkModeState === 'system' && + window.matchMedia('(prefers-color-scheme:dark)').matches + ) { + isDarkMode = true; + } + return {isDarkMode}; + }, }); }