@expo/prebuild-config 5.0.7 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/build/getAutolinkedPackages.js +3 -13
  2. package/build/getAutolinkedPackages.js.map +1 -1
  3. package/build/getPrebuildConfig.js +9 -24
  4. package/build/getPrebuildConfig.js.map +1 -1
  5. package/build/importExpoModulesAutolinking.d.ts +3 -3
  6. package/build/importExpoModulesAutolinking.js +0 -5
  7. package/build/importExpoModulesAutolinking.js.map +1 -1
  8. package/build/index.js +0 -5
  9. package/build/index.js.map +1 -1
  10. package/build/plugins/icons/AssetContents.d.ts +3 -3
  11. package/build/plugins/icons/AssetContents.js +1 -10
  12. package/build/plugins/icons/AssetContents.js.map +1 -1
  13. package/build/plugins/icons/withAndroidIcons.d.ts +7 -5
  14. package/build/plugins/icons/withAndroidIcons.js +52 -71
  15. package/build/plugins/icons/withAndroidIcons.js.map +1 -1
  16. package/build/plugins/icons/withAndroidManifestIcons.js +0 -10
  17. package/build/plugins/icons/withAndroidManifestIcons.js.map +1 -1
  18. package/build/plugins/icons/withIosIcons.js +24 -48
  19. package/build/plugins/icons/withIosIcons.js.map +1 -1
  20. package/build/plugins/unversioned/createLegacyPlugin.js +0 -11
  21. package/build/plugins/unversioned/createLegacyPlugin.js.map +1 -1
  22. package/build/plugins/unversioned/expo-ads-admob/expo-ads-admob.js +0 -11
  23. package/build/plugins/unversioned/expo-ads-admob/expo-ads-admob.js.map +1 -1
  24. package/build/plugins/unversioned/expo-ads-admob/withAndroidAdMob.js +0 -14
  25. package/build/plugins/unversioned/expo-ads-admob/withAndroidAdMob.js.map +1 -1
  26. package/build/plugins/unversioned/expo-ads-admob/withIosAdMob.js +5 -14
  27. package/build/plugins/unversioned/expo-ads-admob/withIosAdMob.js.map +1 -1
  28. package/build/plugins/unversioned/expo-apple-authentication.js +0 -11
  29. package/build/plugins/unversioned/expo-apple-authentication.js.map +1 -1
  30. package/build/plugins/unversioned/expo-branch/expo-branch.js +4 -13
  31. package/build/plugins/unversioned/expo-branch/expo-branch.js.map +1 -1
  32. package/build/plugins/unversioned/expo-branch/withAndroidBranch.js +0 -12
  33. package/build/plugins/unversioned/expo-branch/withAndroidBranch.js.map +1 -1
  34. package/build/plugins/unversioned/expo-branch/withIosBranch.js +2 -11
  35. package/build/plugins/unversioned/expo-branch/withIosBranch.js.map +1 -1
  36. package/build/plugins/unversioned/expo-contacts.js +2 -13
  37. package/build/plugins/unversioned/expo-contacts.js.map +1 -1
  38. package/build/plugins/unversioned/expo-document-picker.js +2 -12
  39. package/build/plugins/unversioned/expo-document-picker.js.map +1 -1
  40. package/build/plugins/unversioned/expo-navigation-bar/expo-navigation-bar.js +2 -9
  41. package/build/plugins/unversioned/expo-navigation-bar/expo-navigation-bar.js.map +1 -1
  42. package/build/plugins/unversioned/expo-navigation-bar/withAndroidNavigationBar.js +0 -20
  43. package/build/plugins/unversioned/expo-navigation-bar/withAndroidNavigationBar.js.map +1 -1
  44. package/build/plugins/unversioned/expo-notifications/expo-notifications.js +4 -14
  45. package/build/plugins/unversioned/expo-notifications/expo-notifications.js.map +1 -1
  46. package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.d.ts +1 -1
  47. package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.js +1 -44
  48. package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.js.map +1 -1
  49. package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.d.ts +20 -20
  50. package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.js +14 -33
  51. package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.js.map +1 -1
  52. package/build/plugins/unversioned/expo-splash-screen/expo-splash-screen.js +0 -11
  53. package/build/plugins/unversioned/expo-splash-screen/expo-splash-screen.js.map +1 -1
  54. package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.d.ts +1 -1
  55. package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.js +2 -11
  56. package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.js.map +1 -1
  57. package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.d.ts +1 -2
  58. package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.js +0 -26
  59. package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.js.map +1 -1
  60. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashDrawables.js +4 -9
  61. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashDrawables.js.map +1 -1
  62. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashImages.js +9 -36
  63. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashImages.js.map +1 -1
  64. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashLegacyMainActivity.js +13 -34
  65. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashLegacyMainActivity.js.map +1 -1
  66. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashScreen.js +4 -46
  67. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashScreen.js.map +1 -1
  68. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStrings.js +0 -13
  69. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStrings.js.map +1 -1
  70. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStyles.js +2 -23
  71. package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStyles.js.map +1 -1
  72. package/build/plugins/unversioned/expo-splash-screen/withIosSplashAssets.js +16 -54
  73. package/build/plugins/unversioned/expo-splash-screen/withIosSplashAssets.js.map +1 -1
  74. package/build/plugins/unversioned/expo-splash-screen/withIosSplashInfoPlist.js +6 -22
  75. package/build/plugins/unversioned/expo-splash-screen/withIosSplashInfoPlist.js.map +1 -1
  76. package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreen.js +7 -35
  77. package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreen.js.map +1 -1
  78. package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreenStoryboard.js +9 -33
  79. package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreenStoryboard.js.map +1 -1
  80. package/build/plugins/unversioned/expo-splash-screen/withIosSplashXcodeProject.js +1 -18
  81. package/build/plugins/unversioned/expo-splash-screen/withIosSplashXcodeProject.js.map +1 -1
  82. package/build/plugins/unversioned/expo-splash-screen/wtihIosSplashScreenStoryboardImage.js +2 -15
  83. package/build/plugins/unversioned/expo-splash-screen/wtihIosSplashScreenStoryboardImage.js.map +1 -1
  84. package/build/plugins/unversioned/expo-system-ui/expo-system-ui.js +0 -17
  85. package/build/plugins/unversioned/expo-system-ui/expo-system-ui.js.map +1 -1
  86. package/build/plugins/unversioned/expo-system-ui/withAndroidRootViewBackgroundColor.js +0 -14
  87. package/build/plugins/unversioned/expo-system-ui/withAndroidRootViewBackgroundColor.js.map +1 -1
  88. package/build/plugins/unversioned/expo-system-ui/withAndroidUserInterfaceStyle.js +2 -9
  89. package/build/plugins/unversioned/expo-system-ui/withAndroidUserInterfaceStyle.js.map +1 -1
  90. package/build/plugins/unversioned/expo-system-ui/withIosRootViewBackgroundColor.js +2 -27
  91. package/build/plugins/unversioned/expo-system-ui/withIosRootViewBackgroundColor.js.map +1 -1
  92. package/build/plugins/unversioned/expo-system-ui/withIosUserInterfaceStyle.js +2 -14
  93. package/build/plugins/unversioned/expo-system-ui/withIosUserInterfaceStyle.js.map +1 -1
  94. package/build/plugins/unversioned/expo-updates.js +1 -8
  95. package/build/plugins/unversioned/expo-updates.js.map +1 -1
  96. package/build/plugins/unversioned/react-native-maps.js +4 -19
  97. package/build/plugins/unversioned/react-native-maps.js.map +1 -1
  98. package/build/plugins/withDefaultPlugins.d.ts +2 -2
  99. package/build/plugins/withDefaultPlugins.js +41 -94
  100. package/build/plugins/withDefaultPlugins.js.map +1 -1
  101. package/package.json +6 -6
  102. package/build/plugins/unversioned/expo-facebook/expo-facebook.d.ts +0 -2
  103. package/build/plugins/unversioned/expo-facebook/expo-facebook.js +0 -57
  104. package/build/plugins/unversioned/expo-facebook/expo-facebook.js.map +0 -1
  105. package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.d.ts +0 -13
  106. package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.js +0 -235
  107. package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.js.map +0 -1
  108. package/build/plugins/unversioned/expo-facebook/withIosFacebook.d.ts +0 -26
  109. package/build/plugins/unversioned/expo-facebook/withIosFacebook.js +0 -233
  110. package/build/plugins/unversioned/expo-facebook/withIosFacebook.js.map +0 -1
  111. package/build/plugins/unversioned/expo-facebook/withSKAdNetworkIdentifiers.d.ts +0 -9
  112. package/build/plugins/unversioned/expo-facebook/withSKAdNetworkIdentifiers.js +0 -69
  113. package/build/plugins/unversioned/expo-facebook/withSKAdNetworkIdentifiers.js.map +0 -1
@@ -11,63 +11,45 @@ exports.getIcon = getIcon;
11
11
  exports.setIconAsync = setIconAsync;
12
12
  exports.setRoundIconManifest = setRoundIconManifest;
13
13
  exports.withAndroidIcons = void 0;
14
-
15
14
  function _configPlugins() {
16
15
  const data = require("@expo/config-plugins");
17
-
18
16
  _configPlugins = function () {
19
17
  return data;
20
18
  };
21
-
22
19
  return data;
23
20
  }
24
-
25
21
  function _imageUtils() {
26
22
  const data = require("@expo/image-utils");
27
-
28
23
  _imageUtils = function () {
29
24
  return data;
30
25
  };
31
-
32
26
  return data;
33
27
  }
34
-
35
28
  function _fsExtra() {
36
29
  const data = _interopRequireDefault(require("fs-extra"));
37
-
38
30
  _fsExtra = function () {
39
31
  return data;
40
32
  };
41
-
42
33
  return data;
43
34
  }
44
-
45
35
  function _path() {
46
36
  const data = _interopRequireDefault(require("path"));
47
-
48
37
  _path = function () {
49
38
  return data;
50
39
  };
51
-
52
40
  return data;
53
41
  }
54
-
55
42
  function _withAndroidManifestIcons() {
56
43
  const data = require("./withAndroidManifestIcons");
57
-
58
44
  _withAndroidManifestIcons = function () {
59
45
  return data;
60
46
  };
61
-
62
47
  return data;
63
48
  }
64
-
65
49
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
66
-
67
50
  const {
68
51
  Colors
69
52
  } = _configPlugins().AndroidConfig;
70
-
71
53
  const dpiValues = {
72
54
  mdpi: {
73
55
  folderName: 'mipmap-mdpi',
@@ -100,113 +82,98 @@ const IC_LAUNCHER_PNG = 'ic_launcher.png';
100
82
  const IC_LAUNCHER_ROUND_PNG = 'ic_launcher_round.png';
101
83
  const IC_LAUNCHER_BACKGROUND_PNG = 'ic_launcher_background.png';
102
84
  const IC_LAUNCHER_FOREGROUND_PNG = 'ic_launcher_foreground.png';
85
+ const IC_LAUNCHER_MONOCHROME_PNG = 'ic_launcher_monochrome.png';
103
86
  const IC_LAUNCHER_XML = 'ic_launcher.xml';
104
87
  const IC_LAUNCHER_ROUND_XML = 'ic_launcher_round.xml';
105
-
106
88
  const withAndroidIcons = config => {
107
89
  const {
108
90
  foregroundImage,
109
91
  backgroundColor,
110
- backgroundImage
92
+ backgroundImage,
93
+ monochromeImage
111
94
  } = getAdaptiveIcon(config);
112
95
  const icon = foregroundImage !== null && foregroundImage !== void 0 ? foregroundImage : getIcon(config);
113
-
114
96
  if (!icon) {
115
97
  return config;
116
98
  }
117
-
118
- config = (0, _withAndroidManifestIcons().withAndroidManifestIcons)(config); // Apply colors.xml changes
119
-
99
+ config = (0, _withAndroidManifestIcons().withAndroidManifestIcons)(config);
100
+ // Apply colors.xml changes
120
101
  config = withAndroidAdaptiveIconColors(config, backgroundColor);
121
102
  return (0, _configPlugins().withDangerousMod)(config, ['android', async config => {
122
103
  var _config$android;
123
-
124
104
  await setIconAsync(config.modRequest.projectRoot, {
125
105
  icon,
126
106
  backgroundColor,
127
107
  backgroundImage,
108
+ monochromeImage,
128
109
  isAdaptive: !!((_config$android = config.android) !== null && _config$android !== void 0 && _config$android.adaptiveIcon)
129
110
  });
130
111
  return config;
131
112
  }]);
132
113
  };
133
-
134
114
  exports.withAndroidIcons = withAndroidIcons;
135
-
136
115
  function setRoundIconManifest(config, manifest) {
137
116
  var _config$android2;
138
-
139
117
  const isAdaptive = !!((_config$android2 = config.android) !== null && _config$android2 !== void 0 && _config$android2.adaptiveIcon);
140
-
141
118
  const application = _configPlugins().AndroidConfig.Manifest.getMainApplicationOrThrow(manifest);
142
-
143
119
  if (isAdaptive) {
144
120
  application.$['android:roundIcon'] = '@mipmap/ic_launcher_round';
145
121
  } else {
146
122
  delete application.$['android:roundIcon'];
147
123
  }
148
-
149
124
  return manifest;
150
125
  }
151
-
152
126
  const withAndroidAdaptiveIconColors = (config, backgroundColor) => {
153
127
  return (0, _configPlugins().withAndroidColors)(config, config => {
154
128
  config.modResults = setBackgroundColor(backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '#FFFFFF', config.modResults);
155
129
  return config;
156
130
  });
157
131
  };
158
-
159
132
  function getIcon(config) {
160
133
  var _config$android3;
161
-
162
134
  return ((_config$android3 = config.android) === null || _config$android3 === void 0 ? void 0 : _config$android3.icon) || config.icon || null;
163
135
  }
164
-
165
136
  function getAdaptiveIcon(config) {
166
- var _config$android$adapt, _config$android4, _config$android4$adap, _config$android$adapt2, _config$android5, _config$android5$adap, _config$android$adapt3, _config$android6, _config$android6$adap;
167
-
137
+ var _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;
168
138
  return {
169
139
  foregroundImage: (_config$android$adapt = (_config$android4 = config.android) === null || _config$android4 === void 0 ? void 0 : (_config$android4$adap = _config$android4.adaptiveIcon) === null || _config$android4$adap === void 0 ? void 0 : _config$android4$adap.foregroundImage) !== null && _config$android$adapt !== void 0 ? _config$android$adapt : null,
170
140
  backgroundColor: (_config$android$adapt2 = (_config$android5 = config.android) === null || _config$android5 === void 0 ? void 0 : (_config$android5$adap = _config$android5.adaptiveIcon) === null || _config$android5$adap === void 0 ? void 0 : _config$android5$adap.backgroundColor) !== null && _config$android$adapt2 !== void 0 ? _config$android$adapt2 : null,
171
- backgroundImage: (_config$android$adapt3 = (_config$android6 = config.android) === null || _config$android6 === void 0 ? void 0 : (_config$android6$adap = _config$android6.adaptiveIcon) === null || _config$android6$adap === void 0 ? void 0 : _config$android6$adap.backgroundImage) !== null && _config$android$adapt3 !== void 0 ? _config$android$adapt3 : null
141
+ backgroundImage: (_config$android$adapt3 = (_config$android6 = config.android) === null || _config$android6 === void 0 ? void 0 : (_config$android6$adap = _config$android6.adaptiveIcon) === null || _config$android6$adap === void 0 ? void 0 : _config$android6$adap.backgroundImage) !== null && _config$android$adapt3 !== void 0 ? _config$android$adapt3 : null,
142
+ monochromeImage: (_config$android$adapt4 = (_config$android7 = config.android) === null || _config$android7 === void 0 ? void 0 : (_config$android7$adap = _config$android7.adaptiveIcon) === null || _config$android7$adap === void 0 ? void 0 : _config$android7$adap.monochromeImage) !== null && _config$android$adapt4 !== void 0 ? _config$android$adapt4 : null
172
143
  };
173
144
  }
145
+
174
146
  /**
175
147
  * Resizes the user-provided icon to create a set of legacy icon files in
176
148
  * their respective "mipmap" directories for <= Android 7, and creates a set of adaptive
177
149
  * icon files for > Android 7 from the adaptive icon files (if provided).
178
150
  */
179
-
180
-
181
151
  async function setIconAsync(projectRoot, {
182
152
  icon,
183
153
  backgroundColor,
184
154
  backgroundImage,
155
+ monochromeImage,
185
156
  isAdaptive
186
157
  }) {
187
158
  if (!icon) {
188
159
  return null;
189
160
  }
190
-
191
161
  await configureLegacyIconAsync(projectRoot, icon, backgroundImage, backgroundColor);
192
-
193
162
  if (isAdaptive) {
194
163
  await generateRoundIconAsync(projectRoot, icon, backgroundImage, backgroundColor);
195
164
  } else {
196
165
  await deleteIconNamedAsync(projectRoot, IC_LAUNCHER_ROUND_PNG);
197
166
  }
198
-
199
- await configureAdaptiveIconAsync(projectRoot, icon, backgroundImage, isAdaptive);
167
+ await configureAdaptiveIconAsync(projectRoot, icon, backgroundImage, monochromeImage, isAdaptive);
200
168
  return true;
201
169
  }
170
+
202
171
  /**
203
172
  * Configures legacy icon files to be used on Android 7 and earlier. If adaptive icon configuration
204
173
  * was provided, we create a pseudo-adaptive icon by layering the provided files (or background
205
174
  * color if no backgroundImage is provided. If no backgroundImage and no backgroundColor are provided,
206
175
  * the background is set to transparent.)
207
176
  */
208
-
209
-
210
177
  async function configureLegacyIconAsync(projectRoot, icon, backgroundImage, backgroundColor) {
211
178
  return generateMultiLayerImageAsync(projectRoot, {
212
179
  icon,
@@ -217,7 +184,6 @@ async function configureLegacyIconAsync(projectRoot, icon, backgroundImage, back
217
184
  backgroundImageCacheFolder: 'android-standard-square-background'
218
185
  });
219
186
  }
220
-
221
187
  async function generateRoundIconAsync(projectRoot, icon, backgroundImage, backgroundColor) {
222
188
  return generateMultiLayerImageAsync(projectRoot, {
223
189
  icon,
@@ -229,15 +195,21 @@ async function generateRoundIconAsync(projectRoot, icon, backgroundImage, backgr
229
195
  backgroundImageCacheFolder: 'android-standard-round-background'
230
196
  });
231
197
  }
198
+
232
199
  /**
233
200
  * Configures adaptive icon files to be used on Android 8 and up. A foreground image must be provided,
234
201
  * and will have a transparent background unless:
235
202
  * - A backgroundImage is provided, or
236
203
  * - A backgroundColor was specified
237
204
  */
238
-
239
-
240
- async function configureAdaptiveIconAsync(projectRoot, foregroundImage, backgroundImage, isAdaptive) {
205
+ async function configureAdaptiveIconAsync(projectRoot, foregroundImage, backgroundImage, monochromeImage, isAdaptive) {
206
+ if (monochromeImage) {
207
+ await generateMonochromeImageAsync(projectRoot, {
208
+ icon: monochromeImage,
209
+ imageCacheFolder: 'android-adaptive-monochrome',
210
+ outputImageFileName: IC_LAUNCHER_MONOCHROME_PNG
211
+ });
212
+ }
241
213
  await generateMultiLayerImageAsync(projectRoot, {
242
214
  backgroundColor: 'transparent',
243
215
  backgroundImage,
@@ -246,41 +218,38 @@ async function configureAdaptiveIconAsync(projectRoot, foregroundImage, backgrou
246
218
  icon: foregroundImage,
247
219
  imageCacheFolder: 'android-adaptive-foreground',
248
220
  backgroundImageFileName: IC_LAUNCHER_BACKGROUND_PNG
249
- }); // create ic_launcher.xml and ic_launcher_round.xml
221
+ });
250
222
 
251
- const icLauncherXmlString = createAdaptiveIconXmlString(backgroundImage);
252
- await createAdaptiveIconXmlFiles(projectRoot, icLauncherXmlString, // If the user only defined icon and not android.adaptiveIcon, then skip enabling the layering system
223
+ // create ic_launcher.xml and ic_launcher_round.xml
224
+ const icLauncherXmlString = createAdaptiveIconXmlString(backgroundImage, monochromeImage);
225
+ await createAdaptiveIconXmlFiles(projectRoot, icLauncherXmlString,
226
+ // If the user only defined icon and not android.adaptiveIcon, then skip enabling the layering system
253
227
  // this will scale the image down and present it uncropped.
254
228
  isAdaptive);
255
229
  }
256
-
257
230
  function setBackgroundColor(backgroundColor, colors) {
258
231
  return Colors.assignColorValue(colors, {
259
232
  value: backgroundColor,
260
233
  name: ICON_BACKGROUND
261
234
  });
262
235
  }
263
-
264
- const createAdaptiveIconXmlString = backgroundImage => {
236
+ const createAdaptiveIconXmlString = (backgroundImage, monochromeImage) => {
265
237
  const background = backgroundImage ? `@mipmap/ic_launcher_background` : `@color/iconBackground`;
238
+ const iconElements = [`<background android:drawable="${background}"/>`, '<foreground android:drawable="@mipmap/ic_launcher_foreground"/>'];
239
+ if (monochromeImage) {
240
+ iconElements.push('<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>');
241
+ }
266
242
  return `<?xml version="1.0" encoding="utf-8"?>
267
243
  <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
268
- <background android:drawable="${background}"/>
269
- <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
244
+ ${iconElements.join('\n ')}
270
245
  </adaptive-icon>`;
271
246
  };
272
-
273
247
  exports.createAdaptiveIconXmlString = createAdaptiveIconXmlString;
274
-
275
248
  async function createAdaptiveIconXmlFiles(projectRoot, icLauncherXmlString, add) {
276
249
  const anyDpiV26Directory = _path().default.resolve(projectRoot, ANDROID_RES_PATH, MIPMAP_ANYDPI_V26);
277
-
278
250
  await _fsExtra().default.ensureDir(anyDpiV26Directory);
279
-
280
251
  const launcherPath = _path().default.resolve(anyDpiV26Directory, IC_LAUNCHER_XML);
281
-
282
252
  const launcherRoundPath = _path().default.resolve(anyDpiV26Directory, IC_LAUNCHER_ROUND_XML);
283
-
284
253
  if (add) {
285
254
  await Promise.all([_fsExtra().default.writeFile(launcherPath, icLauncherXmlString), _fsExtra().default.writeFile(launcherRoundPath, icLauncherXmlString)]);
286
255
  } else {
@@ -292,7 +261,6 @@ async function createAdaptiveIconXmlFiles(projectRoot, icLauncherXmlString, add)
292
261
  }));
293
262
  }
294
263
  }
295
-
296
264
  async function generateMultiLayerImageAsync(projectRoot, {
297
265
  icon,
298
266
  backgroundColor,
@@ -315,7 +283,6 @@ async function generateMultiLayerImageAsync(projectRoot, {
315
283
  backgroundColor: backgroundImage ? 'transparent' : backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : 'transparent',
316
284
  borderRadiusRatio
317
285
  });
318
-
319
286
  if (backgroundImage) {
320
287
  const backgroundLayer = await generateIconAsync(projectRoot, {
321
288
  cacheType: backgroundImageCacheFolder,
@@ -324,7 +291,6 @@ async function generateMultiLayerImageAsync(projectRoot, {
324
291
  backgroundColor: 'transparent',
325
292
  borderRadiusRatio
326
293
  });
327
-
328
294
  if (backgroundImageFileName) {
329
295
  await _fsExtra().default.writeFile(_path().default.resolve(dpiFolder, backgroundImageFileName), backgroundLayer);
330
296
  } else {
@@ -337,19 +303,35 @@ async function generateMultiLayerImageAsync(projectRoot, {
337
303
  // Remove any instances of ic_launcher_background.png that are there from previous icons
338
304
  await deleteIconNamedAsync(projectRoot, backgroundImageFileName);
339
305
  }
340
-
341
306
  await _fsExtra().default.ensureDir(dpiFolder);
342
307
  await _fsExtra().default.writeFile(_path().default.resolve(dpiFolder, outputImageFileName), iconLayer);
343
308
  });
344
309
  }
345
-
310
+ async function generateMonochromeImageAsync(projectRoot, {
311
+ icon,
312
+ imageCacheFolder,
313
+ outputImageFileName
314
+ }) {
315
+ await iterateDpiValues(projectRoot, async ({
316
+ dpiFolder,
317
+ scale
318
+ }) => {
319
+ const monochromeIcon = generateIconAsync(projectRoot, {
320
+ cacheType: imageCacheFolder,
321
+ src: icon,
322
+ scale,
323
+ backgroundColor: 'transparent'
324
+ });
325
+ await _fsExtra().default.ensureDir(dpiFolder);
326
+ await _fsExtra().default.writeFile(_path().default.resolve(dpiFolder, outputImageFileName), monochromeIcon);
327
+ });
328
+ }
346
329
  function iterateDpiValues(projectRoot, callback) {
347
330
  return Promise.all(Object.values(dpiValues).map(value => callback({
348
331
  dpiFolder: _path().default.resolve(projectRoot, ANDROID_RES_PATH, value.folderName),
349
332
  ...value
350
333
  })));
351
334
  }
352
-
353
335
  async function deleteIconNamedAsync(projectRoot, name) {
354
336
  return iterateDpiValues(projectRoot, ({
355
337
  dpiFolder
@@ -357,7 +339,6 @@ async function deleteIconNamedAsync(projectRoot, name) {
357
339
  return _fsExtra().default.remove(_path().default.resolve(dpiFolder, name));
358
340
  });
359
341
  }
360
-
361
342
  async function generateIconAsync(projectRoot, {
362
343
  cacheType,
363
344
  src,
@@ -1 +1 @@
1
- {"version":3,"file":"withAndroidIcons.js","names":["Colors","AndroidConfig","dpiValues","mdpi","folderName","scale","hdpi","xhdpi","xxhdpi","xxxhdpi","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_XML","IC_LAUNCHER_ROUND_XML","withAndroidIcons","config","foregroundImage","backgroundColor","backgroundImage","getAdaptiveIcon","icon","getIcon","withAndroidManifestIcons","withAndroidAdaptiveIconColors","withDangerousMod","setIconAsync","modRequest","projectRoot","isAdaptive","android","adaptiveIcon","setRoundIconManifest","manifest","application","Manifest","getMainApplicationOrThrow","$","withAndroidColors","modResults","setBackgroundColor","configureLegacyIconAsync","generateRoundIconAsync","deleteIconNamedAsync","configureAdaptiveIconAsync","generateMultiLayerImageAsync","outputImageFileName","imageCacheFolder","backgroundImageCacheFolder","borderRadiusRatio","backgroundImageFileName","icLauncherXmlString","createAdaptiveIconXmlString","createAdaptiveIconXmlFiles","colors","assignColorValue","value","name","background","add","anyDpiV26Directory","path","resolve","fs","ensureDir","launcherPath","launcherRoundPath","Promise","all","writeFile","map","existsSync","remove","iterateDpiValues","dpiFolder","iconLayer","generateIconAsync","cacheType","src","backgroundLayer","compositeImagesAsync","foreground","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_XML = 'ic_launcher.xml';\nconst IC_LAUNCHER_ROUND_XML = 'ic_launcher_round.xml';\n\nexport const withAndroidIcons: ConfigPlugin = (config) => {\n const { foregroundImage, backgroundColor, backgroundImage } = 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 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 };\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 isAdaptive,\n }: {\n icon: string | null;\n backgroundColor: string | null;\n backgroundImage: 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, 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 isAdaptive: boolean\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);\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 = (backgroundImage: string | null) => {\n const background = backgroundImage ? `@mipmap/ic_launcher_background` : `@color/iconBackground`;\n\n return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <background android:drawable=\"${background}\"/>\n <foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>\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\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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"}
1
+ {"version":3,"file":"withAndroidIcons.js","names":["Colors","AndroidConfig","dpiValues","mdpi","folderName","scale","hdpi","xhdpi","xxhdpi","xxxhdpi","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","setIconAsync","modRequest","projectRoot","isAdaptive","android","adaptiveIcon","setRoundIconManifest","manifest","application","Manifest","getMainApplicationOrThrow","$","withAndroidColors","modResults","setBackgroundColor","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 = 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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"}
@@ -5,37 +5,27 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.setRoundIconManifest = setRoundIconManifest;
7
7
  exports.withAndroidManifestIcons = void 0;
8
-
9
8
  function _configPlugins() {
10
9
  const data = require("@expo/config-plugins");
11
-
12
10
  _configPlugins = function () {
13
11
  return data;
14
12
  };
15
-
16
13
  return data;
17
14
  }
18
-
19
15
  const withAndroidManifestIcons = config => (0, _configPlugins().withAndroidManifest)(config, config => {
20
16
  config.modResults = setRoundIconManifest(config, config.modResults);
21
17
  return config;
22
18
  });
23
-
24
19
  exports.withAndroidManifestIcons = withAndroidManifestIcons;
25
-
26
20
  function setRoundIconManifest(config, manifest) {
27
21
  var _config$android;
28
-
29
22
  const isAdaptive = !!((_config$android = config.android) !== null && _config$android !== void 0 && _config$android.adaptiveIcon);
30
-
31
23
  const application = _configPlugins().AndroidConfig.Manifest.getMainApplicationOrThrow(manifest);
32
-
33
24
  if (isAdaptive) {
34
25
  application.$['android:roundIcon'] = '@mipmap/ic_launcher_round';
35
26
  } else {
36
27
  delete application.$['android:roundIcon'];
37
28
  }
38
-
39
29
  return manifest;
40
30
  }
41
31
  //# sourceMappingURL=withAndroidManifestIcons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withAndroidManifestIcons.js","names":["withAndroidManifestIcons","config","withAndroidManifest","modResults","setRoundIconManifest","manifest","isAdaptive","android","adaptiveIcon","application","AndroidConfig","Manifest","getMainApplicationOrThrow","$"],"sources":["../../../src/plugins/icons/withAndroidManifestIcons.ts"],"sourcesContent":["import { AndroidConfig, ConfigPlugin, withAndroidManifest } from '@expo/config-plugins';\nimport { ExpoConfig } from '@expo/config-types';\n\nexport const withAndroidManifestIcons: ConfigPlugin = (config) =>\n withAndroidManifest(config, (config) => {\n config.modResults = setRoundIconManifest(config, config.modResults);\n return config;\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"],"mappings":";;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGO,MAAMA,wBAAsC,GAAIC,MAAD,IACpD,IAAAC,oCAAA,EAAoBD,MAApB,EAA6BA,MAAD,IAAY;EACtCA,MAAM,CAACE,UAAP,GAAoBC,oBAAoB,CAACH,MAAD,EAASA,MAAM,CAACE,UAAhB,CAAxC;EACA,OAAOF,MAAP;AACD,CAHD,CADK;;;;AAMA,SAASG,oBAAT,CACLH,MADK,EAELI,QAFK,EAGmC;EAAA;;EACxC,MAAMC,UAAU,GAAG,CAAC,qBAACL,MAAM,CAACM,OAAR,4CAAC,gBAAgBC,YAAjB,CAApB;;EACA,MAAMC,WAAW,GAAGC,8BAAA,CAAcC,QAAd,CAAuBC,yBAAvB,CAAiDP,QAAjD,CAApB;;EAEA,IAAIC,UAAJ,EAAgB;IACdG,WAAW,CAACI,CAAZ,CAAc,mBAAd,IAAqC,2BAArC;EACD,CAFD,MAEO;IACL,OAAOJ,WAAW,CAACI,CAAZ,CAAc,mBAAd,CAAP;EACD;;EACD,OAAOR,QAAP;AACD"}
1
+ {"version":3,"file":"withAndroidManifestIcons.js","names":["withAndroidManifestIcons","config","withAndroidManifest","modResults","setRoundIconManifest","manifest","isAdaptive","android","adaptiveIcon","application","AndroidConfig","Manifest","getMainApplicationOrThrow","$"],"sources":["../../../src/plugins/icons/withAndroidManifestIcons.ts"],"sourcesContent":["import { AndroidConfig, ConfigPlugin, withAndroidManifest } from '@expo/config-plugins';\nimport { ExpoConfig } from '@expo/config-types';\n\nexport const withAndroidManifestIcons: ConfigPlugin = (config) =>\n withAndroidManifest(config, (config) => {\n config.modResults = setRoundIconManifest(config, config.modResults);\n return config;\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"],"mappings":";;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGO,MAAMA,wBAAsC,GAAIC,MAAM,IAC3D,IAAAC,oCAAmB,EAACD,MAAM,EAAGA,MAAM,IAAK;EACtCA,MAAM,CAACE,UAAU,GAAGC,oBAAoB,CAACH,MAAM,EAAEA,MAAM,CAACE,UAAU,CAAC;EACnE,OAAOF,MAAM;AACf,CAAC,CAAC;AAAC;AAEE,SAASG,oBAAoB,CAClCH,MAAmC,EACnCI,QAAgD,EACR;EAAA;EACxC,MAAMC,UAAU,GAAG,CAAC,qBAACL,MAAM,CAACM,OAAO,4CAAd,gBAAgBC,YAAY;EACjD,MAAMC,WAAW,GAAGC,8BAAa,CAACC,QAAQ,CAACC,yBAAyB,CAACP,QAAQ,CAAC;EAE9E,IAAIC,UAAU,EAAE;IACdG,WAAW,CAACI,CAAC,CAAC,mBAAmB,CAAC,GAAG,2BAA2B;EAClE,CAAC,MAAM;IACL,OAAOJ,WAAW,CAACI,CAAC,CAAC,mBAAmB,CAAC;EAC3C;EACA,OAAOR,QAAQ;AACjB"}