1{"version":3,"file":"withAndroidIcons.js","names":["_configPlugins","data","require","_imageUtils","_fsExtra","_interopRequireDefault","_path","_withAndroidManifestIcons","obj","__esModule","default","Colors","AndroidConfig","dpiValues","mdpi","folderName","scale","hdpi","xhdpi","xxhdpi","xxxhdpi","exports","BASELINE_PIXEL_SIZE","ANDROID_RES_PATH","MIPMAP_ANYDPI_V26","ICON_BACKGROUND","IC_LAUNCHER_PNG","IC_LAUNCHER_ROUND_PNG","IC_LAUNCHER_BACKGROUND_PNG","IC_LAUNCHER_FOREGROUND_PNG","IC_LAUNCHER_MONOCHROME_PNG","IC_LAUNCHER_XML","IC_LAUNCHER_ROUND_XML","withAndroidIcons","config","foregroundImage","backgroundColor","backgroundImage","monochromeImage","getAdaptiveIcon","icon","getIcon","withAndroidManifestIcons","withAndroidAdaptiveIconColors","withDangerousMod","_config$android","setIconAsync","modRequest","projectRoot","isAdaptive","android","adaptiveIcon","setRoundIconManifest","manifest","_config$android2","application","Manifest","getMainApplicationOrThrow","$","withAndroidColors","modResults","setBackgroundColor","_config$android3","_config$android$adapt","_config$android4","_config$android4$adap","_config$android$adapt2","_config$android5","_config$android5$adap","_config$android$adapt3","_config$android6","_config$android6$adap","_config$android$adapt4","_config$android7","_config$android7$adap","configureLegacyIconAsync","generateRoundIconAsync","deleteIconNamedAsync","configureAdaptiveIconAsync","generateMultiLayerImageAsync","outputImageFileName","imageCacheFolder","backgroundImageCacheFolder","borderRadiusRatio","generateMonochromeImageAsync","backgroundImageFileName","icLauncherXmlString","createAdaptiveIconXmlString","createAdaptiveIconXmlFiles","colors","assignColorValue","value","name","background","iconElements","push","join","add","anyDpiV26Directory","path","resolve","fs","ensureDir","launcherPath","launcherRoundPath","Promise","all","writeFile","map","existsSync","remove","iterateDpiValues","dpiFolder","iconLayer","generateIconAsync","cacheType","src","backgroundLayer","compositeImagesAsync","foreground","monochromeIcon","callback","Object","values","iconSizePx","generateImageAsync","width","height","resizeMode","borderRadius","undefined","source"],"sources":["../../../src/plugins/icons/withAndroidIcons.ts"],"sourcesContent":["import {\n  AndroidConfig,\n  ConfigPlugin,\n  withAndroidColors,\n  withDangerousMod,\n} from '@expo/config-plugins';\nimport { ResourceXML } from '@expo/config-plugins/build/android/Resources';\nimport { ExpoConfig } from '@expo/config-types';\nimport { compositeImagesAsync, generateImageAsync } from '@expo/image-utils';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nimport { withAndroidManifestIcons } from './withAndroidManifestIcons';\n\nconst { Colors } = AndroidConfig;\n\ntype DPIString = 'mdpi' | 'hdpi' | 'xhdpi' | 'xxhdpi' | 'xxxhdpi';\ntype dpiMap = Record<DPIString, { folderName: string; scale: number }>;\n\nexport const dpiValues: dpiMap = {\n  mdpi: { folderName: 'mipmap-mdpi', scale: 1 },\n  hdpi: { folderName: 'mipmap-hdpi', scale: 1.5 },\n  xhdpi: { folderName: 'mipmap-xhdpi', scale: 2 },\n  xxhdpi: { folderName: 'mipmap-xxhdpi', scale: 3 },\n  xxxhdpi: { folderName: 'mipmap-xxxhdpi', scale: 4 },\n};\nconst BASELINE_PIXEL_SIZE = 108;\nexport const ANDROID_RES_PATH = 'android/app/src/main/res/';\nconst MIPMAP_ANYDPI_V26 = 'mipmap-anydpi-v26';\nconst ICON_BACKGROUND = 'iconBackground';\nconst IC_LAUNCHER_PNG = 'ic_launcher.png';\nconst IC_LAUNCHER_ROUND_PNG = 'ic_launcher_round.png';\nconst IC_LAUNCHER_BACKGROUND_PNG = 'ic_launcher_background.png';\nconst IC_LAUNCHER_FOREGROUND_PNG = 'ic_launcher_foreground.png';\nconst IC_LAUNCHER_MONOCHROME_PNG = 'ic_launcher_monochrome.png';\nconst IC_LAUNCHER_XML = 'ic_launcher.xml';\nconst IC_LAUNCHER_ROUND_XML = 'ic_launcher_round.xml';\n\nexport const withAndroidIcons: ConfigPlugin = (config) => {\n  const { foregroundImage, backgroundColor, backgroundImage, monochromeImage } =\n    getAdaptiveIcon(config);\n  const icon = foregroundImage ?? getIcon(config);\n\n  if (!icon) {\n    return config;\n  }\n\n  config = withAndroidManifestIcons(config);\n  // Apply colors.xml changes\n  config = withAndroidAdaptiveIconColors(config, backgroundColor);\n  return withDangerousMod(config, [\n    'android',\n    async (config) => {\n      await setIconAsync(config.modRequest.projectRoot, {\n        icon,\n        backgroundColor,\n        backgroundImage,\n        monochromeImage,\n        isAdaptive: !!config.android?.adaptiveIcon,\n      });\n      return config;\n    },\n  ]);\n};\n\nexport function setRoundIconManifest(\n  config: Pick<ExpoConfig, 'android'>,\n  manifest: AndroidConfig.Manifest.AndroidManifest\n): AndroidConfig.Manifest.AndroidManifest {\n  const isAdaptive = !!config.android?.adaptiveIcon;\n  const application = AndroidConfig.Manifest.getMainApplicationOrThrow(manifest);\n\n  if (isAdaptive) {\n    application.$['android:roundIcon'] = '@mipmap/ic_launcher_round';\n  } else {\n    delete application.$['android:roundIcon'];\n  }\n  return manifest;\n}\n\nconst withAndroidAdaptiveIconColors: ConfigPlugin<string | null> = (config, backgroundColor) => {\n  return withAndroidColors(config, (config) => {\n    config.modResults = setBackgroundColor(backgroundColor ?? '#FFFFFF', config.modResults);\n    return config;\n  });\n};\n\nexport function getIcon(config: ExpoConfig) {\n  return config.android?.icon || config.icon || null;\n}\n\nexport function getAdaptiveIcon(config: ExpoConfig) {\n  return {\n    foregroundImage: config.android?.adaptiveIcon?.foregroundImage ?? null,\n    backgroundColor: config.android?.adaptiveIcon?.backgroundColor ?? null,\n    backgroundImage: config.android?.adaptiveIcon?.backgroundImage ?? null,\n    monochromeImage: config.android?.adaptiveIcon?.monochromeImage ?? null,\n  };\n}\n\n/**\n * Resizes the user-provided icon to create a set of legacy icon files in\n * their respective \"mipmap\" directories for <= Android 7, and creates a set of adaptive\n * icon files for > Android 7 from the adaptive icon files (if provided).\n */\nexport async function setIconAsync(\n  projectRoot: string,\n  {\n    icon,\n    backgroundColor,\n    backgroundImage,\n    monochromeImage,\n    isAdaptive,\n  }: {\n    icon: string | null;\n    backgroundColor: string | null;\n    backgroundImage: string | null;\n    monochromeImage: string | null;\n    isAdaptive: boolean;\n  }\n) {\n  if (!icon) {\n    return null;\n  }\n\n  await configureLegacyIconAsync(projectRoot, icon, backgroundImage, backgroundColor);\n  if (isAdaptive) {\n    await generateRoundIconAsync(projectRoot, icon, backgroundImage, backgroundColor);\n  } else {\n    await deleteIconNamedAsync(projectRoot, IC_LAUNCHER_ROUND_PNG);\n  }\n  await configureAdaptiveIconAsync(projectRoot, icon, backgroundImage, monochromeImage, isAdaptive);\n\n  return true;\n}\n\n/**\n * Configures legacy icon files to be used on Android 7 and earlier. If adaptive icon configuration\n * was provided, we create a pseudo-adaptive icon by layering the provided files (or background\n * color if no backgroundImage is provided. If no backgroundImage and no backgroundColor are provided,\n * the background is set to transparent.)\n */\nasync function configureLegacyIconAsync(\n  projectRoot: string,\n  icon: string,\n  backgroundImage: string | null,\n  backgroundColor: string | null\n) {\n  return generateMultiLayerImageAsync(projectRoot, {\n    icon,\n    backgroundImage,\n    backgroundColor,\n    outputImageFileName: IC_LAUNCHER_PNG,\n    imageCacheFolder: 'android-standard-square',\n    backgroundImageCacheFolder: 'android-standard-square-background',\n  });\n}\n\nasync function generateRoundIconAsync(\n  projectRoot: string,\n  icon: string,\n  backgroundImage: string | null,\n  backgroundColor: string | null\n) {\n  return generateMultiLayerImageAsync(projectRoot, {\n    icon,\n    borderRadiusRatio: 0.5,\n    outputImageFileName: IC_LAUNCHER_ROUND_PNG,\n    backgroundImage,\n    backgroundColor,\n    imageCacheFolder: 'android-standard-circle',\n    backgroundImageCacheFolder: 'android-standard-round-background',\n  });\n}\n\n/**\n * Configures adaptive icon files to be used on Android 8 and up. A foreground image must be provided,\n * and will have a transparent background unless:\n * - A backgroundImage is provided, or\n * - A backgroundColor was specified\n */\nexport async function configureAdaptiveIconAsync(\n  projectRoot: string,\n  foregroundImage: string,\n  backgroundImage: string | null,\n  monochromeImage: string | null,\n  isAdaptive: boolean\n) {\n  if (monochromeImage) {\n    await generateMonochromeImageAsync(projectRoot, {\n      icon: monochromeImage,\n      imageCacheFolder: 'android-adaptive-monochrome',\n      outputImageFileName: IC_LAUNCHER_MONOCHROME_PNG,\n    });\n  }\n  await generateMultiLayerImageAsync(projectRoot, {\n    backgroundColor: 'transparent',\n    backgroundImage,\n    backgroundImageCacheFolder: 'android-adaptive-background',\n    outputImageFileName: IC_LAUNCHER_FOREGROUND_PNG,\n    icon: foregroundImage,\n    imageCacheFolder: 'android-adaptive-foreground',\n    backgroundImageFileName: IC_LAUNCHER_BACKGROUND_PNG,\n  });\n\n  // create ic_launcher.xml and ic_launcher_round.xml\n  const icLauncherXmlString = createAdaptiveIconXmlString(backgroundImage, monochromeImage);\n  await createAdaptiveIconXmlFiles(\n    projectRoot,\n    icLauncherXmlString,\n    // If the user only defined icon and not android.adaptiveIcon, then skip enabling the layering system\n    // this will scale the image down and present it uncropped.\n    isAdaptive\n  );\n}\n\nfunction setBackgroundColor(backgroundColor: string | null, colors: ResourceXML) {\n  return Colors.assignColorValue(colors, {\n    value: backgroundColor,\n    name: ICON_BACKGROUND,\n  });\n}\n\nexport const createAdaptiveIconXmlString = (\n  backgroundImage: string | null,\n  monochromeImage: string | null\n) => {\n  const background = backgroundImage ? `@mipmap/ic_launcher_background` : `@color/iconBackground`;\n\n  const iconElements: string[] = [\n    `<background android:drawable=\"${background}\"/>`,\n    '<foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>',\n  ];\n\n  if (monochromeImage) {\n    iconElements.push('<monochrome android:drawable=\"@mipmap/ic_launcher_monochrome\"/>');\n  }\n\n  return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    ${iconElements.join('\\n    ')}\n</adaptive-icon>`;\n};\n\nasync function createAdaptiveIconXmlFiles(\n  projectRoot: string,\n  icLauncherXmlString: string,\n  add: boolean\n) {\n  const anyDpiV26Directory = path.resolve(projectRoot, ANDROID_RES_PATH, MIPMAP_ANYDPI_V26);\n  await fs.ensureDir(anyDpiV26Directory);\n  const launcherPath = path.resolve(anyDpiV26Directory, IC_LAUNCHER_XML);\n  const launcherRoundPath = path.resolve(anyDpiV26Directory, IC_LAUNCHER_ROUND_XML);\n  if (add) {\n    await Promise.all([\n      fs.writeFile(launcherPath, icLauncherXmlString),\n      fs.writeFile(launcherRoundPath, icLauncherXmlString),\n    ]);\n  } else {\n    // Remove the xml if the icon switches from adaptive to standard.\n    await Promise.all(\n      [launcherPath, launcherRoundPath].map(async (path) => {\n        if (fs.existsSync(path)) {\n          return fs.remove(path);\n        }\n      })\n    );\n  }\n}\n\nasync function generateMultiLayerImageAsync(\n  projectRoot: string,\n  {\n    icon,\n    backgroundColor,\n    backgroundImage,\n    imageCacheFolder,\n    backgroundImageCacheFolder,\n    borderRadiusRatio,\n    outputImageFileName,\n    backgroundImageFileName,\n  }: {\n    icon: string;\n    backgroundImage: string | null;\n    backgroundColor: string | null;\n    imageCacheFolder: string;\n    backgroundImageCacheFolder: string;\n    backgroundImageFileName?: string;\n    borderRadiusRatio?: number;\n    outputImageFileName: string;\n  }\n) {\n  await iterateDpiValues(projectRoot, async ({ dpiFolder, scale }) => {\n    let iconLayer = await generateIconAsync(projectRoot, {\n      cacheType: imageCacheFolder,\n      src: icon,\n      scale,\n      // backgroundImage overrides backgroundColor\n      backgroundColor: backgroundImage ? 'transparent' : backgroundColor ?? 'transparent',\n      borderRadiusRatio,\n    });\n\n    if (backgroundImage) {\n      const backgroundLayer = await generateIconAsync(projectRoot, {\n        cacheType: backgroundImageCacheFolder,\n        src: backgroundImage,\n        scale,\n        backgroundColor: 'transparent',\n        borderRadiusRatio,\n      });\n\n      if (backgroundImageFileName) {\n        await fs.writeFile(path.resolve(dpiFolder, backgroundImageFileName), backgroundLayer);\n      } else {\n        iconLayer = await compositeImagesAsync({\n          foreground: iconLayer,\n          background: backgroundLayer,\n        });\n      }\n    } else if (backgroundImageFileName) {\n      // Remove any instances of ic_launcher_background.png that are there from previous icons\n      await deleteIconNamedAsync(projectRoot, backgroundImageFileName);\n    }\n\n    await fs.ensureDir(dpiFolder);\n    await fs.writeFile(path.resolve(dpiFolder, outputImageFileName), iconLayer);\n  });\n}\n\nasync function generateMonochromeImageAsync(\n  projectRoot: string,\n  {\n    icon,\n    imageCacheFolder,\n    outputImageFileName,\n  }: { icon: string; imageCacheFolder: string; outputImageFileName: string }\n) {\n  await iterateDpiValues(projectRoot, async ({ dpiFolder, scale }) => {\n    const monochromeIcon = await generateIconAsync(projectRoot, {\n      cacheType: imageCacheFolder,\n      src: icon,\n      scale,\n      backgroundColor: 'transparent',\n    });\n    await fs.ensureDir(dpiFolder);\n    await fs.writeFile(path.resolve(dpiFolder, outputImageFileName), monochromeIcon);\n  });\n}\n\nfunction iterateDpiValues(\n  projectRoot: string,\n  callback: (value: { dpiFolder: string; folderName: string; scale: number }) => Promise<void>\n) {\n  return Promise.all(\n    Object.values(dpiValues).map((value) =>\n      callback({\n        dpiFolder: path.resolve(projectRoot, ANDROID_RES_PATH, value.folderName),\n        ...value,\n      })\n    )\n  );\n}\n\nasync function deleteIconNamedAsync(projectRoot: string, name: string) {\n  return iterateDpiValues(projectRoot, ({ dpiFolder }) => {\n    return fs.remove(path.resolve(dpiFolder, name));\n  });\n}\n\nasync function generateIconAsync(\n  projectRoot: string,\n  {\n    cacheType,\n    src,\n    scale,\n    backgroundColor,\n    borderRadiusRatio,\n  }: {\n    cacheType: string;\n    src: string;\n    scale: number;\n    backgroundColor: string;\n    borderRadiusRatio?: number;\n  }\n) {\n  const iconSizePx = BASELINE_PIXEL_SIZE * scale;\n\n  return (\n    await generateImageAsync(\n      { projectRoot, cacheType },\n      {\n        src,\n        width: iconSizePx,\n        height: iconSizePx,\n        resizeMode: 'cover',\n        backgroundColor,\n        borderRadius: borderRadiusRatio ? iconSizePx * borderRadiusRatio : undefined,\n      }\n    )\n  ).source;\n}\n"],"mappings":"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"}