From 941ab5a98f1ae54498093d039d79fe720f15eabd Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 12 Jun 2020 09:38:26 -0400 Subject: [PATCH] Prevent avatar from showing a start of outgoing video call. --- .../thoughtcrime/securesms/WebRtcCallActivity.java | 6 ++++-- .../components/webrtc/WebRtcCallViewModel.java | 14 +++++++++++--- app/src/main/res/layout/webrtc_call_view.xml | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java index 1d79be3afd..609f0c0995 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java @@ -528,9 +528,11 @@ public class WebRtcCallActivity extends AppCompatActivity { callScreen.setLocalRenderer(event.getLocalRenderer()); callScreen.setRemoteRenderer(event.getRemoteRenderer()); - viewModel.updateFromWebRtcViewModel(event); + boolean enableVideo = event.getLocalCameraState().getCameraCount() > 0 && enableVideoIfAvailable; - if (event.getLocalCameraState().getCameraCount() > 0 && enableVideoIfAvailable) { + viewModel.updateFromWebRtcViewModel(event, enableVideo); + + if (enableVideo) { enableVideoIfAvailable = false; handleSetMuteVideo(false); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java index b8109723a3..3963bb7710 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java @@ -35,6 +35,7 @@ public class WebRtcCallViewModel extends ViewModel { private boolean canDisplayTooltipIfNeeded = true; private boolean hasEnabledLocalVideo = false; + private boolean showVideoForOutgoing = false; private long callConnectedTime = -1; private Handler ellapsedTimeHandler = new Handler(Looper.getMainLooper()); private boolean answerWithVideoAvailable = false; @@ -97,7 +98,7 @@ public class WebRtcCallViewModel extends ViewModel { } @MainThread - public void updateFromWebRtcViewModel(@NonNull WebRtcViewModel webRtcViewModel) { + public void updateFromWebRtcViewModel(@NonNull WebRtcViewModel webRtcViewModel, boolean enableVideo) { remoteVideoEnabled.setValue(webRtcViewModel.isRemoteVideoEnabled()); microphoneEnabled.setValue(webRtcViewModel.isMicrophoneEnabled()); @@ -106,6 +107,13 @@ public class WebRtcCallViewModel extends ViewModel { } localVideoEnabled.setValue(webRtcViewModel.getLocalCameraState().isEnabled()); + + if (enableVideo) { + showVideoForOutgoing = webRtcViewModel.getState() == WebRtcViewModel.State.CALL_OUTGOING; + } else if (webRtcViewModel.getState() != WebRtcViewModel.State.CALL_OUTGOING) { + showVideoForOutgoing = false; + } + updateLocalRenderState(webRtcViewModel.getState()); updateWebRtcControls(webRtcViewModel.getState(), webRtcViewModel.getLocalCameraState().isEnabled(), @@ -177,8 +185,8 @@ public class WebRtcCallViewModel extends ViewModel { } private @NonNull WebRtcLocalRenderState getRealLocalRenderState(boolean shouldDisplayLocalVideo, @NonNull WebRtcLocalRenderState state) { - if (shouldDisplayLocalVideo) return state; - else return WebRtcLocalRenderState.GONE; + if (shouldDisplayLocalVideo || showVideoForOutgoing) return state; + else return WebRtcLocalRenderState.GONE; } private @NonNull WebRtcControls getRealWebRtcControls(boolean neverDisplayControls, @NonNull WebRtcControls controls) { diff --git a/app/src/main/res/layout/webrtc_call_view.xml b/app/src/main/res/layout/webrtc_call_view.xml index 69ac51eb10..eed074533c 100644 --- a/app/src/main/res/layout/webrtc_call_view.xml +++ b/app/src/main/res/layout/webrtc_call_view.xml @@ -37,6 +37,7 @@ android:id="@+id/call_screen_large_local_renderer_holder" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/black" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"