Merge commit '0e287aecea13633a40cdac03d99ad4cee7d6481e'

This commit is contained in:
Ali 2020-08-08 00:29:24 +04:00
commit edc5845da1
4 changed files with 31 additions and 15 deletions

View File

@ -42,6 +42,15 @@ public struct PresentationCallState: Equatable {
case reconnecting(Double, Int32?, Data)
case terminating
case terminated(CallId?, CallSessionTerminationReason?, Bool)
public var isOrWasActive: Bool {
switch self {
case .active, .terminating, .terminated:
return true
default:
return false
}
}
}
public enum VideoState: Equatable {

View File

@ -396,8 +396,6 @@ public func generateGradientImage(size: CGSize, colors: [UIColor], locations: [C
let gradient = CGGradient(colorsSpace: colorSpace, colors: gradientColors, locations: &locations)!
context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: 0.0, y: size.height), options: CGGradientDrawingOptions())
context.restoreGState()
}
let image = UIGraphicsGetImageFromCurrentImageContext()!

View File

@ -925,24 +925,29 @@ final class CallControllerNode: ViewControllerTracingNode, CallControllerNodePro
}
var toastContent: CallControllerToastContent = []
if callState.state.isOrWasActive {
if self.hasVideoNodes && [.inactive, .paused].contains(callState.remoteVideoState) {
toastContent.insert(.camera)
}
if case .muted = callState.remoteAudioState {
toastContent.insert(.microphone)
}
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
toastContent.insert(.mute)
}
if case .low = callState.remoteBatteryLevel {
toastContent.insert(.battery)
}
}
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
toastContent.insert(.mute)
}
self.toastContent = toastContent
self.updateButtonsMode()
self.updateDimVisibility()
if self.incomingVideoViewRequested && !self.outgoingVideoViewRequested && !self.displayedCameraTooltip {
if self.incomingVideoViewRequested && self.outgoingVideoViewRequested {
self.displayedCameraTooltip = true
}
if self.incomingVideoViewRequested && !self.outgoingVideoViewRequested && !self.displayedCameraTooltip && toastContent.isEmpty {
self.displayedCameraTooltip = true
Queue.mainQueue().after(2.0) {
self.displayCameraTooltip()

View File

@ -295,7 +295,7 @@ public final class PresentationCallImpl: PresentationCall {
self.enableHighBitrateVideoCalls = enableHighBitrateVideoCalls
if self.isVideo {
self.videoCapturer = OngoingCallVideoCapturer()
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: .active, remoteVideoState: .inactive, remoteAudioState: .active, remoteBatteryLevel: .normal))
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: .active, remoteVideoState: .active, remoteAudioState: .active, remoteBatteryLevel: .normal))
} else {
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: self.isVideoPossible ? .inactive : .notAvailable, remoteVideoState: .inactive, remoteAudioState: .active, remoteBatteryLevel: .normal))
}
@ -511,7 +511,11 @@ public final class PresentationCallImpl: PresentationCall {
mappedVideoState = .notAvailable
}
}
mappedRemoteVideoState = .inactive
if let previousRemoteVideoState = self.previousRemoteVideoState {
mappedRemoteVideoState = previousRemoteVideoState
} else {
mappedRemoteVideoState = self.isVideo ? .active : .inactive
}
if let previousRemoteAudioState = self.previousRemoteAudioState {
mappedRemoteAudioState = previousRemoteAudioState
} else {
@ -555,9 +559,9 @@ public final class PresentationCallImpl: PresentationCall {
self.callWasActive = true
presentationState = PresentationCallState(state: .connecting(nil), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
case .dropping:
presentationState = PresentationCallState(state: .terminating, videoState: mappedVideoState, remoteVideoState: .inactive, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
presentationState = PresentationCallState(state: .terminating, videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
case let .terminated(id, reason, options):
presentationState = PresentationCallState(state: .terminated(id, reason, self.callWasActive && (options.contains(.reportRating) || self.shouldPresentCallRating)), videoState: mappedVideoState, remoteVideoState: .inactive, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
presentationState = PresentationCallState(state: .terminated(id, reason, self.callWasActive && (options.contains(.reportRating) || self.shouldPresentCallRating)), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
case let .requesting(ringing):
presentationState = PresentationCallState(state: .requesting(ringing), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
case let .active(_, _, keyVisualHash, _, _, _, _):