diff --git a/index.ios.ts b/index.ios.ts index fa30f3c..85120fa 100644 --- a/index.ios.ts +++ b/index.ios.ts @@ -67,16 +67,27 @@ const setActive = (active: boolean): Promise => const setCategory = ( category: AudioCategory, - options?: AudioCategoryOptions -): Promise => RNAudioSession.setCategory(category, options) + options?: Array | AudioCategoryOptions +): Promise => ( + RNAudioSession.setCategory( + category, + Array.isArray(options) ? options : [options] + ) +) const setMode = (mode: AudioMode): Promise => RNAudioSession.setMode(mode) const setCategoryAndMode = ( category: AudioCategory, mode: AudioMode, - options?: AudioCategoryOptions -): Promise => RNAudioSession.setCategoryAndMode(category, mode, options) + options?: Array | AudioCategoryOptions +): Promise => ( + RNAudioSession.setCategoryAndMode( + category, + mode, + Array.isArray(options) ? options : [options] + ) +) const AudioSession = { currentCategory, diff --git a/ios/RNAudioSession.m b/ios/RNAudioSession.m index 3a8259e..e43da14 100644 --- a/ios/RNAudioSession.m +++ b/ios/RNAudioSession.m @@ -94,16 +94,21 @@ + (void)initialize { } } -RCT_EXPORT_METHOD(setCategory:(NSString *)category options:(NSString *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +RCT_EXPORT_METHOD(setCategory:(NSString *)category options:(NSArray *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSString* cat = _categories[category]; if (cat != nil && [[AVAudioSession sharedInstance].availableCategories containsObject:cat]) { NSError *error = nil; - if (_options[options] != nil) { - [[AVAudioSession sharedInstance] setCategory:cat withOptions:[_options[options] integerValue] error:&error]; - } else { - [[AVAudioSession sharedInstance] setCategory:cat error:&error]; + AVAudioSessionCategoryOptions categoryOptions = 0; + + for (NSString *option in options) { + if (_options[option] != nil) { + categoryOptions |= [_options[option] integerValue]; + } } + + [[AVAudioSession sharedInstance] setCategory:cat withOptions:categoryOptions error:&error]; + if (error) { reject(@"setCategory", @"Could not set category.", error); } else { @@ -142,13 +147,22 @@ + (void)initialize { } } -RCT_EXPORT_METHOD(setCategoryAndMode:(NSString *)category mode:(NSString *)mode options:(NSString *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +RCT_EXPORT_METHOD(setCategoryAndMode:(NSString *)category mode:(NSString *)mode options:(NSArray *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSString* cat = _categories[category]; NSString* mod = _modes[mode]; if (cat != nil && mod != nil && _options[options] != nil && [[AVAudioSession sharedInstance].availableCategories containsObject:cat] && [[AVAudioSession sharedInstance].availableModes containsObject:mod]) { NSError *error = nil; - [[AVAudioSession sharedInstance] setCategory:cat mode:mod options:[_options[options] integerValue] error:&error]; + + AVAudioSessionCategoryOptions categoryOptions = 0; + + for (NSString *option in options) { + if (_options[option] != nil) { + categoryOptions |= [_options[option] integerValue]; + } + } + + [[AVAudioSession sharedInstance] setCategory:cat mode:mod options:categoryOptions error:&error]; if (error) { reject(@"setCategoryAndMode", @"Could not set category and mode.", error); } else {