From df53ae9d4ff76dc54dbf4104665e3b71522d6d0d Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:11:01 +0700 Subject: [PATCH] ios: fix remaining bugs in calls (#5013) --- apps/ios/Shared/Views/Call/ActiveCallView.swift | 12 +++++------- apps/ios/Shared/Views/Call/CallController.swift | 8 +++----- apps/ios/Shared/Views/Call/CallViewRenderers.swift | 10 ++++++++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift index 1f9f0739b6..2f76f1f046 100644 --- a/apps/ios/Shared/Views/Call/ActiveCallView.swift +++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift @@ -401,15 +401,13 @@ struct ActiveCallOverlay: View { private func endCallButton() -> some View { let cc = CallController.shared - return callButton("phone.down.fill", padding: 10) { + return callButton("phone.down.fill", .red, padding: 10) { if let uuid = call.callUUID { cc.endCall(callUUID: uuid) } else { cc.endCall(call: call) {} } } - .background(.red) - .clipShape(.circle) } private func toggleMicButton() -> some View { @@ -480,9 +478,7 @@ struct ActiveCallOverlay: View { } @ViewBuilder private func controlButton(_ call: Call, _ imageName: String, padding: CGFloat, _ perform: @escaping () -> Void) -> some View { - callButton(imageName, padding: padding, perform) - .background(call.peerMediaSources.hasVideo ? Color.black.opacity(0.2) : Color.white.opacity(0.2)) - .clipShape(.circle) + callButton(imageName, call.peerMediaSources.hasVideo ? Color.black.opacity(0.2) : Color.white.opacity(0.2), padding: padding, perform) } @ViewBuilder private func audioDevicePickerButton() -> some View { @@ -495,7 +491,7 @@ struct ActiveCallOverlay: View { .clipShape(.circle) } - private func callButton(_ imageName: String, padding: CGFloat, _ perform: @escaping () -> Void) -> some View { + private func callButton(_ imageName: String, _ background: Color, padding: CGFloat, _ perform: @escaping () -> Void) -> some View { Button { perform() } label: { @@ -504,8 +500,10 @@ struct ActiveCallOverlay: View { .scaledToFit() .padding(padding) .frame(width: 60, height: 60) + .background(background) } .foregroundColor(whiteColorWithAlpha) + .clipShape(.circle) } private var whiteColorWithAlpha: Color { diff --git a/apps/ios/Shared/Views/Call/CallController.swift b/apps/ios/Shared/Views/Call/CallController.swift index bf0f1045a4..1f28180e87 100644 --- a/apps/ios/Shared/Views/Call/CallController.swift +++ b/apps/ios/Shared/Views/Call/CallController.swift @@ -357,11 +357,9 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse self.provider.reportCall(with: uuid, updated: update) } } else if callManager.startOutgoingCall(callUUID: callUUID) { - if callManager.startOutgoingCall(callUUID: callUUID) { - logger.debug("CallController.startCall: call started") - } else { - logger.error("CallController.startCall: no active call") - } + logger.debug("CallController.startCall: call started") + } else { + logger.error("CallController.startCall: no active call") } } diff --git a/apps/ios/Shared/Views/Call/CallViewRenderers.swift b/apps/ios/Shared/Views/Call/CallViewRenderers.swift index fbfeb99bf5..e779093a24 100644 --- a/apps/ios/Shared/Views/Call/CallViewRenderers.swift +++ b/apps/ios/Shared/Views/Call/CallViewRenderers.swift @@ -21,16 +21,22 @@ struct CallViewRemote: UIViewRepresentable { let remoteCameraRenderer = RTCMTLVideoView(frame: view.frame) remoteCameraRenderer.videoContentMode = contentMode remoteCameraRenderer.tag = 0 + + let screenVideo = call.peerMediaSources.screenVideo let remoteScreenRenderer = RTCMTLVideoView(frame: view.frame) remoteScreenRenderer.videoContentMode = contentMode remoteScreenRenderer.tag = 1 - remoteScreenRenderer.alpha = call.peerMediaSources.screenVideo ? 1 : 0 + remoteScreenRenderer.alpha = screenVideo ? 1 : 0 context.coordinator.cameraRenderer = remoteCameraRenderer context.coordinator.screenRenderer = remoteScreenRenderer client.addRemoteCameraRenderer(remoteCameraRenderer) client.addRemoteScreenRenderer(remoteScreenRenderer) - addSubviewAndResize(remoteCameraRenderer, remoteScreenRenderer, into: view) + if screenVideo { + addSubviewAndResize(remoteScreenRenderer, remoteCameraRenderer, into: view) + } else { + addSubviewAndResize(remoteCameraRenderer, remoteScreenRenderer, into: view) + } if AVPictureInPictureController.isPictureInPictureSupported() { makeViewWithRTCRenderer(remoteCameraRenderer, remoteScreenRenderer, view, context)