@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.
- package/build/getAutolinkedPackages.js +3 -13
- package/build/getAutolinkedPackages.js.map +1 -1
- package/build/getPrebuildConfig.js +9 -24
- package/build/getPrebuildConfig.js.map +1 -1
- package/build/importExpoModulesAutolinking.d.ts +3 -3
- package/build/importExpoModulesAutolinking.js +0 -5
- package/build/importExpoModulesAutolinking.js.map +1 -1
- package/build/index.js +0 -5
- package/build/index.js.map +1 -1
- package/build/plugins/icons/AssetContents.d.ts +3 -3
- package/build/plugins/icons/AssetContents.js +1 -10
- package/build/plugins/icons/AssetContents.js.map +1 -1
- package/build/plugins/icons/withAndroidIcons.d.ts +7 -5
- package/build/plugins/icons/withAndroidIcons.js +52 -71
- package/build/plugins/icons/withAndroidIcons.js.map +1 -1
- package/build/plugins/icons/withAndroidManifestIcons.js +0 -10
- package/build/plugins/icons/withAndroidManifestIcons.js.map +1 -1
- package/build/plugins/icons/withIosIcons.js +24 -48
- package/build/plugins/icons/withIosIcons.js.map +1 -1
- package/build/plugins/unversioned/createLegacyPlugin.js +0 -11
- package/build/plugins/unversioned/createLegacyPlugin.js.map +1 -1
- package/build/plugins/unversioned/expo-ads-admob/expo-ads-admob.js +0 -11
- package/build/plugins/unversioned/expo-ads-admob/expo-ads-admob.js.map +1 -1
- package/build/plugins/unversioned/expo-ads-admob/withAndroidAdMob.js +0 -14
- package/build/plugins/unversioned/expo-ads-admob/withAndroidAdMob.js.map +1 -1
- package/build/plugins/unversioned/expo-ads-admob/withIosAdMob.js +5 -14
- package/build/plugins/unversioned/expo-ads-admob/withIosAdMob.js.map +1 -1
- package/build/plugins/unversioned/expo-apple-authentication.js +0 -11
- package/build/plugins/unversioned/expo-apple-authentication.js.map +1 -1
- package/build/plugins/unversioned/expo-branch/expo-branch.js +4 -13
- package/build/plugins/unversioned/expo-branch/expo-branch.js.map +1 -1
- package/build/plugins/unversioned/expo-branch/withAndroidBranch.js +0 -12
- package/build/plugins/unversioned/expo-branch/withAndroidBranch.js.map +1 -1
- package/build/plugins/unversioned/expo-branch/withIosBranch.js +2 -11
- package/build/plugins/unversioned/expo-branch/withIosBranch.js.map +1 -1
- package/build/plugins/unversioned/expo-contacts.js +2 -13
- package/build/plugins/unversioned/expo-contacts.js.map +1 -1
- package/build/plugins/unversioned/expo-document-picker.js +2 -12
- package/build/plugins/unversioned/expo-document-picker.js.map +1 -1
- package/build/plugins/unversioned/expo-navigation-bar/expo-navigation-bar.js +2 -9
- package/build/plugins/unversioned/expo-navigation-bar/expo-navigation-bar.js.map +1 -1
- package/build/plugins/unversioned/expo-navigation-bar/withAndroidNavigationBar.js +0 -20
- package/build/plugins/unversioned/expo-navigation-bar/withAndroidNavigationBar.js.map +1 -1
- package/build/plugins/unversioned/expo-notifications/expo-notifications.js +4 -14
- package/build/plugins/unversioned/expo-notifications/expo-notifications.js.map +1 -1
- package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.d.ts +1 -1
- package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.js +1 -44
- package/build/plugins/unversioned/expo-notifications/withAndroidNotifications.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.d.ts +20 -20
- package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.js +14 -33
- package/build/plugins/unversioned/expo-splash-screen/InterfaceBuilder.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/expo-splash-screen.js +0 -11
- package/build/plugins/unversioned/expo-splash-screen/expo-splash-screen.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.d.ts +1 -1
- package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.js +2 -11
- package/build/plugins/unversioned/expo-splash-screen/getAndroidSplashConfig.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.d.ts +1 -2
- package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.js +0 -26
- package/build/plugins/unversioned/expo-splash-screen/getIosSplashConfig.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashDrawables.js +4 -9
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashDrawables.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashImages.js +9 -36
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashImages.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashLegacyMainActivity.js +13 -34
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashLegacyMainActivity.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashScreen.js +4 -46
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashScreen.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStrings.js +0 -13
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStrings.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStyles.js +2 -23
- package/build/plugins/unversioned/expo-splash-screen/withAndroidSplashStyles.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashAssets.js +16 -54
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashAssets.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashInfoPlist.js +6 -22
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashInfoPlist.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreen.js +7 -35
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreen.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreenStoryboard.js +9 -33
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashScreenStoryboard.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashXcodeProject.js +1 -18
- package/build/plugins/unversioned/expo-splash-screen/withIosSplashXcodeProject.js.map +1 -1
- package/build/plugins/unversioned/expo-splash-screen/wtihIosSplashScreenStoryboardImage.js +2 -15
- package/build/plugins/unversioned/expo-splash-screen/wtihIosSplashScreenStoryboardImage.js.map +1 -1
- package/build/plugins/unversioned/expo-system-ui/expo-system-ui.js +0 -17
- package/build/plugins/unversioned/expo-system-ui/expo-system-ui.js.map +1 -1
- package/build/plugins/unversioned/expo-system-ui/withAndroidRootViewBackgroundColor.js +0 -14
- package/build/plugins/unversioned/expo-system-ui/withAndroidRootViewBackgroundColor.js.map +1 -1
- package/build/plugins/unversioned/expo-system-ui/withAndroidUserInterfaceStyle.js +2 -9
- package/build/plugins/unversioned/expo-system-ui/withAndroidUserInterfaceStyle.js.map +1 -1
- package/build/plugins/unversioned/expo-system-ui/withIosRootViewBackgroundColor.js +2 -27
- package/build/plugins/unversioned/expo-system-ui/withIosRootViewBackgroundColor.js.map +1 -1
- package/build/plugins/unversioned/expo-system-ui/withIosUserInterfaceStyle.js +2 -14
- package/build/plugins/unversioned/expo-system-ui/withIosUserInterfaceStyle.js.map +1 -1
- package/build/plugins/unversioned/expo-updates.js +1 -8
- package/build/plugins/unversioned/expo-updates.js.map +1 -1
- package/build/plugins/unversioned/react-native-maps.js +4 -19
- package/build/plugins/unversioned/react-native-maps.js.map +1 -1
- package/build/plugins/withDefaultPlugins.d.ts +2 -2
- package/build/plugins/withDefaultPlugins.js +41 -94
- package/build/plugins/withDefaultPlugins.js.map +1 -1
- package/package.json +6 -6
- package/build/plugins/unversioned/expo-facebook/expo-facebook.d.ts +0 -2
- package/build/plugins/unversioned/expo-facebook/expo-facebook.js +0 -57
- package/build/plugins/unversioned/expo-facebook/expo-facebook.js.map +0 -1
- package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.d.ts +0 -13
- package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.js +0 -235
- package/build/plugins/unversioned/expo-facebook/withAndroidFacebook.js.map +0 -1
- package/build/plugins/unversioned/expo-facebook/withIosFacebook.d.ts +0 -26
- package/build/plugins/unversioned/expo-facebook/withIosFacebook.js +0 -233
- package/build/plugins/unversioned/expo-facebook/withIosFacebook.js.map +0 -1
- package/build/plugins/unversioned/expo-facebook/withSKAdNetworkIdentifiers.d.ts +0 -9
- package/build/plugins/unversioned/expo-facebook/withSKAdNetworkIdentifiers.js +0 -69
- 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
|
-
|
|
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
|
-
|
|
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
|
-
});
|
|
221
|
+
});
|
|
250
222
|
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
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":"
|
|
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"}
|