From ffd64feee89f58a95af7c777c28b59526f6f08d1 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Thu, 5 Oct 2023 11:06:38 +0200 Subject: [PATCH] feat: Add `enableCodeScanner` to Expo Config Plugin --- docs/docs/guides/CODE_SCANNING.mdx | 36 ++++++++++++++++++++- package/src/expo-plugin/withVisionCamera.ts | 33 ++++++++++++++++++- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/docs/docs/guides/CODE_SCANNING.mdx b/docs/docs/guides/CODE_SCANNING.mdx index 449ecdd..c062010 100644 --- a/docs/docs/guides/CODE_SCANNING.mdx +++ b/docs/docs/guides/CODE_SCANNING.mdx @@ -30,7 +30,18 @@ A Code Scanner is a separate Camera output (just like photo or video) that can d On iOS, the Code Scanner uses the platform-native APIs and can be used out of the box. -On Android, the [MLKit Vision Barcode Scanning](https://developers.google.com/ml-kit/vision/barcode-scanning) API will be used, and the model (2.2MB) needs to be downloaded first. To download the model when the user installs your app, add this to your `AndroidManifest.xml` file: +On Android, the [MLKit Vision Barcode Scanning](https://developers.google.com/ml-kit/vision/barcode-scanning) API will be used, and the model (2.2MB) needs to be downloaded first. + + + + +To download the model when the user installs your app, add this to your `AndroidManifest.xml` file: ```xml @@ -41,6 +52,29 @@ On Android, the [MLKit Vision Barcode Scanning](https://developers.google.com/ml ``` + + + +To download the model when the user installs your app, add the `enableCodeScanner` flag to your Expo config (`app.json`, `app.config.json` or `app.config.js`): + +```json +{ + "name": "my app", + "plugins": [ + [ + "react-native-vision-camera", + { + // ... + "enableCodeScanner": true + } + ] + ] +} +``` + + + + ## Usage To use a codescanner, simply create a [`CodeScanner`](/docs/api/interfaces/CodeScanner) and pass it to the ``: diff --git a/package/src/expo-plugin/withVisionCamera.ts b/package/src/expo-plugin/withVisionCamera.ts index 9c7d406..00d59a2 100644 --- a/package/src/expo-plugin/withVisionCamera.ts +++ b/package/src/expo-plugin/withVisionCamera.ts @@ -9,10 +9,36 @@ const CAMERA_USAGE = 'Allow $(PRODUCT_NAME) to access your camera' const MICROPHONE_USAGE = 'Allow $(PRODUCT_NAME) to access your microphone' type Props = { + /** + * The text to show in the native dialog when asking for Camera Permissions. + * @default 'Allow $(PRODUCT_NAME) to access your camera' + */ cameraPermissionText?: string + /** + * Whether to add Microphone Permissions to the native manifest or not. + * @default false + */ enableMicrophonePermission?: boolean + /** + * The text to show in the native dialog when asking for Camera Permissions. + * @default 'Allow $(PRODUCT_NAME) to access your microphone' + */ microphonePermissionText?: string + /** + * Whether to enable the Frame Processors runtime, or explicitly disable it. + * Disabling Frame Processors will make your app smaller as the C++ files will not be compiled. + * See [Frame Processors](https://www.react-native-vision-camera.com/docs/guides/frame-processors) + * @default false + */ disableFrameProcessors?: boolean + /** + * Whether to enable the QR/Barcode Scanner Model. If true, the MLKit Model will + * automatically be downloaded on app startup. If false, it will be downloaded + * once the Camera is created with a `CodeScanner`. + * See [QR/Barcode Scanning](https://www.react-native-vision-camera.com/docs/guides/code-scanning) + * @default false + */ + enableCodeScanner?: boolean } const withCamera: ConfigPlugin = (config, props = {}) => { @@ -32,7 +58,12 @@ const withCamera: ConfigPlugin = (config, props = {}) => { config = withDisableFrameProcessorsIOS(config) } - return withPlugins(config, [[AndroidConfig.Permissions.withPermissions, androidPermissions], withAndroidMLKitVisionModel]) + if (props.enableCodeScanner) { + // Adds meta download-request tag to AndroidManifest + config = withAndroidMLKitVisionModel(config) + } + + return withPlugins(config, [[AndroidConfig.Permissions.withPermissions, androidPermissions]]) } export default createRunOncePlugin(withCamera, pkg.name, pkg.version)