function updateProjectSplashScreenImage()

in lib/prepare.js [573:642]


function updateProjectSplashScreenImage (locations, themeKey, cdvConfigPrefKey, cdvConfigPrefValue = '') {
    const SPLASH_SCREEN_IMAGE_BY_THEME_KEY = {
        windowSplashScreenAnimatedIcon: 'ic_cdv_splashscreen',
        'android:windowSplashScreenBrandingImage': 'ic_cdv_splashscreen_branding'
    };

    const destFileName = SPLASH_SCREEN_IMAGE_BY_THEME_KEY[themeKey] || null;
    if (!destFileName) throw new CordovaError(`${themeKey} is not valid for image detection.`);

    // Default paths of where images are saved
    const destPngDir = path.join(locations.res, 'drawable-nodpi');
    const destXmlDir = path.join(locations.res, 'drawable');

    // Dest File Name and Path
    const destFileNameExt = destFileName + '.xml';
    let destFilePath = path.join(destXmlDir, destFileNameExt);
    let possiblePreviousDestFilePath = path.join(destPngDir, destFileName + '.png');

    // Default Drawable Source File
    let defaultSrcFilePath = null;

    if (themeKey !== 'android:windowSplashScreenBrandingImage') {
        try {
            // coming from user project
            defaultSrcFilePath = require.resolve('cordova-android/templates/project/res/drawable/' + destFileNameExt);
        } catch (e) {
            // coming from repo test & coho
            defaultSrcFilePath = require.resolve('../templates/project/res/drawable/' + destFileNameExt);
        }
    }

    if (!cdvConfigPrefValue || !fs.existsSync(cdvConfigPrefValue)) {
        let emitType = 'verbose';
        let emmitMessage = `The "${cdvConfigPrefKey}" is undefined. Cordova's default will be used.`;

        if (cdvConfigPrefValue && !fs.existsSync(cdvConfigPrefValue)) {
            emitType = 'warn';
            emmitMessage = `The "${cdvConfigPrefKey}" value does not exist. Cordova's default will be used.`;
        }

        events.emit(emitType, emmitMessage);
        const cleanupOnly = themeKey === 'android:windowSplashScreenBrandingImage';
        cleanupAndSetProjectSplashScreenImage(defaultSrcFilePath, destFilePath, possiblePreviousDestFilePath, cleanupOnly);
        return;
    }

    const iconExtension = path.extname(cdvConfigPrefValue).toLowerCase();

    if (iconExtension === '.png') {
        // Put the image at this location.
        destFilePath = path.join(destPngDir, destFileName + '.png');

        // Check for this file and remove.
        possiblePreviousDestFilePath = path.join(destXmlDir, destFileName + '.xml');

        // 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
        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
        cleanupAndSetProjectSplashScreenImage(cdvConfigPrefValue, destFilePath, possiblePreviousDestFilePath);
    } else {
        // use the default destFilePath & possiblePreviousDestFilePath, no update require.
        events.emit('warn', `The "${cdvConfigPrefKey}" had an unsupported extension. Cordova's default will be used.`);
        cleanupAndSetProjectSplashScreenImage(defaultSrcFilePath, destFilePath, possiblePreviousDestFilePath);
    }
}