feat!: add partial night & day theme support (#1818)

* feat!: partial night & day theme support
* feat!: prefix core resource values files with cdv_
This commit is contained in:
エリス
2025-07-07 22:31:54 +09:00
committed by GitHub
parent cab5c5b7ec
commit 60d2842024
12 changed files with 108 additions and 47 deletions
+14 -26
View File
@@ -346,7 +346,7 @@ function updateProjectAccordingTo (platformConfig, locations) {
* @param {Object} locations A map of locations for this platform
*/
function updateProjectStrings (platformConfig, locations) {
// Update app name by editing res/values/strings.xml
// Update app name by editing res/values/cdv_strings.xml
const strings = xmlHelpers.parseElementtreeSync(locations.strings);
const name = platformConfig.name();
@@ -377,7 +377,7 @@ function warnForDeprecatedSplashScreen (cordovaProject) {
* @param {Object} locations A map of locations for this platform
*/
function updateProjectTheme (platformConfig, locations) {
// res/values/themes.xml
// res/values/cdv_themes.xml
const themes = xmlHelpers.parseElementtreeSync(locations.themes);
const splashScreenTheme = themes.find('style[@name="Theme.App.SplashScreen"]');
@@ -408,13 +408,17 @@ function updateProjectTheme (platformConfig, locations) {
if (!splashBg) {
splashBg = platformConfig.getPreference('BackgroundColor', this.platform);
}
if (!splashBg) {
splashBg = '@color/cdv_splashscreen_background';
}
// use the user defined value for "colors.xml"
updateProjectSplashScreenBackgroundColor(splashBg, locations);
events.emit('verbose', 'The Android Splash Screen background color was set to: ' +
(splashBg === '@color/cdv_splashscreen_background' ? 'Default' : splashBg)
);
// force the themes value to `@color/cdv_splashscreen_background`
const splashBgNode = splashScreenTheme.find('item[@name="windowSplashScreenBackground"]');
splashBgNode.text = '@color/cdv_splashscreen_background';
splashBgNode.text = splashBg;
[
// Splash Screen
@@ -471,7 +475,7 @@ function updateProjectTheme (platformConfig, locations) {
break;
case 'windowSplashScreenIconBackgroundColor':
// use the user defined value for "colors.xml"
// use the user defined value for "cdv_colors.xml"
updateProjectSplashScreenIconBackgroundColor(cdvConfigPrefValue, locations);
// force the themes value to `@color/cdv_splashscreen_icon_background`
@@ -495,7 +499,7 @@ function updateProjectTheme (platformConfig, locations) {
break;
case 'postSplashScreenTheme':
themeTargetNode.text = cdvConfigPrefValue || '@style/Theme.AppCompat.NoActionBar';
themeTargetNode.text = cdvConfigPrefValue || '@style/Theme.Cordova.App.DayNight';
break;
default:
@@ -507,29 +511,13 @@ function updateProjectTheme (platformConfig, locations) {
events.emit('verbose', 'Wrote out Android application themes to ' + locations.themes);
}
/**
* @param {String} splashBackgroundColor SplashScreen Background Color Hex Code
* be used to update project
* @param {Object} locations A map of locations for this platform
*/
function updateProjectSplashScreenBackgroundColor (splashBackgroundColor, locations) {
if (!splashBackgroundColor) { splashBackgroundColor = '#FFFFFF'; }
// res/values/colors.xml
const colors = xmlHelpers.parseElementtreeSync(locations.colors);
colors.find('color[@name="cdv_splashscreen_background"]').text = splashBackgroundColor.replace(/'/g, '\\\'');
fs.writeFileSync(locations.colors, colors.write({ indent: 4 }), 'utf-8');
events.emit('verbose', 'Wrote out Android application SplashScreen Color to ' + locations.colors);
}
/**
* @param {String} splashIconBackgroundColor SplashScreen Icon Background Color Hex Code
* be used to update project
* @param {Object} locations A map of locations for this platform
*/
function updateProjectSplashScreenIconBackgroundColor (splashIconBackgroundColor, locations) {
// res/values/colors.xml
// res/values/cdv_colors.xml
const colors = xmlHelpers.parseElementtreeSync(locations.colors);
// node name
const name = 'cdv_splashscreen_icon_background';
@@ -627,12 +615,12 @@ function updateProjectSplashScreenImage (locations, themeKey, cdvConfigPrefKey,
// copy the png to correct mipmap folder with name of ic_cdv_splashscreen.png
// delete ic_cdv_splashscreen.xml from drawable folder
// update themes.xml windowSplashScreenAnimatedIcon value to @mipmap/ic_cdv_splashscreen
// update cdv_themes.xml windowSplashScreenAnimatedIcon value to @mipmap/ic_cdv_splashscreen
cleanupAndSetProjectSplashScreenImage(cdvConfigPrefValue, destFilePath, possiblePreviousDestFilePath);
} else if (iconExtension === '.xml') {
// copy the xml to drawable folder with name of ic_cdv_splashscreen.xml
// delete ic_cdv_splashscreen.png from mipmap folder
// update themes.xml windowSplashScreenAnimatedIcon value to @drawable/ic_cdv_splashscreen
// update cdv_themes.xml windowSplashScreenAnimatedIcon value to @drawable/ic_cdv_splashscreen
cleanupAndSetProjectSplashScreenImage(cdvConfigPrefValue, destFilePath, possiblePreviousDestFilePath);
} else {
// use the default destFilePath & possiblePreviousDestFilePath, no update require.