mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 09:20:08 +00:00
Merge commit '0e287aecea13633a40cdac03d99ad4cee7d6481e'
This commit is contained in:
commit
edc5845da1
@ -42,6 +42,15 @@ public struct PresentationCallState: Equatable {
|
|||||||
case reconnecting(Double, Int32?, Data)
|
case reconnecting(Double, Int32?, Data)
|
||||||
case terminating
|
case terminating
|
||||||
case terminated(CallId?, CallSessionTerminationReason?, Bool)
|
case terminated(CallId?, CallSessionTerminationReason?, Bool)
|
||||||
|
|
||||||
|
public var isOrWasActive: Bool {
|
||||||
|
switch self {
|
||||||
|
case .active, .terminating, .terminated:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum VideoState: Equatable {
|
public enum VideoState: Equatable {
|
||||||
|
|||||||
@ -396,8 +396,6 @@ public func generateGradientImage(size: CGSize, colors: [UIColor], locations: [C
|
|||||||
let gradient = CGGradient(colorsSpace: colorSpace, colors: gradientColors, locations: &locations)!
|
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.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()!
|
let image = UIGraphicsGetImageFromCurrentImageContext()!
|
||||||
|
|||||||
@ -925,24 +925,29 @@ final class CallControllerNode: ViewControllerTracingNode, CallControllerNodePro
|
|||||||
}
|
}
|
||||||
|
|
||||||
var toastContent: CallControllerToastContent = []
|
var toastContent: CallControllerToastContent = []
|
||||||
if self.hasVideoNodes && [.inactive, .paused].contains(callState.remoteVideoState) {
|
if callState.state.isOrWasActive {
|
||||||
toastContent.insert(.camera)
|
if self.hasVideoNodes && [.inactive, .paused].contains(callState.remoteVideoState) {
|
||||||
}
|
toastContent.insert(.camera)
|
||||||
if case .muted = callState.remoteAudioState {
|
}
|
||||||
toastContent.insert(.microphone)
|
if case .muted = callState.remoteAudioState {
|
||||||
|
toastContent.insert(.microphone)
|
||||||
|
}
|
||||||
|
if case .low = callState.remoteBatteryLevel {
|
||||||
|
toastContent.insert(.battery)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
|
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
|
||||||
toastContent.insert(.mute)
|
toastContent.insert(.mute)
|
||||||
}
|
}
|
||||||
if case .low = callState.remoteBatteryLevel {
|
|
||||||
toastContent.insert(.battery)
|
|
||||||
}
|
|
||||||
self.toastContent = toastContent
|
self.toastContent = toastContent
|
||||||
|
|
||||||
self.updateButtonsMode()
|
self.updateButtonsMode()
|
||||||
self.updateDimVisibility()
|
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
|
self.displayedCameraTooltip = true
|
||||||
Queue.mainQueue().after(2.0) {
|
Queue.mainQueue().after(2.0) {
|
||||||
self.displayCameraTooltip()
|
self.displayCameraTooltip()
|
||||||
|
|||||||
@ -295,7 +295,7 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
self.enableHighBitrateVideoCalls = enableHighBitrateVideoCalls
|
self.enableHighBitrateVideoCalls = enableHighBitrateVideoCalls
|
||||||
if self.isVideo {
|
if self.isVideo {
|
||||||
self.videoCapturer = OngoingCallVideoCapturer()
|
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 {
|
} else {
|
||||||
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: self.isVideoPossible ? .inactive : .notAvailable, remoteVideoState: .inactive, remoteAudioState: .active, remoteBatteryLevel: .normal))
|
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
|
mappedVideoState = .notAvailable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mappedRemoteVideoState = .inactive
|
if let previousRemoteVideoState = self.previousRemoteVideoState {
|
||||||
|
mappedRemoteVideoState = previousRemoteVideoState
|
||||||
|
} else {
|
||||||
|
mappedRemoteVideoState = self.isVideo ? .active : .inactive
|
||||||
|
}
|
||||||
if let previousRemoteAudioState = self.previousRemoteAudioState {
|
if let previousRemoteAudioState = self.previousRemoteAudioState {
|
||||||
mappedRemoteAudioState = previousRemoteAudioState
|
mappedRemoteAudioState = previousRemoteAudioState
|
||||||
} else {
|
} else {
|
||||||
@ -555,9 +559,9 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
self.callWasActive = true
|
self.callWasActive = true
|
||||||
presentationState = PresentationCallState(state: .connecting(nil), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
|
presentationState = PresentationCallState(state: .connecting(nil), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
|
||||||
case .dropping:
|
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):
|
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):
|
case let .requesting(ringing):
|
||||||
presentationState = PresentationCallState(state: .requesting(ringing), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
|
presentationState = PresentationCallState(state: .requesting(ringing), videoState: mappedVideoState, remoteVideoState: mappedRemoteVideoState, remoteAudioState: mappedRemoteAudioState, remoteBatteryLevel: mappedRemoteBatteryLevel)
|
||||||
case let .active(_, _, keyVisualHash, _, _, _, _):
|
case let .active(_, _, keyVisualHash, _, _, _, _):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user