diff --git a/frameworks/bridge/declarative_frontend/engine/arkTheme.js b/frameworks/bridge/declarative_frontend/engine/arkTheme.js index 462521accdd81a14e7ef46745c08ab57ae09a4a3..e22f9e589d498a40f9dc3503e132e304f8a3feb5 100644 --- a/frameworks/bridge/declarative_frontend/engine/arkTheme.js +++ b/frameworks/bridge/declarative_frontend/engine/arkTheme.js @@ -40,17 +40,23 @@ class ArkThemeNativeHelper { if (colorMode && colorMode !== ThemeColorMode.SYSTEM) { ArkThemeScopeManager.getInstance().onEnterLocalColorMode(colorMode); } - getUINativeModule().theme.createAndBindTheme(themeScopeId, themeId, ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors), colorMode, onThemeScopeDestroy); + let useColors = theme?.colors; + if (colorMode === ThemeColorMode.DARK && theme?.colorsDark) { + useColors = theme.colorsDark; + } + getUINativeModule().theme.createAndBindTheme(themeScopeId, themeId, ArkThemeNativeHelper.convertColorsToArray(useColors), colorMode, onThemeScopeDestroy); if (colorMode && colorMode !== ThemeColorMode.SYSTEM) { ArkThemeScopeManager.getInstance().onExitLocalColorMode(); } } static setDefaultTheme(theme) { - const colorArray = ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors); + // const colorArray = ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors); + const colorArrayLight = ArkThemeNativeHelper.convertColorsToArray(theme?.colors); + const colorArrayDark = ArkThemeNativeHelper.convertColorsToArray(theme?.colorsDark || theme?.colors); ArkThemeScopeManager.getInstance().onEnterLocalColorMode(ThemeColorMode.LIGHT); - getUINativeModule().theme.setDefaultTheme(colorArray, false); + getUINativeModule().theme.setDefaultTheme(colorArrayLight, false); ArkThemeScopeManager.getInstance().onEnterLocalColorMode(ThemeColorMode.DARK); - getUINativeModule().theme.setDefaultTheme(colorArray, true); + getUINativeModule().theme.setDefaultTheme(colorArrayDark, true); ArkThemeScopeManager.getInstance().onExitLocalColorMode(); } static convertThemeToColorArray(theme) { @@ -276,6 +282,10 @@ class ArkThemeBase { copyTheme.colors = {}; Object.assign(copyTheme.colors, customTheme.colors); } + if (customTheme.colorsDark) { + copyTheme.colorsDark = {}; + Object.assign(copyTheme.colorsDark, customTheme.colorsDark); + } if (customTheme.shapes) { copyTheme.shapes = {}; Object.assign(copyTheme.shapes, customTheme.shapes); @@ -685,7 +695,11 @@ class ArkThemeImpl extends ArkThemeBase { super(baselineTheme.id, undefined, colorMode, new ArkColorsImpl(undefined, baselineTheme.colors), new ArkShapesImpl(undefined, baselineTheme.shapes), new ArkTypographyImpl(undefined, baselineTheme.typography)); return; } - super(baselineTheme.id, customTheme, colorMode, new ArkColorsImpl(customTheme.colors, baselineTheme.colors), new ArkShapesImpl(customTheme.shapes, baselineTheme.shapes), new ArkTypographyImpl(customTheme.typography, baselineTheme.typography)); + let useColors = customTheme.colors; + if (colorMode === ThemeColorMode.DARK && customTheme.colorsDark) { + useColors = customTheme.colorsDark; + } + super(baselineTheme.id, customTheme, colorMode, new ArkColorsImpl(useColors, baselineTheme.colors), new ArkShapesImpl(customTheme.shapes, baselineTheme.shapes), new ArkTypographyImpl(customTheme.typography, baselineTheme.typography)); } } class ArkThemeScopeItem { @@ -1013,8 +1027,13 @@ class ArkThemeScopeManager { makeTheme(customTheme, colorMode) { var _a; const baselineTheme = (_a = this.defaultTheme) !== null && _a !== void 0 ? _a : ArkThemeScopeManager.SystemTheme; - const theme = ArkThemeCache.getInstance().get(baselineTheme.id, customTheme, colorMode); - return theme ? theme : new ArkThemeImpl(customTheme, colorMode, baselineTheme); + let themeColors = customTheme?.colors; + if (colorMode === ThemeColorMode.DARK && customTheme?.colorsDark) { + themeColors = customTheme.colorsDark; + } + const realTheme = customTheme ? { ...customTheme, colors: themeColors } : undefined; + const theme = ArkThemeCache.getInstance().get(baselineTheme.id, realTheme, colorMode); + return theme ? theme : new ArkThemeImpl(realTheme, colorMode, baselineTheme); } static cloneCustomThemeWithExpand(customTheme) { const theme = ArkThemeBase.copyCustomTheme(customTheme);