1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"file":"Permissions.js","sourceRoot":"","sources":["../../src/android/Permissions.ts"],"names":[],"mappings":";;AAGA,gEAAiE;AAGjE,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE7B,QAAA,mBAAmB,GAAG;IACjC,6BAA6B;IAC7B,yCAAyC;IACzC,wCAAwC;IACxC,8BAA8B;IAC9B,4CAA4C;CAC7C,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,GAAG,2BAAmB;IACtB,sCAAsC;IACtC,2CAA2C;IAC3C,yCAAyC;IACzC,2BAA2B;IAC3B,qCAAqC;IACrC,kCAAkC;IAClC,mCAAmC;IACnC,kCAAkC;IAClC,mCAAmC;IACnC,0CAA0C;IAC1C,0CAA0C;IAC1C,qCAAqC;IACrC,iCAAiC;IACjC,oCAAoC;IACpC,4BAA4B;IAC5B,2CAA2C;IAC3C,6BAA6B;IAC7B,8CAA8C;IAC9C,kDAAkD;IAClD,wDAAwD;IACxD,4DAA4D;IAC5D,2CAA2C;IAC3C,6CAA6C;IAC7C,6CAA6C;IAC7C,gDAAgD;IAChD,iDAAiD;IACjD,kDAAkD;CACnD,CAAC;AAEW,QAAA,eAAe,GAAkC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QAC9B,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW;YAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG;YAC3B,aAAa;YACb,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SAC3D,CAAC;KACH;IACD,OAAO,qCAAmB,CAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QAChD,MAAM,CAAC,UAAU,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,mCAAmC,CAAC,WAAqB;IAChE,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B,OAAO,sBAAsB,UAAU,EAAE,CAAC;SAC3C;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAmC;;IACvE,mBAAO,MAAM,CAAC,OAAO,0CAAE,WAAW,mCAAI,EAAE,CAAC;AAC3C,CAAC;AAFD,sDAEC;AAED,SAAgB,qBAAqB,CACnC,MAAmC,EACnC,eAAgC;;IAEhC,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,2BAA2B;QAC3B,gBAAgB,GAAG,sBAAc,CAAC;KACnC;SAAM;QACL,gEAAgE;QAChE,MAAM,mBAAmB,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAC;QAC7E,gBAAgB,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,2BAAmB,CAAC,CAAC;KACrE;IAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;QAC/D,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;KAClD;IACD,6CAA6C;IAE7C,MAAM,mBAAmB,SAAG,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,mCAAI,EAAE,CAAC;IAE9E,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACpC,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE;YAClE,uBAAuB,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;SAC1D;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC;AA7BD,sDA6BC;AAED,SAAgB,4BAA4B,CAC1C,UAAkB,EAClB,mBAA6C;IAE7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,UAAU,CAAC,CAAC;AAC3E,CAAC;AALD,oEAKC;AAED,SAAgB,uBAAuB,CACrC,UAAkB,EAClB,mBAA6C;IAE7C,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAND,0DAMC;AAED,SAAgB,iBAAiB,CAAC,eAAgC,EAAE,eAA0B;IAC5F,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;QACnC,IAAI,WAAW,EAAE;YACf,0CAA0C;YAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAChC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACjC;SACF;KACF;IAED,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AAC9D,CAAC;AAfD,8CAeC;AAED,SAAgB,aAAa,CAAC,eAAgC,EAAE,cAAsB;IACpF,MAAM,eAAe,GAA6B,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClG,eAAe,CAAC,IAAI,CAAC;QACnB,CAAC,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE;KACtC,CAAC,CAAC;IACH,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AAC9D,CAAC;AAND,sCAMC;AAED,SAAgB,iBAAiB,CAC/B,eAAgC,EAChC,eAAyB;IAEzB,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAsC,EAAE,CAAC;IACtD,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;QAC5C,MAAM,UAAU,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACrC,aAAa,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC3C,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;SAChC;aAAM;YACL,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;SACjC;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAjBD,8CAiBC;AAED,SAAgB,gBAAgB,CAC9B,eAAgC,EAChC,cAAsB;IAEtB,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IAE9D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrC,aAAa,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,4CAYC;AAED,SAAgB,0BAA0B,CAAC,cAAsB;IAC/D,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAY,CAAC;QACjC,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/C;SAAM;QACL,yGAAyG;QACzG,OAAO,0BAA0B,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAC;KAC3E;AACH,CAAC;AATD,gEASC;AAED,SAAgB,cAAc,CAAC,eAAgC;IAC7D,MAAM,eAAe,GAA6B,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClG,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;QACzD,OAAO,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC;AAND,wCAMC","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withAndroidManifest } from '../plugins/android-plugins';\nimport { AndroidManifest, ManifestUsesPermission } from './Manifest';\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];\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\nexport const withPermissions: ConfigPlugin<string[] | void> = (config, permissions) => {\n if (Array.isArray(permissions)) {\n permissions = permissions.filter(Boolean);\n if (!config.android) config.android = {};\n if (!config.android.permissions) config.android.permissions = [];\n config.android.permissions = [\n // @ts-ignore\n ...new Set(config.android.permissions.concat(permissions)),\n ];\n }\n return withAndroidManifest(config, async config => {\n config.modResults = await setAndroidPermissions(config, config.modResults);\n return config;\n });\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: Pick<ExpoConfig, 'android'>): string[] {\n return config.android?.permissions ?? [];\n}\n\nexport function setAndroidPermissions(\n config: Pick<ExpoConfig, 'android'>,\n androidManifest: AndroidManifest\n) {\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 if (!androidManifest.manifest.hasOwnProperty('uses-permission')) {\n androidManifest.manifest['uses-permission'] = [];\n }\n // manifest.manifest['uses-permission'] = [];\n\n const manifestPermissions = androidManifest.manifest['uses-permission'] ?? [];\n\n permissionsToAdd.forEach(permission => {\n if (!isPermissionAlreadyRequested(permission, manifestPermissions)) {\n addPermissionToManifest(permission, manifestPermissions);\n }\n });\n\n return androidManifest;\n}\n\nexport function isPermissionAlreadyRequested(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n): boolean {\n return manifestPermissions.some(e => e.$['android:name'] === permission);\n}\n\nexport function addPermissionToManifest(\n permission: string,\n manifestPermissions: ManifestUsesPermission[]\n) {\n manifestPermissions.push({ $: { 'android:name': permission } });\n return manifestPermissions;\n}\n\nexport function removePermissions(androidManifest: AndroidManifest, permissionNames?: string[]) {\n const targetNames = permissionNames ? permissionNames.map(ensurePermissionNameFormat) : null;\n const permissions = androidManifest.manifest[USES_PERMISSION] || [];\n const nextPermissions = [];\n for (const attribute of permissions) {\n if (targetNames) {\n // @ts-ignore: name isn't part of the type\n const value = attribute.$['android:name'] || attribute.$.name;\n if (!targetNames.includes(value)) {\n nextPermissions.push(attribute);\n }\n }\n }\n\n androidManifest.manifest[USES_PERMISSION] = nextPermissions;\n}\n\nexport function addPermission(androidManifest: AndroidManifest, permissionName: string): void {\n const usesPermissions: ManifestUsesPermission[] = androidManifest.manifest[USES_PERMISSION] || [];\n usesPermissions.push({\n $: { 'android:name': permissionName },\n });\n androidManifest.manifest[USES_PERMISSION] = usesPermissions;\n}\n\nexport function ensurePermissions(\n androidManifest: AndroidManifest,\n permissionNames: string[]\n): { [permission: string]: boolean } {\n const permissions = getPermissions(androidManifest);\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(androidManifest, targetName);\n results[permissionName] = true;\n } else {\n results[permissionName] = false;\n }\n }\n return results;\n}\n\nexport function ensurePermission(\n androidManifest: AndroidManifest,\n permissionName: string\n): boolean {\n const permissions = getPermissions(androidManifest);\n const targetName = ensurePermissionNameFormat(permissionName);\n\n if (!permissions.includes(targetName)) {\n addPermission(androidManifest, 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(androidManifest: AndroidManifest): string[] {\n const usesPermissions: { [key: string]: any }[] = androidManifest.manifest[USES_PERMISSION] || [];\n const permissions = usesPermissions.map(permissionObject => {\n return permissionObject.$['android:name'] || permissionObject.$.name;\n });\n return permissions;\n}\n"]} |