1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const USES_PERMISSION = 'uses-permission';
|
4 | exports.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 | ];
|
11 | exports.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 | ];
|
41 | function prefixAndroidPermissionsIfNecessary(permissions) {
|
42 | return permissions.map(permission => {
|
43 | if (!permission.includes('.')) {
|
44 | return `android.permission.${permission}`;
|
45 | }
|
46 | return permission;
|
47 | });
|
48 | }
|
49 | function 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 | }
|
53 | exports.getAndroidPermissions = getAndroidPermissions;
|
54 | async function setAndroidPermissions(config, manifestDocument) {
|
55 | const permissions = getAndroidPermissions(config);
|
56 | let permissionsToAdd = [];
|
57 | if (permissions === null) {
|
58 |
|
59 | permissionsToAdd = exports.allPermissions;
|
60 | }
|
61 | else {
|
62 |
|
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 | }
|
78 | exports.setAndroidPermissions = setAndroidPermissions;
|
79 | function isPermissionAlreadyRequested(permission, manifestPermissions) {
|
80 | const hasPermission = manifestPermissions.filter((e) => e['$']['android:name'] === permission);
|
81 | return hasPermission.length > 0;
|
82 | }
|
83 | exports.isPermissionAlreadyRequested = isPermissionAlreadyRequested;
|
84 | function addPermissionToManifest(permission, manifestPermissions) {
|
85 | manifestPermissions.push({ $: { 'android:name': permission } });
|
86 | return manifestPermissions;
|
87 | }
|
88 | exports.addPermissionToManifest = addPermissionToManifest;
|
89 | function 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 | }
|
103 | exports.removePermissions = removePermissions;
|
104 | function 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 | }
|
111 | exports.addPermission = addPermission;
|
112 | function 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 | }
|
127 | exports.ensurePermissions = ensurePermissions;
|
128 | function 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 | }
|
137 | exports.ensurePermission = ensurePermission;
|
138 | function 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 |
|
146 | return ensurePermissionNameFormat(`android.permission.${permissionName}`);
|
147 | }
|
148 | }
|
149 | exports.ensurePermissionNameFormat = ensurePermissionNameFormat;
|
150 | function 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 | }
|
157 | exports.getPermissions = getPermissions;
|
158 |
|
\ | No newline at end of file |