react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
74 lines (73 loc) • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _configPlugins = require("@expo/config-plugins");
const pkg = require('react-native-audio-api/package.json');
const withDefaultOptions = options => {
return {
iosBackgroundMode: true,
androidPermissions: ['android.permission.FOREGROUND_SERVICE', 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK'],
androidForegroundService: true,
androidFSTypes: ['mediaPlayback'],
...options
};
};
const withBackgroundAudio = config => {
return (0, _configPlugins.withInfoPlist)(config, iosConfig => {
iosConfig.modResults.UIBackgroundModes = [...Array.from(new Set([...(iosConfig.modResults.UIBackgroundModes ?? []), 'audio']))];
return iosConfig;
});
};
const withIosMicrophonePermission = (config, {
iosMicrophonePermission
}) => {
return (0, _configPlugins.withInfoPlist)(config, iosConfig => {
iosConfig.modResults.NSMicrophoneUsageDescription = iosMicrophonePermission;
return iosConfig;
});
};
const withAndroidPermissions = (config, {
androidPermissions
}) => {
return _configPlugins.AndroidConfig.Permissions.withPermissions(config, androidPermissions);
};
const withForegroundService = (config, {
androidFSTypes
}) => {
return (0, _configPlugins.withAndroidManifest)(config, mod => {
const manifest = mod.modResults;
const mainApplication = _configPlugins.AndroidConfig.Manifest.getMainApplicationOrThrow(manifest);
const SFTypes = androidFSTypes.join('|');
const serviceElement = {
$: {
'android:name': 'com.swmansion.audioapi.system.MediaNotificationManager$AudioForegroundService',
'android:stopWithTask': 'true',
'android:foregroundServiceType': SFTypes
},
intentFilter: []
};
if (!mainApplication.service) {
mainApplication.service = [];
}
mainApplication.service.push(serviceElement);
return mod;
});
};
const withAudioAPI = (config, optionsIn) => {
const options = withDefaultOptions(optionsIn ?? {});
if (options.iosBackgroundMode) {
config = withBackgroundAudio(config);
}
config = withAndroidPermissions(config, options);
if (options.androidForegroundService) {
config = withForegroundService(config, options);
}
if (options.iosMicrophonePermission) {
config = withIosMicrophonePermission(config, options);
}
return config;
};
var _default = exports.default = (0, _configPlugins.createRunOncePlugin)(withAudioAPI, pkg.name, pkg.version);
//# sourceMappingURL=withAudioAPI.js.map