UNPKG

6.44 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const USES_PERMISSION = 'uses-permission';
4exports.requiredPermissions = [
5 'android.permission.INTERNET',
6 'android.permission.ACCESS_NETWORK_STATE',
7 'android.permission.SYSTEM_ALERT_WINDOW',
8 'android.permission.WAKE_LOCK',
9 'com.google.android.c2dm.permission.RECEIVE',
10];
11exports.allPermissions = [
12 ...exports.requiredPermissions,
13 'android.permission.ACCESS_WIFI_STATE',
14 'android.permission.ACCESS_COARSE_LOCATION',
15 'android.permission.ACCESS_FINE_LOCATION',
16 'android.permission.CAMERA',
17 'android.permission.MANAGE_DOCUMENTS',
18 'android.permission.READ_CONTACTS',
19 'android.permission.WRITE_CONTACTS',
20 'android.permission.READ_CALENDAR',
21 'android.permission.WRITE_CALENDAR',
22 'android.permission.READ_EXTERNAL_STORAGE',
23 'android.permission.READ_INTERNAL_STORAGE',
24 'android.permission.READ_PHONE_STATE',
25 'android.permission.RECORD_AUDIO',
26 'android.permission.USE_FINGERPRINT',
27 'android.permission.VIBRATE',
28 'android.permission.WRITE_EXTERNAL_STORAGE',
29 'android.permission.READ_SMS',
30 'com.anddoes.launcher.permission.UPDATE_COUNT',
31 'com.android.launcher.permission.INSTALL_SHORTCUT',
32 'com.google.android.gms.permission.ACTIVITY_RECOGNITION',
33 'com.google.android.providers.gsf.permission.READ_GSERVICES',
34 'com.htc.launcher.permission.READ_SETTINGS',
35 'com.htc.launcher.permission.UPDATE_SHORTCUT',
36 'com.majeur.launcher.permission.UPDATE_BADGE',
37 'com.sec.android.provider.badge.permission.READ',
38 'com.sec.android.provider.badge.permission.WRITE',
39 'com.sonyericsson.home.permission.BROADCAST_BADGE',
40];
41function prefixAndroidPermissionsIfNecessary(permissions) {
42 return permissions.map(permission => {
43 if (!permission.includes('.')) {
44 return `android.permission.${permission}`;
45 }
46 return permission;
47 });
48}
49function getAndroidPermissions(config) {
50 var _a, _b;
51 return _b = (_a = config.android) === null || _a === void 0 ? void 0 : _a.permissions, (_b !== null && _b !== void 0 ? _b : []);
52}
53exports.getAndroidPermissions = getAndroidPermissions;
54async function setAndroidPermissions(config, manifestDocument) {
55 const permissions = getAndroidPermissions(config);
56 let permissionsToAdd = [];
57 if (permissions === null) {
58 // Use all Expo permissions
59 permissionsToAdd = exports.allPermissions;
60 }
61 else {
62 // Use minimum required, plus any specified in permissions array
63 const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);
64 permissionsToAdd = [...providedPermissions, ...exports.requiredPermissions];
65 }
66 let manifestPermissions = [];
67 if (!manifestDocument.manifest.hasOwnProperty('uses-permission')) {
68 manifestDocument.manifest['uses-permission'] = [];
69 }
70 manifestPermissions = manifestDocument.manifest['uses-permission'];
71 permissionsToAdd.forEach(permission => {
72 if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {
73 addPermissionToManifest(permission, manifestPermissions);
74 }
75 });
76 return manifestDocument;
77}
78exports.setAndroidPermissions = setAndroidPermissions;
79function isPermissionAlreadyRequested(permission, manifestPermissions) {
80 const hasPermission = manifestPermissions.filter((e) => e['$']['android:name'] === permission);
81 return hasPermission.length > 0;
82}
83exports.isPermissionAlreadyRequested = isPermissionAlreadyRequested;
84function addPermissionToManifest(permission, manifestPermissions) {
85 manifestPermissions.push({ $: { 'android:name': permission } });
86 return manifestPermissions;
87}
88exports.addPermissionToManifest = addPermissionToManifest;
89function removePermissions(doc, permissionNames) {
90 const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;
91 const permissions = doc.manifest[USES_PERMISSION] || [];
92 let nextPermissions = [];
93 for (let attribute of permissions) {
94 if (targetNames) {
95 const value = attribute['$']['android:name'] || attribute['$']['name'];
96 if (!targetNames.includes(value)) {
97 nextPermissions.push(attribute);
98 }
99 }
100 }
101 doc.manifest[USES_PERMISSION] = nextPermissions;
102}
103exports.removePermissions = removePermissions;
104function addPermission(doc, permissionName) {
105 const usesPermissions = doc.manifest[USES_PERMISSION] || [];
106 usesPermissions.push({
107 $: { 'android:name': permissionName },
108 });
109 doc.manifest[USES_PERMISSION] = usesPermissions;
110}
111exports.addPermission = addPermission;
112function ensurePermissions(doc, permissionNames) {
113 const permissions = getPermissions(doc);
114 const results = {};
115 for (const permissionName of permissionNames) {
116 const targetName = ensurePermissionNameFormat(permissionName);
117 if (!permissions.includes(targetName)) {
118 addPermission(doc, targetName);
119 results[permissionName] = true;
120 }
121 else {
122 results[permissionName] = false;
123 }
124 }
125 return results;
126}
127exports.ensurePermissions = ensurePermissions;
128function ensurePermission(doc, permissionName) {
129 const permissions = getPermissions(doc);
130 const targetName = ensurePermissionNameFormat(permissionName);
131 if (!permissions.includes(targetName)) {
132 addPermission(doc, targetName);
133 return true;
134 }
135 return false;
136}
137exports.ensurePermission = ensurePermission;
138function ensurePermissionNameFormat(permissionName) {
139 if (permissionName.includes('.')) {
140 const com = permissionName.split('.');
141 const name = com.pop();
142 return [...com, name.toUpperCase()].join('.');
143 }
144 else {
145 // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.
146 return ensurePermissionNameFormat(`android.permission.${permissionName}`);
147 }
148}
149exports.ensurePermissionNameFormat = ensurePermissionNameFormat;
150function getPermissions(doc) {
151 const usesPermissions = doc.manifest[USES_PERMISSION] || [];
152 const permissions = usesPermissions.map(permissionObject => {
153 return permissionObject['$']['android:name'] || permissionObject['$']['name'];
154 });
155 return permissions;
156}
157exports.getPermissions = getPermissions;
158//# sourceMappingURL=Permissions.js.map
\No newline at end of file