Skip to content

Commit

Permalink
[audio_call]: fix mute and hold actions
Browse files Browse the repository at this point in the history
  • Loading branch information
YuliaGrigorieva committed May 28, 2024
1 parent 2a0d264 commit 1dd2cf6
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 62 deletions.
37 changes: 15 additions & 22 deletions audio_call/lib/screens/active_call/bloc/active_call_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,18 @@ class ActiveCallBloc extends Bloc<ActiveCallEvent, ActiveCallState> {
}

Future<void> _readyToStartCall(
ReadyToStartCallEvent event,
Emitter<ActiveCallState> emit) async {
ReadyToStartCallEvent event, Emitter<ActiveCallState> 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) {
Expand Down Expand Up @@ -96,8 +95,7 @@ class ActiveCallBloc extends Bloc<ActiveCallEvent, ActiveCallState> {
}

Future<void> _handleCallChanged(
CallChangedEvent event,
Emitter<ActiveCallState> emit) async {
CallChangedEvent event, Emitter<ActiveCallState> emit) async {
CallEvent callEvent = event.event;

if (callEvent is OnFailedCallEvent) {
Expand Down Expand Up @@ -145,38 +143,33 @@ class ActiveCallBloc extends Bloc<ActiveCallEvent, ActiveCallState> {
}

Future<void> _holdCall(
HoldPressedEvent event,
Emitter<ActiveCallState> emit) async {
Platform.isIOS
HoldPressedEvent event, Emitter<ActiveCallState> emit) async {
Platform.isIOS
? await _callKitService?.holdCall(event.hold)
: await _callService.holdCall(hold: event.hold);
}

Future<void> _muteAudio(
MutePressedEvent event,
Emitter<ActiveCallState> emit) async {
Platform.isIOS
MutePressedEvent event, Emitter<ActiveCallState> emit) async {
Platform.isIOS
? await _callKitService?.muteCall(event.mute)
: await _callService.muteCall(mute: event.mute);
}

Future<void> _hangupCall(
HangupPressedEvent event,
Emitter<ActiveCallState> emit) async {
Platform.isIOS
HangupPressedEvent event, Emitter<ActiveCallState> emit) async {
Platform.isIOS
? await _callKitService?.endCall()
: await _callService.hangup();
}

Future<void> _selectAudioDevice(
SelectAudioDevicePressedEvent event,
Future<void> _selectAudioDevice(SelectAudioDevicePressedEvent event,
Emitter<ActiveCallState> emit) async {
await _callService.selectAudioDevice(device: event.device);
}

Future<void> _handleAudioDevicesChanged(
AudioDevicesChanged event,
Emitter<ActiveCallState> emit) async {
AudioDevicesChanged event, Emitter<ActiveCallState> emit) async {
AudioDeviceEvent audioEvent = event.event;
if (audioEvent is OnActiveAudioDeviceChanged) {
emit(state.copyWith(activeAudioDevice: audioEvent.device));
Expand Down
34 changes: 18 additions & 16 deletions audio_call/lib/services/call/call_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ class CallService {

Function? onIncomingCall;

StreamController<CallEvent> _callStreamController = StreamController.broadcast();
StreamController<AudioDeviceEvent> _audioDeviceStreamController = StreamController.broadcast();
StreamController<CallEvent> _callStreamController =
StreamController.broadcast();
StreamController<AudioDeviceEvent> _audioDeviceStreamController =
StreamController.broadcast();

CallState get callState => _callState;
CallState _callState = CallState.none;
Expand Down Expand Up @@ -174,11 +176,11 @@ class CallService {
await _audioDeviceManager.selectAudioDevice(device);

Future<void> _onIncomingCall(
VIClient client,
VICall call,
bool video,
Map<String, String>? headers,
) async {
VIClient client,
VICall call,
bool video,
Map<String, String>? headers,
) async {
_log('_onIncomingCall');
if (hasActiveCall && _activeCall?.callId != call.callId) {
await call.reject();
Expand Down Expand Up @@ -215,10 +217,10 @@ class CallService {
}

void _onCallDisconnected(
VICall call,
Map<String, String>? headers,
bool answeredElsewhere,
) async {
VICall call,
Map<String, String>? headers,
bool answeredElsewhere,
) async {
_log('onCallDisconnected');
if (call.callId == _activeCall?.callId) {
_activeCall = null;
Expand All @@ -239,11 +241,11 @@ class CallService {
}

void _onCallFailed(
VICall call,
int code,
String description,
Map<String, String>? headers,
) async {
VICall call,
int code,
String description,
Map<String, String>? headers,
) async {
_log('onCallFailed($code, $description)');
if (call.callId == _activeCall?.callId) {
_activeCall = null;
Expand Down
24 changes: 13 additions & 11 deletions audio_call/lib/services/call/callkit_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<void> loginAndCommitTransactions() async {
try {
Expand All @@ -128,6 +129,7 @@ class CallKitService {
}
}
}

loginAndCommitTransactions();
}
_log('Delaying transaction');
Expand Down Expand Up @@ -266,7 +268,7 @@ class CallKitService {

Future<void> _commitTransactions() async {
List<FCXTransaction> transactions =
await _provider.getPendingTransactions();
await _provider.getPendingTransactions();
for (final transaction in transactions) {
List<FCXAction> actions = await transaction.getActions();
for (final action in actions) {
Expand Down Expand Up @@ -393,23 +395,23 @@ 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<void> muteCall(bool mute) async {
if (_hasNoActiveCalls) {
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<void> endCall() async {
Expand Down
26 changes: 13 additions & 13 deletions audio_call/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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"

0 comments on commit 1dd2cf6

Please sign in to comment.