setAudioEnabled method

Future<void> setAudioEnabled(
  1. bool enabled
)

Enables/disables local audio stream based on enabled.

Implementation

Future<void> setAudioEnabled(bool enabled) async {
  Log.debug('setAudioEnabled($enabled)', '$runtimeType');

  switch (audioState.value) {
    case LocalTrackState.disabled:
    case LocalTrackState.disabling:
      if (enabled) {
        audioState.value = LocalTrackState.enabling;
        try {
          if (!hasAudio) {
            await _room?.enableAudio(MediaSourceKind.device);
            await _updateSettings(
              audio: true,
              audioDevice: audioDevice.value,
            );
          }

          await _room?.unmuteAudio(MediaSourceKind.device);
          audioState.value = LocalTrackState.enabled;
        } on MediaStateTransitionException catch (_) {
          // No-op.
        } on LocalMediaInitException catch (e) {
          audioState.value = LocalTrackState.disabled;
          if (e.message().contains('Permission denied') ||
              e.message().contains('NotAllowedError')) {
            _notifications.add(MicrophonePermissionDeniedNotification());
          } else {
            _notifications.add(MicrophoneDeviceFailedNotification());
            Log.warning('unmuteAudio() call failed with $e', '$runtimeType');
            rethrow;
          }
        } catch (e) {
          audioState.value = LocalTrackState.disabled;
          _notifications.add(MicrophoneDeviceFailedNotification());
          Log.warning('unmuteAudio() call failed with $e', '$runtimeType');
          rethrow;
        }
      }
      break;

    case LocalTrackState.enabled:
    case LocalTrackState.enabling:
      if (!enabled) {
        audioState.value = LocalTrackState.disabling;
        try {
          await _room?.muteAudio(MediaSourceKind.device);
          audioState.value = LocalTrackState.disabled;
        } on MediaStateTransitionException catch (_) {
          // No-op.
        } catch (e) {
          audioState.value = LocalTrackState.enabled;
          addError('muteAudio() call failed with $e');
          rethrow;
        }
      }
      break;
  }
}