import { AndroidConfig, type ConfigPlugin, createRunOncePlugin, IOSConfig, withGradleProperties, withPodfileProperties, } from 'expo/config-plugins'; const pkg = require('expo-camera/package.json'); const CAMERA_USAGE = 'Allow $(PRODUCT_NAME) to access your camera'; const MICROPHONE_USAGE = 'Allow $(PRODUCT_NAME) to access your microphone'; const BARCODE_SCANNER_KEY = 'expo.camera.barcode-scanner-enabled'; const withCamera: ConfigPlugin< { cameraPermission?: string | false; microphonePermission?: string | false; recordAudioAndroid?: boolean; barcodeScannerEnabled?: boolean; } | void > = ( config, { cameraPermission, microphonePermission, recordAudioAndroid = true, barcodeScannerEnabled = true, } = {} ) => { IOSConfig.Permissions.createPermissionsPlugin({ NSCameraUsageDescription: CAMERA_USAGE, NSMicrophoneUsageDescription: MICROPHONE_USAGE, })(config, { NSCameraUsageDescription: cameraPermission, NSMicrophoneUsageDescription: microphonePermission, }); config = withPodfileProperties(config, (config) => { if (barcodeScannerEnabled === false) { config.modResults[BARCODE_SCANNER_KEY] = 'false'; } else { delete config.modResults[BARCODE_SCANNER_KEY]; } return config; }); config = withGradleProperties(config, (config) => { config.modResults = AndroidConfig.BuildProperties.updateAndroidBuildProperty( config.modResults, BARCODE_SCANNER_KEY, barcodeScannerEnabled === false ? 'false' : null, { removePropWhenValueIsNull: true } ); return config; }); config = AndroidConfig.Permissions.withPermissions( config, [ 'android.permission.CAMERA', // Optional recordAudioAndroid && 'android.permission.RECORD_AUDIO', ].filter(Boolean) as string[] ); return config; }; export default createRunOncePlugin(withCamera, pkg.name, pkg.version);