From cf2189c11aee7569ae1f2ab783eabb64b55091eb Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 27 Oct 2020 17:01:31 -0400 Subject: [PATCH] Ensure speakerphone is correctly enabled during call setup. Race condition between handleStartOutgoingCall being enqueued from ringrtc and handleSetEnableVideo being enqueued from the main thread. --- .../service/webrtc/CallSetupActionProcessorDelegate.java | 2 ++ .../securesms/service/webrtc/OutgoingCallActionProcessor.java | 1 + .../securesms/service/webrtc/PreJoinActionProcessor.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java index 3efe909028..0ee7bd48c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java @@ -75,6 +75,8 @@ public class CallSetupActionProcessorDelegate extends WebRtcActionProcessor { @Override protected @NonNull WebRtcServiceState handleSetEnableVideo(@NonNull WebRtcServiceState currentState, boolean enable) { + Log.i(tag, "handleSetEnableVideo(): enable: " + enable); + Camera camera = currentState.getVideoState().requireCamera(); if (camera.isInitialized()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java index 0331a3fb88..b052ac31ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java @@ -66,6 +66,7 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor { AudioManager androidAudioManager = ServiceUtil.getAudioManager(context); androidAudioManager.setSpeakerphoneOn(false); + WebRtcUtil.enableSpeakerPhoneIfNeeded(context, currentState.getCallSetupState().isEnableVideoOnCreate()); webRtcInteractor.updatePhoneState(WebRtcUtil.getInCallPhoneState(context)); webRtcInteractor.initializeAudioForCall(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/PreJoinActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/PreJoinActionProcessor.java index a572d5ba65..5b21e43dc1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/PreJoinActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/PreJoinActionProcessor.java @@ -58,7 +58,7 @@ public class PreJoinActionProcessor extends DeviceAwareActionProcessor { @SuppressWarnings("ConstantConditions") @Override protected @NonNull WebRtcServiceState handleSetEnableVideo(@NonNull WebRtcServiceState currentState, boolean enable) { - Log.w(TAG, "handleSetEnableVideo(): Changing for pre-join call."); + Log.i(TAG, "handleSetEnableVideo(): Changing for pre-join call."); currentState.getVideoState().getCamera().setEnabled(enable); return currentState.builder()