diff --git a/packages/expo-image-picker/CHANGELOG.md b/packages/expo-image-picker/CHANGELOG.md index bda4c5ef93d6f..e60cb99fc59ac 100644 --- a/packages/expo-image-picker/CHANGELOG.md +++ b/packages/expo-image-picker/CHANGELOG.md @@ -10,4 +10,5 @@ ### 🐛 Bug fixes +- Skip asking for camera permissions on web with `ImagePicker.getCameraPermissionsAsync`. ([#8475](https://github.com/expo/expo/pull/8475) by [@EvanBacon](https://github.com/EvanBacon)) - Fixed exception when calling `ImagePicker.getCameraPermissionsAsync` on Web. ([#7498](https://github.com/expo/expo/pull/7498) by [@IjzerenHein](https://github.com/IjzerenHein)) diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts index 6abb5b00e6af3..d9a09737214b5 100644 --- a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts +++ b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts @@ -1,12 +1,11 @@ -import * as Permissions from 'expo-permissions'; import { PermissionResponse } from 'unimodules-permissions-interface'; import { ImagePickerResult, ImagePickerOptions } from './ImagePicker.types'; declare const _default: { readonly name: string; launchImageLibraryAsync({ mediaTypes, allowsMultipleSelection, }: ImagePickerOptions): Promise; launchCameraAsync({ mediaTypes, allowsMultipleSelection, }: ImagePickerOptions): Promise; - getCameraPermissionsAsync(): Promise; - requestCameraPermissionsAsync(): Promise; + getCameraPermissionsAsync(): Promise; + requestCameraPermissionsAsync(): Promise; getCameraRollPermissionsAsync(): Promise; requestCameraRollPermissionsAsync(): Promise; }; diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.js b/packages/expo-image-picker/build/ExponentImagePicker.web.js index e327ce3c5712d..f1b2d6fc9b7b8 100644 --- a/packages/expo-image-picker/build/ExponentImagePicker.web.js +++ b/packages/expo-image-picker/build/ExponentImagePicker.web.js @@ -1,4 +1,3 @@ -import * as Permissions from 'expo-permissions'; import { PermissionStatus } from 'unimodules-permissions-interface'; import uuidv4 from 'uuid/v4'; import { MediaTypeOptions, } from './ImagePicker.types'; @@ -28,10 +27,10 @@ export default { * Delegate to expo-permissions to request camera permissions */ async getCameraPermissionsAsync() { - return Permissions.getAsync(Permissions.CAMERA); + return permissionGrantedResponse(); }, async requestCameraPermissionsAsync() { - return Permissions.askAsync(Permissions.CAMERA); + return permissionGrantedResponse(); }, /* * Camera roll permissions don't need to be requested on web, so we always diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.js.map b/packages/expo-image-picker/build/ExponentImagePicker.web.js.map index d3f59551d53ef..8f3453e58f0e2 100644 --- a/packages/expo-image-picker/build/ExponentImagePicker.web.js.map +++ b/packages/expo-image-picker/build/ExponentImagePicker.web.js.map @@ -1 +1 @@ -{"version":3,"file":"ExponentImagePicker.web.js","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Permissions from 'expo-permissions';\nimport { PermissionResponse, PermissionStatus } from 'unimodules-permissions-interface';\nimport uuidv4 from 'uuid/v4';\n\nimport {\n ImagePickerResult,\n MediaTypeOptions,\n OpenFileBrowserOptions,\n ImagePickerOptions,\n} from './ImagePicker.types';\n\nconst MediaTypeInput = {\n [MediaTypeOptions.All]: 'video/mp4,video/quicktime,video/x-m4v,video/*,image/*',\n [MediaTypeOptions.Images]: 'image/*',\n [MediaTypeOptions.Videos]: 'video/mp4,video/quicktime,video/x-m4v,video/*',\n};\n\nexport default {\n get name(): string {\n return 'ExponentImagePicker';\n },\n\n async launchImageLibraryAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n }: ImagePickerOptions): Promise {\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n });\n },\n\n async launchCameraAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n }: ImagePickerOptions): Promise {\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n capture: true,\n });\n },\n\n /*\n * Delegate to expo-permissions to request camera permissions\n */\n async getCameraPermissionsAsync() {\n return Permissions.getAsync(Permissions.CAMERA);\n },\n async requestCameraPermissionsAsync() {\n return Permissions.askAsync(Permissions.CAMERA);\n },\n\n /*\n * Camera roll permissions don't need to be requested on web, so we always\n * respond with granted.\n */\n async getCameraRollPermissionsAsync(): Promise {\n return permissionGrantedResponse();\n },\n async requestCameraRollPermissionsAsync(): Promise {\n return permissionGrantedResponse();\n },\n};\n\nfunction permissionGrantedResponse(): PermissionResponse {\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n granted: true,\n canAskAgain: true,\n };\n}\n\nfunction openFileBrowserAsync({\n mediaTypes,\n capture = false,\n allowsMultipleSelection = false,\n}: OpenFileBrowserOptions): Promise {\n const mediaTypeFormat = MediaTypeInput[mediaTypes];\n\n const input = document.createElement('input');\n input.style.display = 'none';\n input.setAttribute('type', 'file');\n input.setAttribute('accept', mediaTypeFormat);\n input.setAttribute('id', uuidv4());\n if (allowsMultipleSelection) {\n input.setAttribute('multiple', 'multiple');\n }\n if (capture) {\n input.setAttribute('capture', 'camera');\n }\n document.body.appendChild(input);\n\n return new Promise((resolve, reject) => {\n input.addEventListener('change', () => {\n if (input.files) {\n const targetFile = input.files[0];\n const reader = new FileReader();\n reader.onerror = () => {\n reject(new Error(`Failed to read the selected media because the operation failed.`));\n };\n reader.onload = ({ target }) => {\n const uri = (target as any).result;\n\n const returnRaw = () => {\n resolve({\n cancelled: false,\n uri,\n width: 0,\n height: 0,\n });\n };\n if (typeof target?.result === 'string') {\n const image = new Image();\n image.src = target.result;\n image.onload = function() {\n resolve({\n cancelled: false,\n uri,\n width: image.naturalWidth ?? image.width,\n height: image.naturalHeight ?? image.height,\n });\n };\n image.onerror = () => {\n returnRaw();\n };\n } else {\n returnRaw();\n }\n };\n // Read in the image file as a binary string.\n reader.readAsDataURL(targetFile);\n } else {\n resolve({ cancelled: true });\n }\n\n document.body.removeChild(input);\n });\n\n const event = new MouseEvent('click');\n input.dispatchEvent(event);\n });\n}\n"]} \ No newline at end of file +{"version":3,"file":"ExponentImagePicker.web.js","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { PermissionResponse, PermissionStatus } from 'unimodules-permissions-interface';\nimport uuidv4 from 'uuid/v4';\n\nimport {\n ImagePickerResult,\n MediaTypeOptions,\n OpenFileBrowserOptions,\n ImagePickerOptions,\n} from './ImagePicker.types';\n\nconst MediaTypeInput = {\n [MediaTypeOptions.All]: 'video/mp4,video/quicktime,video/x-m4v,video/*,image/*',\n [MediaTypeOptions.Images]: 'image/*',\n [MediaTypeOptions.Videos]: 'video/mp4,video/quicktime,video/x-m4v,video/*',\n};\n\nexport default {\n get name(): string {\n return 'ExponentImagePicker';\n },\n\n async launchImageLibraryAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n }: ImagePickerOptions): Promise {\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n });\n },\n\n async launchCameraAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n }: ImagePickerOptions): Promise {\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n capture: true,\n });\n },\n\n /*\n * Delegate to expo-permissions to request camera permissions\n */\n async getCameraPermissionsAsync() {\n return permissionGrantedResponse();\n },\n async requestCameraPermissionsAsync() {\n return permissionGrantedResponse();\n },\n\n /*\n * Camera roll permissions don't need to be requested on web, so we always\n * respond with granted.\n */\n async getCameraRollPermissionsAsync(): Promise {\n return permissionGrantedResponse();\n },\n async requestCameraRollPermissionsAsync(): Promise {\n return permissionGrantedResponse();\n },\n};\n\nfunction permissionGrantedResponse(): PermissionResponse {\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n granted: true,\n canAskAgain: true,\n };\n}\n\nfunction openFileBrowserAsync({\n mediaTypes,\n capture = false,\n allowsMultipleSelection = false,\n}: OpenFileBrowserOptions): Promise {\n const mediaTypeFormat = MediaTypeInput[mediaTypes];\n\n const input = document.createElement('input');\n input.style.display = 'none';\n input.setAttribute('type', 'file');\n input.setAttribute('accept', mediaTypeFormat);\n input.setAttribute('id', uuidv4());\n if (allowsMultipleSelection) {\n input.setAttribute('multiple', 'multiple');\n }\n if (capture) {\n input.setAttribute('capture', 'camera');\n }\n document.body.appendChild(input);\n\n return new Promise((resolve, reject) => {\n input.addEventListener('change', () => {\n if (input.files) {\n const targetFile = input.files[0];\n const reader = new FileReader();\n reader.onerror = () => {\n reject(new Error(`Failed to read the selected media because the operation failed.`));\n };\n reader.onload = ({ target }) => {\n const uri = (target as any).result;\n\n const returnRaw = () => {\n resolve({\n cancelled: false,\n uri,\n width: 0,\n height: 0,\n });\n };\n if (typeof target?.result === 'string') {\n const image = new Image();\n image.src = target.result;\n image.onload = function() {\n resolve({\n cancelled: false,\n uri,\n width: image.naturalWidth ?? image.width,\n height: image.naturalHeight ?? image.height,\n });\n };\n image.onerror = () => {\n returnRaw();\n };\n } else {\n returnRaw();\n }\n };\n // Read in the image file as a binary string.\n reader.readAsDataURL(targetFile);\n } else {\n resolve({ cancelled: true });\n }\n\n document.body.removeChild(input);\n });\n\n const event = new MouseEvent('click');\n input.dispatchEvent(event);\n });\n}\n"]} \ No newline at end of file diff --git a/packages/expo-image-picker/src/ExponentImagePicker.web.ts b/packages/expo-image-picker/src/ExponentImagePicker.web.ts index 02369d5e822ed..195f6b9199eff 100644 --- a/packages/expo-image-picker/src/ExponentImagePicker.web.ts +++ b/packages/expo-image-picker/src/ExponentImagePicker.web.ts @@ -1,4 +1,3 @@ -import * as Permissions from 'expo-permissions'; import { PermissionResponse, PermissionStatus } from 'unimodules-permissions-interface'; import uuidv4 from 'uuid/v4'; @@ -45,10 +44,10 @@ export default { * Delegate to expo-permissions to request camera permissions */ async getCameraPermissionsAsync() { - return Permissions.getAsync(Permissions.CAMERA); + return permissionGrantedResponse(); }, async requestCameraPermissionsAsync() { - return Permissions.askAsync(Permissions.CAMERA); + return permissionGrantedResponse(); }, /*