From 1dd2cf663dbc67bb4592976d33138c80381782df Mon Sep 17 00:00:00 2001 From: YuliaGrigorieva Date: Tue, 28 May 2024 16:35:22 +0300 Subject: [PATCH] [audio_call]: fix mute and hold actions --- .../active_call/bloc/active_call_bloc.dart | 37 ++++++++----------- .../lib/services/call/call_service.dart | 34 +++++++++-------- .../lib/services/call/callkit_service.dart | 24 ++++++------ audio_call/pubspec.lock | 26 ++++++------- 4 files changed, 59 insertions(+), 62 deletions(-) diff --git a/audio_call/lib/screens/active_call/bloc/active_call_bloc.dart b/audio_call/lib/screens/active_call/bloc/active_call_bloc.dart index 1ef19aa..f8bd105 100644 --- a/audio_call/lib/screens/active_call/bloc/active_call_bloc.dart +++ b/audio_call/lib/screens/active_call/bloc/active_call_bloc.dart @@ -50,19 +50,18 @@ class ActiveCallBloc extends Bloc { } Future _readyToStartCall( - ReadyToStartCallEvent event, - Emitter emit) async { + ReadyToStartCallEvent event, Emitter emit) async { _callStateSubscription = _callService.subscribeToCallEvents().listen( - (event) { + (event) { add(CallChangedEvent(event)); }, ); _audioDeviceSubscription = _callService.subscribeToAudioDeviceEvents().listen( - (event) { - add(AudioDevicesChanged(event)); - }, - ); + (event) { + add(AudioDevicesChanged(event)); + }, + ); try { if (_isIncoming) { if (Platform.isAndroid) { @@ -96,8 +95,7 @@ class ActiveCallBloc extends Bloc { } Future _handleCallChanged( - CallChangedEvent event, - Emitter emit) async { + CallChangedEvent event, Emitter emit) async { CallEvent callEvent = event.event; if (callEvent is OnFailedCallEvent) { @@ -145,38 +143,33 @@ class ActiveCallBloc extends Bloc { } Future _holdCall( - HoldPressedEvent event, - Emitter emit) async { - Platform.isIOS + HoldPressedEvent event, Emitter emit) async { + Platform.isIOS ? await _callKitService?.holdCall(event.hold) : await _callService.holdCall(hold: event.hold); } Future _muteAudio( - MutePressedEvent event, - Emitter emit) async { - Platform.isIOS + MutePressedEvent event, Emitter emit) async { + Platform.isIOS ? await _callKitService?.muteCall(event.mute) : await _callService.muteCall(mute: event.mute); } Future _hangupCall( - HangupPressedEvent event, - Emitter emit) async { - Platform.isIOS + HangupPressedEvent event, Emitter emit) async { + Platform.isIOS ? await _callKitService?.endCall() : await _callService.hangup(); } - Future _selectAudioDevice( - SelectAudioDevicePressedEvent event, + Future _selectAudioDevice(SelectAudioDevicePressedEvent event, Emitter emit) async { await _callService.selectAudioDevice(device: event.device); } Future _handleAudioDevicesChanged( - AudioDevicesChanged event, - Emitter emit) async { + AudioDevicesChanged event, Emitter emit) async { AudioDeviceEvent audioEvent = event.event; if (audioEvent is OnActiveAudioDeviceChanged) { emit(state.copyWith(activeAudioDevice: audioEvent.device)); diff --git a/audio_call/lib/services/call/call_service.dart b/audio_call/lib/services/call/call_service.dart index 0474897..85291a1 100644 --- a/audio_call/lib/services/call/call_service.dart +++ b/audio_call/lib/services/call/call_service.dart @@ -25,8 +25,10 @@ class CallService { Function? onIncomingCall; - StreamController _callStreamController = StreamController.broadcast(); - StreamController _audioDeviceStreamController = StreamController.broadcast(); + StreamController _callStreamController = + StreamController.broadcast(); + StreamController _audioDeviceStreamController = + StreamController.broadcast(); CallState get callState => _callState; CallState _callState = CallState.none; @@ -174,11 +176,11 @@ class CallService { await _audioDeviceManager.selectAudioDevice(device); Future _onIncomingCall( - VIClient client, - VICall call, - bool video, - Map? headers, - ) async { + VIClient client, + VICall call, + bool video, + Map? headers, + ) async { _log('_onIncomingCall'); if (hasActiveCall && _activeCall?.callId != call.callId) { await call.reject(); @@ -215,10 +217,10 @@ class CallService { } void _onCallDisconnected( - VICall call, - Map? headers, - bool answeredElsewhere, - ) async { + VICall call, + Map? headers, + bool answeredElsewhere, + ) async { _log('onCallDisconnected'); if (call.callId == _activeCall?.callId) { _activeCall = null; @@ -239,11 +241,11 @@ class CallService { } void _onCallFailed( - VICall call, - int code, - String description, - Map? headers, - ) async { + VICall call, + int code, + String description, + Map? headers, + ) async { _log('onCallFailed($code, $description)'); if (call.callId == _activeCall?.callId) { _activeCall = null; diff --git a/audio_call/lib/services/call/callkit_service.dart b/audio_call/lib/services/call/callkit_service.dart index 06c7f38..6ed9fbd 100644 --- a/audio_call/lib/services/call/callkit_service.dart +++ b/audio_call/lib/services/call/callkit_service.dart @@ -108,12 +108,13 @@ class CallKitService { _provider.executeTransaction = (transaction) { _log('Should execute or delay transaction...'); - if ((_authService.clientState == VIClientState.LoggedIn || _authService.clientState == VIClientState.Reconnecting) - && (_callService.hasActiveCall || _callStarting) - ) { + if ((_authService.clientState == VIClientState.LoggedIn || + _authService.clientState == VIClientState.Reconnecting) && + (_callService.hasActiveCall || _callStarting)) { _log('Executing transaction now'); return false; - } else if (_authService.clientState == VIClientState.Disconnected || _authService.clientState == VIClientState.Connected) { + } else if (_authService.clientState == VIClientState.Disconnected || + _authService.clientState == VIClientState.Connected) { _log('Need to connect or login...'); Future loginAndCommitTransactions() async { try { @@ -128,6 +129,7 @@ class CallKitService { } } } + loginAndCommitTransactions(); } _log('Delaying transaction'); @@ -266,7 +268,7 @@ class CallKitService { Future _commitTransactions() async { List transactions = - await _provider.getPendingTransactions(); + await _provider.getPendingTransactions(); for (final transaction in transactions) { List actions = await transaction.getActions(); for (final action in actions) { @@ -393,11 +395,11 @@ class CallKitService { throw 'Active call is null, holdCall failed'; } final call = _activeCall?.call; - if (call == null || call.hasConnected) { + if (call == null || !call.hasConnected) { return; } - await _callController.requestTransactionWithAction( - FCXSetHeldCallAction(call.uuid, hold)); + await _callController + .requestTransactionWithAction(FCXSetHeldCallAction(call.uuid, hold)); } Future muteCall(bool mute) async { @@ -405,11 +407,11 @@ class CallKitService { throw 'Active call is null, muteCall failed'; } final call = _activeCall?.call; - if (call == null || call.hasConnected) { + if (call == null) { return; } - await _callController.requestTransactionWithAction( - FCXSetMutedCallAction(call.uuid, mute)); + await _callController + .requestTransactionWithAction(FCXSetMutedCallAction(call.uuid, mute)); } Future endCall() async { diff --git a/audio_call/pubspec.lock b/audio_call/pubspec.lock index 8f6aeaf..97d9f6d 100644 --- a/audio_call/pubspec.lock +++ b/audio_call/pubspec.lock @@ -252,26 +252,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -300,10 +300,10 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" nested: dependency: transitive description: @@ -529,10 +529,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timezone: dependency: transitive description: @@ -569,10 +569,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" win32: dependency: transitive description: @@ -599,4 +599,4 @@ packages: version: "6.2.2" sdks: dart: ">=3.3.1 <4.0.0" - flutter: ">=3.0.0" + flutter: ">=3.18.0-18.0.pre.54"