UNPKG

10.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"Permissions.js","sourceRoot":"","sources":["../../src/android/Permissions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoConfig } from '../Config.types';\nimport { Document } from './Manifest';\n\ntype XMLPermission = { $: { 'android:name': string } };\n\nconst USES_PERMISSION = 'uses-permission';\n\nexport const requiredPermissions = [\n 'android.permission.INTERNET',\n 'android.permission.ACCESS_NETWORK_STATE',\n 'android.permission.SYSTEM_ALERT_WINDOW',\n 'android.permission.WAKE_LOCK',\n 'com.google.android.c2dm.permission.RECEIVE',\n];\nexport const allPermissions = [\n ...requiredPermissions,\n 'android.permission.ACCESS_WIFI_STATE',\n 'android.permission.ACCESS_COARSE_LOCATION',\n 'android.permission.ACCESS_FINE_LOCATION',\n 'android.permission.CAMERA',\n 'android.permission.MANAGE_DOCUMENTS',\n 'android.permission.READ_CONTACTS',\n 'android.permission.WRITE_CONTACTS',\n 'android.permission.READ_CALENDAR',\n 'android.permission.WRITE_CALENDAR',\n 'android.permission.READ_EXTERNAL_STORAGE',\n 'android.permission.READ_INTERNAL_STORAGE',\n 'android.permission.READ_PHONE_STATE',\n 'android.permission.RECORD_AUDIO',\n 'android.permission.USE_FINGERPRINT',\n 'android.permission.VIBRATE',\n 'android.permission.WRITE_EXTERNAL_STORAGE',\n 'android.permission.READ_SMS',\n 'com.anddoes.launcher.permission.UPDATE_COUNT',\n 'com.android.launcher.permission.INSTALL_SHORTCUT',\n 'com.google.android.gms.permission.ACTIVITY_RECOGNITION',\n 'com.google.android.providers.gsf.permission.READ_GSERVICES',\n 'com.htc.launcher.permission.READ_SETTINGS',\n 'com.htc.launcher.permission.UPDATE_SHORTCUT',\n 'com.majeur.launcher.permission.UPDATE_BADGE',\n 'com.sec.android.provider.badge.permission.READ',\n 'com.sec.android.provider.badge.permission.WRITE',\n 'com.sonyericsson.home.permission.BROADCAST_BADGE',\n];\n\nfunction prefixAndroidPermissionsIfNecessary(permissions: string[]): string[] {\n return permissions.map(permission => {\n if (!permission.includes('.')) {\n return `android.permission.${permission}`;\n }\n return permission;\n });\n}\n\nexport function getAndroidPermissions(config: ExpoConfig): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport async function setAndroidPermissions(config: ExpoConfig, manifestDocument: Document) {\n const permissions = getAndroidPermissions(config);\n let permissionsToAdd = [];\n if (permissions === null) {\n // Use all Expo permissions\n permissionsToAdd = allPermissions;\n } else {\n // Use minimum required, plus any specified in permissions array\n const providedPermissions = prefixAndroidPermissionsIfNecessary(permissions);\n permissionsToAdd = [...providedPermissions, ...requiredPermissions];\n }\n\n let manifestPermissions: XMLPermission[] = [];\n if (!manifestDocument.manifest.hasOwnProperty('uses-permission')) {\n manifestDocument.manifest['uses-permission'] = [];\n }\n manifestPermissions = manifestDocument.manifest['uses-permission'];\n\n permissionsToAdd.forEach(permission => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return manifestDocument;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: XMLPermission[]\n): boolean {\n const hasPermission = manifestPermissions.filter(\n (e: any) => e['$']['android:name'] === permission\n );\n return hasPermission.length > 0;\n}\n\nexport function addPermissionToManifest(permission: string, manifestPermissions: XMLPermission[]) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(doc: Document, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = doc.manifest[USES_PERMISSION] || [];\n let nextPermissions = [];\n for (let attribute of permissions) {\n if (targetNames) {\n const value = attribute['$']['android:name'] || attribute['$']['name'];\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n doc.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(doc: Document, permissionName: string): void {\n const usesPermissions: { [key: string]: any }[] = doc.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n doc.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n doc: Document,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(doc);\n\n const results: { [permission: string]: boolean } = {};\n for (const permissionName of permissionNames) {\n const targetName = ensurePermissionNameFormat(permissionName);\n if (!permissions.includes(targetName)) {\n addPermission(doc, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(doc: Document, permissionName: string): boolean {\n const permissions = getPermissions(doc);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(doc, targetName);\n return true;\n }\n return false;\n}\n\nexport function ensurePermissionNameFormat(permissionName: string): string {\n if (permissionName.includes('.')) {\n const com = permissionName.split('.');\n const name = com.pop() as string;\n return [...com, name.toUpperCase()].join('.');\n } else {\n // If shorthand form like `WRITE_CONTACTS` is provided, expand it to `android.permission.WRITE_CONTACTS`.\n return ensurePermissionNameFormat(`android.permission.${permissionName}`);\n }\n}\n\nexport function getPermissions(doc: Document): string[] {\n const usesPermissions: { [key: string]: any }[] = doc.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map(permissionObject => {\n return permissionObject['$']['android:name'] || permissionObject['$']['name'];\n });\n return permissions;\n}\n"]}
\No newline at end of file