From 19a2a113ee398fe02fb64a7df1b9cc964af4bc35 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 8 Mar 2022 21:39:01 +0400 Subject: [PATCH] Stream improvements --- .../Resources/DemoAnimations/Balloon.tgs | Bin 17265 -> 0 bytes .../Resources/DemoAnimations/Fireworks.tgs | Bin 60864 -> 0 bytes .../Resources/DemoAnimations/Hearts.tgs | Bin 65047 -> 0 bytes .../Resources/DemoAnimations/Joy.tgs | Bin 62191 -> 0 bytes .../Resources/DemoAnimations/Money.tgs | Bin 26528 -> 0 bytes .../Resources/DemoAnimations/Party.tgs | Bin 13089 -> 0 bytes .../Resources/DemoAnimations/Poo.tgs | Bin 62958 -> 0 bytes .../DemoAnimations/SuperThumbsDown.tgs | Bin 60478 -> 0 bytes .../DemoAnimations/SuperThumbsUp1.tgs | Bin 61750 -> 0 bytes .../Telegram-iOS/en.lproj/Localizable.strings | 12 + .../Sources/ChatListSearchListPaneNode.swift | 1 - .../Source/Components/RoundedRectangle.swift | 49 ++ .../Sources/ActivityIndicatorComponent.swift | 11 + .../Components/AnimatedStickerComponent/BUILD | 22 + .../Sources/AnimatedStickerComponent.swift | 107 +++ .../Components/BundleIconComponent/BUILD | 20 + .../Sources/BundleIconComponent.swift | 60 ++ .../Components/HierarchyTrackingLayer/BUILD | 17 + .../Sources/HierarchyTrackingLayer.swift | 22 + .../Components/LottieAnimationComponent/BUILD | 1 + .../Sources/LottieAnimationComponent.swift | 22 +- .../Components/MultilineTextComponent/BUILD | 22 + .../Sources/MultilineTextComponent.swift | 115 ++++ .../SolidRoundedButtonComponent/BUILD | 20 + .../Sources/SolidRoundedButtonComponent.swift | 114 +++ .../Components/ViewControllerComponent/BUILD | 22 + .../Sources}/ViewControllerComponent.swift | 51 +- .../Display/Source/ImmediateTextNode.swift | 172 +++++ submodules/Display/Source/TextNode.swift | 648 +++++++++++++++++- submodules/PeerInfoUI/BUILD | 1 + .../CreateExternalMediaStreamScreen/BUILD | 32 + .../CreateExternalMediaStreamScreen.swift | 447 ++++++++++++ submodules/SolidRoundedButtonNode/BUILD | 1 + .../Sources/SolidRoundedButtonNode.swift | 358 ++++++++-- submodules/TelegramCallsUI/BUILD | 3 + .../Components/MediaStreamComponent.swift | 71 +- .../MediaStreamVideoComponent.swift | 163 +++-- .../Sources/PresentationGroupCall.swift | 273 +++++++- submodules/TelegramUI/BUILD | 1 + .../Resources/Animations/CreateStream.tgs | Bin 0 -> 35467 bytes .../Sources/PeerInfo/PeerInfoScreen.swift | 41 +- .../Sources/GroupCallContext.swift | 33 +- .../WrappedMediaStreamingContext.swift | 134 ++++ .../TgVoipWebrtc/MediaStreaming.h | 23 + .../OngoingCallThreadLocalContext.h | 1 + .../TgVoipWebrtc/Sources/MediaStreaming.mm | 273 ++++++++ submodules/TgVoipWebrtc/Sources/MediaUtils.h | 58 ++ .../Sources/OngoingCallThreadLocalContext.mm | 1 + submodules/TgVoipWebrtc/tgcalls | 2 +- 49 files changed, 3185 insertions(+), 239 deletions(-) delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Fireworks.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Party.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/Poo.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsUp1.tgs create mode 100644 submodules/ComponentFlow/Source/Components/RoundedRectangle.swift create mode 100644 submodules/Components/AnimatedStickerComponent/BUILD create mode 100644 submodules/Components/AnimatedStickerComponent/Sources/AnimatedStickerComponent.swift create mode 100644 submodules/Components/BundleIconComponent/BUILD create mode 100644 submodules/Components/BundleIconComponent/Sources/BundleIconComponent.swift create mode 100644 submodules/Components/HierarchyTrackingLayer/BUILD create mode 100644 submodules/Components/HierarchyTrackingLayer/Sources/HierarchyTrackingLayer.swift create mode 100644 submodules/Components/MultilineTextComponent/BUILD create mode 100644 submodules/Components/MultilineTextComponent/Sources/MultilineTextComponent.swift create mode 100644 submodules/Components/SolidRoundedButtonComponent/BUILD create mode 100644 submodules/Components/SolidRoundedButtonComponent/Sources/SolidRoundedButtonComponent.swift create mode 100644 submodules/Components/ViewControllerComponent/BUILD rename submodules/{TelegramCallsUI/Sources/Components => Components/ViewControllerComponent/Sources}/ViewControllerComponent.swift (71%) create mode 100644 submodules/PeerInfoUI/CreateExternalMediaStreamScreen/BUILD create mode 100644 submodules/PeerInfoUI/CreateExternalMediaStreamScreen/Sources/CreateExternalMediaStreamScreen.swift create mode 100644 submodules/TelegramUI/Resources/Animations/CreateStream.tgs create mode 100644 submodules/TelegramVoip/Sources/WrappedMediaStreamingContext.swift create mode 100644 submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/MediaStreaming.h create mode 100644 submodules/TgVoipWebrtc/Sources/MediaStreaming.mm create mode 100644 submodules/TgVoipWebrtc/Sources/MediaUtils.h diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs deleted file mode 100644 index 72cd87b6559eab118a4aead4872688c41001d0a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17265 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 diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs deleted file mode 100644 index 14940c5f5ca6d228bb364a83fcd24fd4ec59c7aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65047 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 diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs deleted file mode 100644 index 8afa88c3f19dfcc2354ef8b1e291a6321b227810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62191 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⋙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 diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs deleted file mode 100644 index bc6f9b9f015b20c897ec4d54b52a211fee5101e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26528 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 LW#-Ef1=R%rJ#;#o diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs deleted file mode 100644 index a37e3e65982c06444f6b374b0ac5d10631321081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60478 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%0D} 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 Bool { + if !lhs.color.isEqual(rhs.color) { + return false + } + if lhs.cornerRadius != rhs.cornerRadius { + return false + } + return true + } + + public final class View: UIImageView { + var component: RoundedRectangle? + + func update(component: RoundedRectangle, availableSize: CGSize, transition: Transition) -> CGSize { + if self.component != component { + let imageSize = CGSize(width: component.cornerRadius * 2.0, height: component.cornerRadius * 2.0) + UIGraphicsBeginImageContextWithOptions(imageSize, false, 0.0) + if let context = UIGraphicsGetCurrentContext() { + context.setFillColor(component.color.cgColor) + context.fillEllipse(in: CGRect(origin: CGPoint(), size: imageSize)) + } + self.image = UIGraphicsGetImageFromCurrentImageContext()?.stretchableImage(withLeftCapWidth: Int(component.cornerRadius), topCapHeight: Int(component.cornerRadius)) + UIGraphicsEndImageContext() + } + + return availableSize + } + } + + public func makeView() -> View { + return View() + } + + public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { + return view.update(component: self, availableSize: availableSize, transition: transition) + } +} diff --git a/submodules/Components/ActivityIndicatorComponent/Sources/ActivityIndicatorComponent.swift b/submodules/Components/ActivityIndicatorComponent/Sources/ActivityIndicatorComponent.swift index b40c991289..27311afa4a 100644 --- a/submodules/Components/ActivityIndicatorComponent/Sources/ActivityIndicatorComponent.swift +++ b/submodules/Components/ActivityIndicatorComponent/Sources/ActivityIndicatorComponent.swift @@ -3,11 +3,18 @@ import UIKit import ComponentFlow public final class ActivityIndicatorComponent: Component { + public let color: UIColor + public init( + color: UIColor ) { + self.color = color } public static func ==(lhs: ActivityIndicatorComponent, rhs: ActivityIndicatorComponent) -> Bool { + if lhs.color != rhs.color { + return false + } return true } @@ -21,6 +28,10 @@ public final class ActivityIndicatorComponent: Component { } func update(component: ActivityIndicatorComponent, availableSize: CGSize, transition: Transition) -> CGSize { + if component.color != self.color { + self.color = component.color + } + if !self.isAnimating { self.startAnimating() } diff --git a/submodules/Components/AnimatedStickerComponent/BUILD b/submodules/Components/AnimatedStickerComponent/BUILD new file mode 100644 index 0000000000..a480472de6 --- /dev/null +++ b/submodules/Components/AnimatedStickerComponent/BUILD @@ -0,0 +1,22 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "AnimatedStickerComponent", + module_name = "AnimatedStickerComponent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/AnimatedStickerNode:AnimatedStickerNode", + "//submodules/TelegramAnimatedStickerNode:TelegramAnimatedStickerNode", + "//submodules/Components/HierarchyTrackingLayer:HierarchyTrackingLayer", + + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Components/AnimatedStickerComponent/Sources/AnimatedStickerComponent.swift b/submodules/Components/AnimatedStickerComponent/Sources/AnimatedStickerComponent.swift new file mode 100644 index 0000000000..f7a1248815 --- /dev/null +++ b/submodules/Components/AnimatedStickerComponent/Sources/AnimatedStickerComponent.swift @@ -0,0 +1,107 @@ +import Foundation +import UIKit +import ComponentFlow +import AnimatedStickerNode +import TelegramAnimatedStickerNode +import HierarchyTrackingLayer + +public final class AnimatedStickerComponent: Component { + public struct Animation: Equatable { + public var name: String + public var loop: Bool + public var isAnimating: Bool + + public init(name: String, loop: Bool, isAnimating: Bool = true) { + self.name = name + self.loop = loop + self.isAnimating = isAnimating + } + } + + public let animation: Animation + public let size: CGSize + + public init(animation: Animation, size: CGSize) { + self.animation = animation + self.size = size + } + + public static func ==(lhs: AnimatedStickerComponent, rhs: AnimatedStickerComponent) -> Bool { + if lhs.animation != rhs.animation { + return false + } + if lhs.size != rhs.size { + return false + } + return true + } + + public final class View: UIView { + private var component: AnimatedStickerComponent? + private var animationNode: AnimatedStickerNode? + + private let hierarchyTrackingLayer: HierarchyTrackingLayer + private var isInHierarchy: Bool = false + + override init(frame: CGRect) { + self.hierarchyTrackingLayer = HierarchyTrackingLayer() + + super.init(frame: frame) + + self.layer.addSublayer(self.hierarchyTrackingLayer) + self.hierarchyTrackingLayer.didEnterHierarchy = { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.isInHierarchy = true + strongSelf.animationNode?.visibility = true + } + + self.hierarchyTrackingLayer.didExitHierarchy = { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.isInHierarchy = false + strongSelf.animationNode?.visibility = false + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func update(component: AnimatedStickerComponent, availableSize: CGSize, transition: Transition) -> CGSize { + if self.component?.animation != component.animation { + self.component = component + + self.animationNode?.view.removeFromSuperview() + + let animationNode = AnimatedStickerNode() + animationNode.setup(source: AnimatedStickerNodeLocalFileSource(name: component.animation.name), width: Int(component.size.width * 2.0), height: Int(component.size.height * 2.0), playbackMode: .loop, mode: .direct(cachePathPrefix: nil)) + animationNode.visibility = self.isInHierarchy + + self.animationNode = animationNode + self.addSubnode(animationNode) + } + + let animationSize = component.size + + let size = CGSize(width: min(animationSize.width, availableSize.width), height: min(animationSize.height, availableSize.height)) + + if let animationNode = self.animationNode { + animationNode.frame = CGRect(origin: CGPoint(x: floor((size.width - animationSize.width) / 2.0), y: floor((size.height - animationSize.height) / 2.0)), size: animationSize) + animationNode.updateLayout(size: animationSize) + } + + return size + } + } + + public func makeView() -> View { + return View(frame: CGRect()) + } + + public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { + return view.update(component: self, availableSize: availableSize, transition: transition) + } +} diff --git a/submodules/Components/BundleIconComponent/BUILD b/submodules/Components/BundleIconComponent/BUILD new file mode 100644 index 0000000000..284b18fac6 --- /dev/null +++ b/submodules/Components/BundleIconComponent/BUILD @@ -0,0 +1,20 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "BundleIconComponent", + module_name = "BundleIconComponent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/AppBundle:AppBundle", + "//submodules/Display:Display", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Components/BundleIconComponent/Sources/BundleIconComponent.swift b/submodules/Components/BundleIconComponent/Sources/BundleIconComponent.swift new file mode 100644 index 0000000000..4d68c2df3d --- /dev/null +++ b/submodules/Components/BundleIconComponent/Sources/BundleIconComponent.swift @@ -0,0 +1,60 @@ +import Foundation +import UIKit +import ComponentFlow +import AppBundle +import Display + +public final class BundleIconComponent: Component { + public let name: String + public let tintColor: UIColor? + + public init(name: String, tintColor: UIColor?) { + self.name = name + self.tintColor = tintColor + } + + public static func ==(lhs: BundleIconComponent, rhs: BundleIconComponent) -> Bool { + if lhs.name != rhs.name { + return false + } + if lhs.tintColor != rhs.tintColor { + return false + } + return false + } + + public final class View: UIImageView { + private var component: BundleIconComponent? + + override init(frame: CGRect) { + super.init(frame: frame) + } + + required public init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func update(component: BundleIconComponent, availableSize: CGSize, transition: Transition) -> CGSize { + if self.component?.name != component.name || self.component?.tintColor != component.tintColor { + if let tintColor = component.tintColor { + self.image = generateTintedImage(image: UIImage(bundleImageName: component.name), color: tintColor, backgroundColor: nil) + } else { + self.image = UIImage(bundleImageName: component.name) + } + } + self.component = component + + let imageSize = self.image?.size ?? CGSize() + + return CGSize(width: min(imageSize.width, availableSize.width), height: min(imageSize.height, availableSize.height)) + } + } + + public func makeView() -> View { + return View(frame: CGRect()) + } + + public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { + return view.update(component: self, availableSize: availableSize, transition: transition) + } +} diff --git a/submodules/Components/HierarchyTrackingLayer/BUILD b/submodules/Components/HierarchyTrackingLayer/BUILD new file mode 100644 index 0000000000..76bae62254 --- /dev/null +++ b/submodules/Components/HierarchyTrackingLayer/BUILD @@ -0,0 +1,17 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "HierarchyTrackingLayer", + module_name = "HierarchyTrackingLayer", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Components/HierarchyTrackingLayer/Sources/HierarchyTrackingLayer.swift b/submodules/Components/HierarchyTrackingLayer/Sources/HierarchyTrackingLayer.swift new file mode 100644 index 0000000000..7b643425f4 --- /dev/null +++ b/submodules/Components/HierarchyTrackingLayer/Sources/HierarchyTrackingLayer.swift @@ -0,0 +1,22 @@ +import UIKit + +private final class NullActionClass: NSObject, CAAction { + @objc public func run(forKey event: String, object anObject: Any, arguments dict: [AnyHashable : Any]?) { + } +} + +private let nullAction = NullActionClass() + +open class HierarchyTrackingLayer: CALayer { + public var didEnterHierarchy: (() -> Void)? + public var didExitHierarchy: (() -> Void)? + + override open func action(forKey event: String) -> CAAction? { + if event == kCAOnOrderIn { + self.didEnterHierarchy?() + } else if event == kCAOnOrderOut { + self.didExitHierarchy?() + } + return nullAction + } +} diff --git a/submodules/Components/LottieAnimationComponent/BUILD b/submodules/Components/LottieAnimationComponent/BUILD index 93b589e835..21e3d95d70 100644 --- a/submodules/Components/LottieAnimationComponent/BUILD +++ b/submodules/Components/LottieAnimationComponent/BUILD @@ -13,6 +13,7 @@ swift_library( "//submodules/ComponentFlow:ComponentFlow", "//submodules/lottie-ios:Lottie", "//submodules/AppBundle:AppBundle", + "//submodules/Components/HierarchyTrackingLayer:HierarchyTrackingLayer", ], visibility = [ "//visibility:public", diff --git a/submodules/Components/LottieAnimationComponent/Sources/LottieAnimationComponent.swift b/submodules/Components/LottieAnimationComponent/Sources/LottieAnimationComponent.swift index 2e42b4cbf2..1668f33593 100644 --- a/submodules/Components/LottieAnimationComponent/Sources/LottieAnimationComponent.swift +++ b/submodules/Components/LottieAnimationComponent/Sources/LottieAnimationComponent.swift @@ -2,27 +2,7 @@ import Foundation import ComponentFlow import Lottie import AppBundle - -private final class NullActionClass: NSObject, CAAction { - @objc public func run(forKey event: String, object anObject: Any, arguments dict: [AnyHashable : Any]?) { - } -} - -private let nullAction = NullActionClass() - -private final class HierarchyTrackingLayer: CALayer { - var didEnterHierarchy: (() -> Void)? - var didExitHierarchy: (() -> Void)? - - override func action(forKey event: String) -> CAAction? { - if event == kCAOnOrderIn { - self.didEnterHierarchy?() - } else if event == kCAOnOrderOut { - self.didExitHierarchy?() - } - return nullAction - } -} +import HierarchyTrackingLayer public final class LottieAnimationComponent: Component { public struct Animation: Equatable { diff --git a/submodules/Components/MultilineTextComponent/BUILD b/submodules/Components/MultilineTextComponent/BUILD new file mode 100644 index 0000000000..100013f1bb --- /dev/null +++ b/submodules/Components/MultilineTextComponent/BUILD @@ -0,0 +1,22 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "MultilineTextComponent", + module_name = "MultilineTextComponent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/Display:Display", + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", + "//submodules/AccountContext:AccountContext", + "//submodules/TelegramPresentationData:TelegramPresentationData", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Components/MultilineTextComponent/Sources/MultilineTextComponent.swift b/submodules/Components/MultilineTextComponent/Sources/MultilineTextComponent.swift new file mode 100644 index 0000000000..3699b75edb --- /dev/null +++ b/submodules/Components/MultilineTextComponent/Sources/MultilineTextComponent.swift @@ -0,0 +1,115 @@ +import Foundation +import UIKit +import ComponentFlow +import Display + +public final class MultilineTextComponent: Component { + public let text: NSAttributedString + public let horizontalAlignment: NSTextAlignment + public let verticalAlignment: TextVerticalAlignment + public var truncationType: CTLineTruncationType + public var maximumNumberOfLines: Int + public var lineSpacing: CGFloat + public var insets: UIEdgeInsets + public var textShadowColor: UIColor? + public var textStroke: (UIColor, CGFloat)? + + public init( + text: NSAttributedString, + horizontalAlignment: NSTextAlignment = .natural, + verticalAlignment: TextVerticalAlignment = .top, + truncationType: CTLineTruncationType = .end, + maximumNumberOfLines: Int = 1, + lineSpacing: CGFloat = 0.0, + insets: UIEdgeInsets = UIEdgeInsets(), + textShadowColor: UIColor? = nil, + textStroke: (UIColor, CGFloat)? = nil + ) { + self.text = text + self.horizontalAlignment = horizontalAlignment + self.verticalAlignment = verticalAlignment + self.truncationType = truncationType + self.maximumNumberOfLines = maximumNumberOfLines + self.lineSpacing = lineSpacing + self.insets = insets + self.textShadowColor = textShadowColor + self.textStroke = textStroke + } + + public static func ==(lhs: MultilineTextComponent, rhs: MultilineTextComponent) -> Bool { + if !lhs.text.isEqual(to: rhs.text) { + return false + } + if lhs.horizontalAlignment != rhs.horizontalAlignment { + return false + } + if lhs.verticalAlignment != rhs.verticalAlignment { + return false + } + if lhs.truncationType != rhs.truncationType { + return false + } + if lhs.maximumNumberOfLines != rhs.maximumNumberOfLines { + return false + } + if lhs.lineSpacing != rhs.lineSpacing { + return false + } + if lhs.insets != rhs.insets { + return false + } + + if let lhsTextShadowColor = lhs.textShadowColor, let rhsTextShadowColor = rhs.textShadowColor { + if !lhsTextShadowColor.isEqual(rhsTextShadowColor) { + return false + } + } else if (lhs.textShadowColor != nil) != (rhs.textShadowColor != nil) { + return false + } + + if let lhsTextStroke = lhs.textStroke, let rhsTextStroke = rhs.textStroke { + if !lhsTextStroke.0.isEqual(rhsTextStroke.0) { + return false + } + if lhsTextStroke.1 != rhsTextStroke.1 { + return false + } + } else if (lhs.textShadowColor != nil) != (rhs.textShadowColor != nil) { + return false + } + + return true + } + + public final class View: TextView { + public func update(component: MultilineTextComponent, availableSize: CGSize) -> CGSize { + let makeLayout = TextView.asyncLayout(self) + let (layout, apply) = makeLayout(TextNodeLayoutArguments( + attributedString: component.text, + backgroundColor: nil, + maximumNumberOfLines: component.maximumNumberOfLines, + truncationType: component.truncationType, + constrainedSize: availableSize, + alignment: component.horizontalAlignment, + verticalAlignment: component.verticalAlignment, + lineSpacing: component.lineSpacing, + cutout: nil, + insets: component.insets, + textShadowColor: component.textShadowColor, + textStroke: component.textStroke, + displaySpoilers: false + )) + let _ = apply() + + return layout.size + } + } + + public func makeView() -> View { + return View() + } + + public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { + return view.update(component: self, availableSize: availableSize) + } +} diff --git a/submodules/Components/SolidRoundedButtonComponent/BUILD b/submodules/Components/SolidRoundedButtonComponent/BUILD new file mode 100644 index 0000000000..5f8cb51169 --- /dev/null +++ b/submodules/Components/SolidRoundedButtonComponent/BUILD @@ -0,0 +1,20 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "SolidRoundedButtonComponent", + module_name = "SolidRoundedButtonComponent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/Display:Display", + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/SolidRoundedButtonNode:SolidRoundedButtonNode", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Components/SolidRoundedButtonComponent/Sources/SolidRoundedButtonComponent.swift b/submodules/Components/SolidRoundedButtonComponent/Sources/SolidRoundedButtonComponent.swift new file mode 100644 index 0000000000..7fe9f3bb59 --- /dev/null +++ b/submodules/Components/SolidRoundedButtonComponent/Sources/SolidRoundedButtonComponent.swift @@ -0,0 +1,114 @@ +import Foundation +import UIKit +import ComponentFlow +import Display +import SolidRoundedButtonNode + +public final class SolidRoundedButtonComponent: Component { + public typealias Theme = SolidRoundedButtonTheme + + public let title: String? + public let icon: UIImage? + public let theme: SolidRoundedButtonTheme + public let font: SolidRoundedButtonFont + public let fontSize: CGFloat + public let height: CGFloat + public let cornerRadius: CGFloat + public let gloss: Bool + public let action: () -> Void + + public init( + title: String? = nil, + icon: UIImage? = nil, + theme: SolidRoundedButtonTheme, + font: SolidRoundedButtonFont = .bold, + fontSize: CGFloat = 17.0, + height: CGFloat = 48.0, + cornerRadius: CGFloat = 24.0, + gloss: Bool = false, + action: @escaping () -> Void + ) { + self.title = title + self.icon = icon + self.theme = theme + self.font = font + self.fontSize = fontSize + self.height = height + self.cornerRadius = cornerRadius + self.gloss = gloss + self.action = action + } + + public static func ==(lhs: SolidRoundedButtonComponent, rhs: SolidRoundedButtonComponent) -> Bool { + if lhs.title != rhs.title { + return false + } + if lhs.icon !== rhs.icon { + return false + } + if lhs.theme != rhs.theme { + return false + } + if lhs.font != rhs.font { + return false + } + if lhs.fontSize != rhs.fontSize { + return false + } + if lhs.height != rhs.height { + return false + } + if lhs.cornerRadius != rhs.cornerRadius { + return false + } + if lhs.gloss != rhs.gloss { + return false + } + + return true + } + + public final class View: UIView { + private var component: SolidRoundedButtonComponent? + private var button: SolidRoundedButtonView? + + public func update(component: SolidRoundedButtonComponent, availableSize: CGSize, transition: Transition) -> CGSize { + if self.button == nil { + let button = SolidRoundedButtonView( + title: component.title, + icon: component.icon, + theme: component.theme, + font: component.font, + fontSize: component.fontSize, + height: component.height, + cornerRadius: component.cornerRadius, + gloss: component.gloss + ) + self.button = button + self.addSubview(button) + + button.pressed = { [weak self] in + self?.component?.action() + } + } + + if let button = self.button { + button.updateTheme(component.theme) + let height = button.updateLayout(width: availableSize.width, transition: .immediate) + transition.setFrame(view: button, frame: CGRect(origin: CGPoint(), size: CGSize(width: availableSize.width, height: height)), completion: nil) + } + + self.component = component + + return availableSize + } + } + + public func makeView() -> View { + return View() + } + + public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { + return view.update(component: self, availableSize: availableSize, transition: transition) + } +} diff --git a/submodules/Components/ViewControllerComponent/BUILD b/submodules/Components/ViewControllerComponent/BUILD new file mode 100644 index 0000000000..0e1e28f483 --- /dev/null +++ b/submodules/Components/ViewControllerComponent/BUILD @@ -0,0 +1,22 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ViewControllerComponent", + module_name = "ViewControllerComponent", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/Display:Display", + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", + "//submodules/AccountContext:AccountContext", + "//submodules/TelegramPresentationData:TelegramPresentationData", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/TelegramCallsUI/Sources/Components/ViewControllerComponent.swift b/submodules/Components/ViewControllerComponent/Sources/ViewControllerComponent.swift similarity index 71% rename from submodules/TelegramCallsUI/Sources/Components/ViewControllerComponent.swift rename to submodules/Components/ViewControllerComponent/Sources/ViewControllerComponent.swift index ccc5ae4bee..50f6cc5a8f 100644 --- a/submodules/TelegramCallsUI/Sources/Components/ViewControllerComponent.swift +++ b/submodules/Components/ViewControllerComponent/Sources/ViewControllerComponent.swift @@ -35,23 +35,35 @@ public extension Transition { } open class ViewControllerComponentContainer: ViewController { + public enum NavigationBarAppearance { + case none + case transparent + case `default` + } + public final class Environment: Equatable { public let statusBarHeight: CGFloat + public let navigationHeight: CGFloat public let safeInsets: UIEdgeInsets public let isVisible: Bool + public let theme: PresentationTheme public let strings: PresentationStrings public let controller: () -> ViewController? public init( statusBarHeight: CGFloat, + navigationHeight: CGFloat, safeInsets: UIEdgeInsets, isVisible: Bool, + theme: PresentationTheme, strings: PresentationStrings, controller: @escaping () -> ViewController? ) { self.statusBarHeight = statusBarHeight + self.navigationHeight = navigationHeight self.safeInsets = safeInsets self.isVisible = isVisible + self.theme = theme self.strings = strings self.controller = controller } @@ -64,12 +76,18 @@ open class ViewControllerComponentContainer: ViewController { if lhs.statusBarHeight != rhs.statusBarHeight { return false } + if lhs.navigationHeight != rhs.navigationHeight { + return false + } if lhs.safeInsets != rhs.safeInsets { return false } if lhs.isVisible != rhs.isVisible { return false } + if lhs.theme !== rhs.theme { + return false + } if lhs.strings !== rhs.strings { return false } @@ -78,15 +96,15 @@ open class ViewControllerComponentContainer: ViewController { } } - final class Node: ViewControllerTracingNode { + public final class Node: ViewControllerTracingNode { private var presentationData: PresentationData private weak var controller: ViewControllerComponentContainer? private let component: AnyComponent - let hostView: ComponentHostView + public let hostView: ComponentHostView private var currentIsVisible: Bool = false - private var currentLayout: ContainerViewLayout? + private var currentLayout: (layout: ContainerViewLayout, navigationHeight: CGFloat)? init(context: AccountContext, controller: ViewControllerComponentContainer, component: AnyComponent) { self.presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -101,13 +119,15 @@ open class ViewControllerComponentContainer: ViewController { self.view.addSubview(self.hostView) } - func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: Transition) { - self.currentLayout = layout + func containerLayoutUpdated(layout: ContainerViewLayout, navigationHeight: CGFloat, transition: Transition) { + self.currentLayout = (layout, navigationHeight) let environment = ViewControllerComponentContainer.Environment( statusBarHeight: layout.statusBarHeight ?? 0.0, + navigationHeight: navigationHeight, safeInsets: UIEdgeInsets(top: layout.intrinsicInsets.top + layout.safeInsets.top, left: layout.intrinsicInsets.left + layout.safeInsets.left, bottom: layout.intrinsicInsets.bottom + layout.safeInsets.bottom, right: layout.intrinsicInsets.right + layout.safeInsets.right), isVisible: self.currentIsVisible, + theme: self.presentationData.theme, strings: self.presentationData.strings, controller: { [weak self] in return self?.controller @@ -133,22 +153,31 @@ open class ViewControllerComponentContainer: ViewController { guard let currentLayout = self.currentLayout else { return } - self.containerLayoutUpdated(currentLayout, transition: .immediate) + self.containerLayoutUpdated(layout: currentLayout.layout, navigationHeight: currentLayout.navigationHeight, transition: .immediate) } } - var node: Node { + public var node: Node { return self.displayNode as! Node } private let context: AccountContext private let component: AnyComponent - public init(context: AccountContext, component: C) where C.EnvironmentType == ViewControllerComponentContainer.Environment { + public init(context: AccountContext, component: C, navigationBarAppearance: NavigationBarAppearance) where C.EnvironmentType == ViewControllerComponentContainer.Environment { self.context = context self.component = AnyComponent(component) - super.init(navigationBarPresentationData: nil) + let navigationBarPresentationData: NavigationBarPresentationData? + switch navigationBarAppearance { + case .none: + navigationBarPresentationData = nil + case .transparent: + navigationBarPresentationData = NavigationBarPresentationData(presentationData: context.sharedContext.currentPresentationData.with { $0 }, hideBackground: true, hideBadge: false, hideSeparator: true) + case .default: + navigationBarPresentationData = NavigationBarPresentationData(presentationData: context.sharedContext.currentPresentationData.with { $0 }) + } + super.init(navigationBarPresentationData: navigationBarPresentationData) } required public init(coder aDecoder: NSCoder) { @@ -176,6 +205,8 @@ open class ViewControllerComponentContainer: ViewController { override open func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) - self.node.containerLayoutUpdated(layout, transition: Transition(transition)) + let navigationHeight = self.navigationLayout(layout: layout).navigationFrame.maxY + + self.node.containerLayoutUpdated(layout: layout, navigationHeight: navigationHeight, transition: Transition(transition)) } } diff --git a/submodules/Display/Source/ImmediateTextNode.swift b/submodules/Display/Source/ImmediateTextNode.swift index e8cf468842..12799fa47f 100644 --- a/submodules/Display/Source/ImmediateTextNode.swift +++ b/submodules/Display/Source/ImmediateTextNode.swift @@ -224,3 +224,175 @@ public class ASTextNode: ImmediateTextNode { return self.updateLayout(constrainedSize) } } + +public class ImmediateTextView: TextView { + public var attributedText: NSAttributedString? + public var textAlignment: NSTextAlignment = .natural + public var verticalAlignment: TextVerticalAlignment = .top + public var truncationType: CTLineTruncationType = .end + public var maximumNumberOfLines: Int = 1 + public var lineSpacing: CGFloat = 0.0 + public var insets: UIEdgeInsets = UIEdgeInsets() + public var textShadowColor: UIColor? + public var textStroke: (UIColor, CGFloat)? + public var cutout: TextNodeCutout? + public var displaySpoilers = false + + public var truncationMode: NSLineBreakMode { + get { + switch self.truncationType { + case .start: + return .byTruncatingHead + case .middle: + return .byTruncatingMiddle + case .end: + return .byTruncatingTail + @unknown default: + return .byTruncatingTail + } + } set(value) { + switch value { + case .byTruncatingHead: + self.truncationType = .start + case .byTruncatingMiddle: + self.truncationType = .middle + case .byTruncatingTail: + self.truncationType = .end + default: + self.truncationType = .end + } + } + } + + private var tapRecognizer: TapLongTapOrDoubleTapGestureRecognizer? + private var linkHighlightingNode: LinkHighlightingNode? + + public var linkHighlightColor: UIColor? + + public var trailingLineWidth: CGFloat? + + var constrainedSize: CGSize? + + public var highlightAttributeAction: (([NSAttributedString.Key: Any]) -> NSAttributedString.Key?)? { + didSet { + self.updateInteractiveActions() + } + } + + public var tapAttributeAction: (([NSAttributedString.Key: Any], Int) -> Void)? + public var longTapAttributeAction: (([NSAttributedString.Key: Any], Int) -> Void)? + + public func updateLayout(_ constrainedSize: CGSize) -> CGSize { + self.constrainedSize = constrainedSize + + let makeLayout = TextView.asyncLayout(self) + let (layout, apply) = makeLayout(TextNodeLayoutArguments(attributedString: self.attributedText, backgroundColor: nil, maximumNumberOfLines: self.maximumNumberOfLines, truncationType: self.truncationType, constrainedSize: constrainedSize, alignment: self.textAlignment, verticalAlignment: self.verticalAlignment, lineSpacing: self.lineSpacing, cutout: self.cutout, insets: self.insets, textShadowColor: self.textShadowColor, textStroke: self.textStroke, displaySpoilers: self.displaySpoilers)) + let _ = apply() + if layout.numberOfLines > 1 { + self.trailingLineWidth = layout.trailingLineWidth + } else { + self.trailingLineWidth = nil + } + return layout.size + } + + public func updateLayoutInfo(_ constrainedSize: CGSize) -> ImmediateTextNodeLayoutInfo { + self.constrainedSize = constrainedSize + + let makeLayout = TextView.asyncLayout(self) + let (layout, apply) = makeLayout(TextNodeLayoutArguments(attributedString: self.attributedText, backgroundColor: nil, maximumNumberOfLines: self.maximumNumberOfLines, truncationType: self.truncationType, constrainedSize: constrainedSize, alignment: self.textAlignment, verticalAlignment: self.verticalAlignment, lineSpacing: self.lineSpacing, cutout: self.cutout, insets: self.insets, displaySpoilers: self.displaySpoilers)) + let _ = apply() + return ImmediateTextNodeLayoutInfo(size: layout.size, truncated: layout.truncated) + } + + public func updateLayoutFullInfo(_ constrainedSize: CGSize) -> TextNodeLayout { + self.constrainedSize = constrainedSize + + let makeLayout = TextView.asyncLayout(self) + let (layout, apply) = makeLayout(TextNodeLayoutArguments(attributedString: self.attributedText, backgroundColor: nil, maximumNumberOfLines: self.maximumNumberOfLines, truncationType: self.truncationType, constrainedSize: constrainedSize, alignment: self.textAlignment, verticalAlignment: self.verticalAlignment, lineSpacing: self.lineSpacing, cutout: self.cutout, insets: self.insets, displaySpoilers: self.displaySpoilers)) + let _ = apply() + return layout + } + + public func redrawIfPossible() { + if let constrainedSize = self.constrainedSize { + let _ = self.updateLayout(constrainedSize) + } + } + + private func updateInteractiveActions() { + if self.highlightAttributeAction != nil { + if self.tapRecognizer == nil { + let tapRecognizer = TapLongTapOrDoubleTapGestureRecognizer(target: self, action: #selector(self.tapAction(_:))) + tapRecognizer.highlight = { [weak self] point in + if let strongSelf = self { + var rects: [CGRect]? + if let point = point { + if let (index, attributes) = strongSelf.attributesAtPoint(CGPoint(x: point.x, y: point.y)) { + if let selectedAttribute = strongSelf.highlightAttributeAction?(attributes) { + let initialRects = strongSelf.lineAndAttributeRects(name: selectedAttribute.rawValue, at: index) + if let initialRects = initialRects, case .center = strongSelf.textAlignment { + var mappedRects: [CGRect] = [] + for i in 0 ..< initialRects.count { + let lineRect = initialRects[i].0 + var itemRect = initialRects[i].1 + itemRect.origin.x = floor((strongSelf.bounds.size.width - lineRect.width) / 2.0) + itemRect.origin.x + mappedRects.append(itemRect) + } + rects = mappedRects + } else { + rects = strongSelf.attributeRects(name: selectedAttribute.rawValue, at: index) + } + } + } + } + + if let rects = rects { + let linkHighlightingNode: LinkHighlightingNode + if let current = strongSelf.linkHighlightingNode { + linkHighlightingNode = current + } else { + linkHighlightingNode = LinkHighlightingNode(color: strongSelf.linkHighlightColor ?? .clear) + strongSelf.linkHighlightingNode = linkHighlightingNode + strongSelf.addSubnode(linkHighlightingNode) + } + linkHighlightingNode.frame = strongSelf.bounds + linkHighlightingNode.updateRects(rects.map { $0.offsetBy(dx: 0.0, dy: 0.0) }) + } else if let linkHighlightingNode = strongSelf.linkHighlightingNode { + strongSelf.linkHighlightingNode = nil + linkHighlightingNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.18, removeOnCompletion: false, completion: { [weak linkHighlightingNode] _ in + linkHighlightingNode?.removeFromSupernode() + }) + } + } + } + self.addGestureRecognizer(tapRecognizer) + } + } else if let tapRecognizer = self.tapRecognizer { + self.tapRecognizer = nil + self.removeGestureRecognizer(tapRecognizer) + } + } + + @objc private func tapAction(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) { + switch recognizer.state { + case .ended: + if let (gesture, location) = recognizer.lastRecognizedGestureAndLocation { + switch gesture { + case .tap: + if let (index, attributes) = self.attributesAtPoint(CGPoint(x: location.x, y: location.y)) { + self.tapAttributeAction?(attributes, index) + } + case .longTap: + if let (index, attributes) = self.attributesAtPoint(CGPoint(x: location.x, y: location.y)) { + self.longTapAttributeAction?(attributes, index) + } + default: + break + } + } + default: + break + } + } +} diff --git a/submodules/Display/Source/TextNode.swift b/submodules/Display/Source/TextNode.swift index cbf0ec3e93..5212a62136 100644 --- a/submodules/Display/Source/TextNode.swift +++ b/submodules/Display/Source/TextNode.swift @@ -890,7 +890,7 @@ public class TextNode: ASDisplayNode { } } - private class func calculateLayout(attributedString: NSAttributedString?, minimumNumberOfLines: Int, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, backgroundColor: UIColor?, constrainedSize: CGSize, alignment: NSTextAlignment, verticalAlignment: TextVerticalAlignment, lineSpacingFactor: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?, displaySpoilers: Bool) -> TextNodeLayout { + static func calculateLayout(attributedString: NSAttributedString?, minimumNumberOfLines: Int, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, backgroundColor: UIColor?, constrainedSize: CGSize, alignment: NSTextAlignment, verticalAlignment: TextVerticalAlignment, lineSpacingFactor: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?, displaySpoilers: Bool) -> TextNodeLayout { if let attributedString = attributedString { let stringLength = attributedString.length @@ -1485,3 +1485,649 @@ public class TextNode: ASDisplayNode { } } } + +open class TextView: UIView { + public internal(set) var cachedLayout: TextNodeLayout? + + override public init(frame: CGRect) { + super.init(frame: frame) + + self.backgroundColor = UIColor.clear + self.isOpaque = false + self.clipsToBounds = false + } + + required public init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func attributesAtPoint(_ point: CGPoint, orNearest: Bool = false) -> (Int, [NSAttributedString.Key: Any])? { + if let cachedLayout = self.cachedLayout { + return cachedLayout.attributesAtPoint(point, orNearest: orNearest) + } else { + return nil + } + } + + public func textRangesRects(text: String) -> [[CGRect]] { + return self.cachedLayout?.textRangesRects(text: text) ?? [] + } + + public func attributeSubstring(name: String, index: Int) -> (String, String)? { + return self.cachedLayout?.attributeSubstring(name: name, index: index) + } + + public func attributeRects(name: String, at index: Int) -> [CGRect]? { + if let cachedLayout = self.cachedLayout { + return cachedLayout.lineAndAttributeRects(name: name, at: index)?.map { $0.1 } + } else { + return nil + } + } + + public func rangeRects(in range: NSRange) -> (rects: [CGRect], start: TextRangeRectEdge, end: TextRangeRectEdge)? { + if let cachedLayout = self.cachedLayout { + return cachedLayout.rangeRects(in: range) + } else { + return nil + } + } + + public func lineAndAttributeRects(name: String, at index: Int) -> [(CGRect, CGRect)]? { + if let cachedLayout = self.cachedLayout { + return cachedLayout.lineAndAttributeRects(name: name, at: index) + } else { + return nil + } + } + + private class func calculateLayout(attributedString: NSAttributedString?, minimumNumberOfLines: Int, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, backgroundColor: UIColor?, constrainedSize: CGSize, alignment: NSTextAlignment, verticalAlignment: TextVerticalAlignment, lineSpacingFactor: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?, displaySpoilers: Bool) -> TextNodeLayout { + if let attributedString = attributedString { + + let stringLength = attributedString.length + + let font: CTFont + let resolvedAlignment: NSTextAlignment + + if stringLength != 0 { + if let stringFont = attributedString.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) { + font = stringFont as! CTFont + } else { + font = defaultFont + } + if alignment == .center { + resolvedAlignment = .center + } else { + if let paragraphStyle = attributedString.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as? NSParagraphStyle { + resolvedAlignment = paragraphStyle.alignment + } else { + resolvedAlignment = alignment + } + } + } else { + font = defaultFont + resolvedAlignment = alignment + } + + let fontAscent = CTFontGetAscent(font) + let fontDescent = CTFontGetDescent(font) + let fontLineHeight = floor(fontAscent + fontDescent) + let fontLineSpacing = floor(fontLineHeight * lineSpacingFactor) + + var lines: [TextNodeLine] = [] + var blockQuotes: [TextNodeBlockQuote] = [] + + var maybeTypesetter: CTTypesetter? + maybeTypesetter = CTTypesetterCreateWithAttributedString(attributedString as CFAttributedString) + if maybeTypesetter == nil { + return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: resolvedAlignment, verticalAlignment: verticalAlignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke, displaySpoilers: displaySpoilers) + } + + let typesetter = maybeTypesetter! + + var lastLineCharacterIndex: CFIndex = 0 + var layoutSize = CGSize() + + var cutoutEnabled = false + var cutoutMinY: CGFloat = 0.0 + var cutoutMaxY: CGFloat = 0.0 + var cutoutWidth: CGFloat = 0.0 + var cutoutOffset: CGFloat = 0.0 + + var bottomCutoutEnabled = false + var bottomCutoutSize = CGSize() + + if let topLeft = cutout?.topLeft { + cutoutMinY = -fontLineSpacing + cutoutMaxY = topLeft.height + fontLineSpacing + cutoutWidth = topLeft.width + cutoutOffset = cutoutWidth + cutoutEnabled = true + } else if let topRight = cutout?.topRight { + cutoutMinY = -fontLineSpacing + cutoutMaxY = topRight.height + fontLineSpacing + cutoutWidth = topRight.width + cutoutEnabled = true + } + + if let bottomRight = cutout?.bottomRight { + bottomCutoutSize = bottomRight + bottomCutoutEnabled = true + } + + let firstLineOffset = floorToScreenPixels(fontDescent) + + var truncated = false + var first = true + while true { + var strikethroughs: [TextNodeStrikethrough] = [] + var spoilers: [TextNodeSpoiler] = [] + var spoilerWords: [TextNodeSpoiler] = [] + + var lineConstrainedWidth = constrainedSize.width + var lineConstrainedWidthDelta: CGFloat = 0.0 + var lineOriginY = floorToScreenPixels(layoutSize.height + fontAscent) + if !first { + lineOriginY += fontLineSpacing + } + var lineCutoutOffset: CGFloat = 0.0 + var lineAdditionalWidth: CGFloat = 0.0 + + if cutoutEnabled { + if lineOriginY - fontLineHeight < cutoutMaxY && lineOriginY + fontLineHeight > cutoutMinY { + lineConstrainedWidth = max(1.0, lineConstrainedWidth - cutoutWidth) + lineConstrainedWidthDelta = -cutoutWidth + lineCutoutOffset = cutoutOffset + lineAdditionalWidth = cutoutWidth + } + } + + let lineCharacterCount = CTTypesetterSuggestLineBreak(typesetter, lastLineCharacterIndex, Double(lineConstrainedWidth)) + + func addSpoiler(line: CTLine, ascent: CGFloat, descent: CGFloat, startIndex: Int, endIndex: Int) { + var secondaryLeftOffset: CGFloat = 0.0 + let rawLeftOffset = CTLineGetOffsetForStringIndex(line, startIndex, &secondaryLeftOffset) + var leftOffset = floor(rawLeftOffset) + if !rawLeftOffset.isEqual(to: secondaryLeftOffset) { + leftOffset = floor(secondaryLeftOffset) + } + + var secondaryRightOffset: CGFloat = 0.0 + let rawRightOffset = CTLineGetOffsetForStringIndex(line, endIndex, &secondaryRightOffset) + var rightOffset = ceil(rawRightOffset) + if !rawRightOffset.isEqual(to: secondaryRightOffset) { + rightOffset = ceil(secondaryRightOffset) + } + + spoilers.append(TextNodeSpoiler(range: NSMakeRange(startIndex, endIndex - startIndex + 1), frame: CGRect(x: min(leftOffset, rightOffset), y: descent - (ascent + descent), width: abs(rightOffset - leftOffset), height: ascent + descent))) + } + + func addSpoilerWord(line: CTLine, ascent: CGFloat, descent: CGFloat, startIndex: Int, endIndex: Int, rightInset: CGFloat = 0.0) { + var secondaryLeftOffset: CGFloat = 0.0 + let rawLeftOffset = CTLineGetOffsetForStringIndex(line, startIndex, &secondaryLeftOffset) + var leftOffset = floor(rawLeftOffset) + if !rawLeftOffset.isEqual(to: secondaryLeftOffset) { + leftOffset = floor(secondaryLeftOffset) + } + + var secondaryRightOffset: CGFloat = 0.0 + let rawRightOffset = CTLineGetOffsetForStringIndex(line, endIndex, &secondaryRightOffset) + var rightOffset = ceil(rawRightOffset) + if !rawRightOffset.isEqual(to: secondaryRightOffset) { + rightOffset = ceil(secondaryRightOffset) + } + + spoilerWords.append(TextNodeSpoiler(range: NSMakeRange(startIndex, endIndex - startIndex + 1), frame: CGRect(x: min(leftOffset, rightOffset), y: descent - (ascent + descent), width: abs(rightOffset - leftOffset) + rightInset, height: ascent + descent))) + } + + var isLastLine = false + if maximumNumberOfLines != 0 && lines.count == maximumNumberOfLines - 1 && lineCharacterCount > 0 { + isLastLine = true + } else if layoutSize.height + (fontLineSpacing + fontLineHeight) * 2.0 > constrainedSize.height { + isLastLine = true + } + if isLastLine { + if first { + first = false + } else { + layoutSize.height += fontLineSpacing + } + + let lineRange = CFRange(location: lastLineCharacterIndex, length: stringLength - lastLineCharacterIndex) + var brokenLineRange = CFRange(location: lastLineCharacterIndex, length: lineCharacterCount) + if brokenLineRange.location + brokenLineRange.length > attributedString.length { + brokenLineRange.length = attributedString.length - brokenLineRange.location + } + if lineRange.length == 0 { + break + } + + let coreTextLine: CTLine + let originalLine = CTTypesetterCreateLineWithOffset(typesetter, lineRange, 0.0) + + var lineConstrainedSize = constrainedSize + lineConstrainedSize.width += lineConstrainedWidthDelta + if bottomCutoutEnabled { + lineConstrainedSize.width -= bottomCutoutSize.width + } + + if CTLineGetTypographicBounds(originalLine, nil, nil, nil) - CTLineGetTrailingWhitespaceWidth(originalLine) < Double(lineConstrainedSize.width) { + coreTextLine = originalLine + } else { + var truncationTokenAttributes: [NSAttributedString.Key : AnyObject] = [:] + truncationTokenAttributes[NSAttributedString.Key.font] = font + truncationTokenAttributes[NSAttributedString.Key(rawValue: kCTForegroundColorFromContextAttributeName as String)] = true as NSNumber + let tokenString = "\u{2026}" + let truncatedTokenString = NSAttributedString(string: tokenString, attributes: truncationTokenAttributes) + let truncationToken = CTLineCreateWithAttributedString(truncatedTokenString) + + coreTextLine = CTLineCreateTruncatedLine(originalLine, Double(lineConstrainedSize.width), truncationType, truncationToken) ?? truncationToken + let runs = (CTLineGetGlyphRuns(coreTextLine) as [AnyObject]) as! [CTRun] + for run in runs { + let runAttributes: NSDictionary = CTRunGetAttributes(run) + if let _ = runAttributes["CTForegroundColorFromContext"] { + brokenLineRange.length = CTRunGetStringRange(run).location + break + } + } + if brokenLineRange.location + brokenLineRange.length > attributedString.length { + brokenLineRange.length = attributedString.length - brokenLineRange.location + } + truncated = true + } + + var headIndent: CGFloat = 0.0 + if brokenLineRange.location >= 0 && brokenLineRange.length > 0 && brokenLineRange.location + brokenLineRange.length <= attributedString.length { + attributedString.enumerateAttributes(in: NSMakeRange(brokenLineRange.location, brokenLineRange.length), options: []) { attributes, range, _ in + if attributes[NSAttributedString.Key(rawValue: "TelegramSpoiler")] != nil || attributes[NSAttributedString.Key(rawValue: "Attribute__Spoiler")] != nil { + var ascent: CGFloat = 0.0 + var descent: CGFloat = 0.0 + CTLineGetTypographicBounds(coreTextLine, &ascent, &descent, nil) + + var startIndex: Int? + var currentIndex: Int? + + let nsString = (attributedString.string as NSString) + nsString.enumerateSubstrings(in: range, options: .byComposedCharacterSequences) { substring, range, _, _ in + if let substring = substring, substring.rangeOfCharacter(from: .whitespacesAndNewlines) != nil { + if let currentStartIndex = startIndex { + startIndex = nil + let endIndex = range.location + addSpoilerWord(line: coreTextLine, ascent: ascent, descent: descent, startIndex: currentStartIndex, endIndex: endIndex) + } + } else if startIndex == nil { + startIndex = range.location + } + currentIndex = range.location + range.length + } + + if let currentStartIndex = startIndex, let currentIndex = currentIndex { + startIndex = nil + let endIndex = currentIndex + addSpoilerWord(line: coreTextLine, ascent: ascent, descent: descent, startIndex: currentStartIndex, endIndex: endIndex, rightInset: truncated ? 12.0 : 0.0) + } + + addSpoiler(line: coreTextLine, ascent: ascent, descent: descent, startIndex: range.location, endIndex: range.location + range.length) + } else if let _ = attributes[NSAttributedString.Key.strikethroughStyle] { + let lowerX = floor(CTLineGetOffsetForStringIndex(coreTextLine, range.location, nil)) + let upperX = ceil(CTLineGetOffsetForStringIndex(coreTextLine, range.location + range.length, nil)) + let x = lowerX < upperX ? lowerX : upperX + strikethroughs.append(TextNodeStrikethrough(range: range, frame: CGRect(x: x, y: 0.0, width: abs(upperX - lowerX), height: fontLineHeight))) + } else if let paragraphStyle = attributes[NSAttributedString.Key.paragraphStyle] as? NSParagraphStyle { + headIndent = paragraphStyle.headIndent + + } + } + } + + let lineWidth = min(lineConstrainedSize.width, ceil(CGFloat(CTLineGetTypographicBounds(coreTextLine, nil, nil, nil) - CTLineGetTrailingWhitespaceWidth(coreTextLine)))) + let lineFrame = CGRect(x: lineCutoutOffset + headIndent, y: lineOriginY, width: lineWidth, height: fontLineHeight) + layoutSize.height += fontLineHeight + fontLineSpacing + layoutSize.width = max(layoutSize.width, lineWidth + lineAdditionalWidth) + + if headIndent > 0.0 { + blockQuotes.append(TextNodeBlockQuote(frame: lineFrame)) + } + + var isRTL = false + let glyphRuns = CTLineGetGlyphRuns(coreTextLine) as NSArray + if glyphRuns.count != 0 { + let run = glyphRuns[0] as! CTRun + if CTRunGetStatus(run).contains(CTRunStatus.rightToLeft) { + isRTL = true + } + } + + lines.append(TextNodeLine(line: coreTextLine, frame: lineFrame, range: NSMakeRange(lineRange.location, lineRange.length), isRTL: isRTL, strikethroughs: strikethroughs, spoilers: spoilers, spoilerWords: spoilerWords)) + break + } else { + if lineCharacterCount > 0 { + if first { + first = false + } else { + layoutSize.height += fontLineSpacing + } + + var lineRange = CFRangeMake(lastLineCharacterIndex, lineCharacterCount) + if lineRange.location + lineRange.length > attributedString.length { + lineRange.length = attributedString.length - lineRange.location + } + if lineRange.length < 0 { + break + } + + let coreTextLine = CTTypesetterCreateLineWithOffset(typesetter, lineRange, 100.0) + lastLineCharacterIndex += lineCharacterCount + + var headIndent: CGFloat = 0.0 + attributedString.enumerateAttributes(in: NSMakeRange(lineRange.location, lineRange.length), options: []) { attributes, range, _ in + if attributes[NSAttributedString.Key(rawValue: "TelegramSpoiler")] != nil || attributes[NSAttributedString.Key(rawValue: "Attribute__Spoiler")] != nil { + var ascent: CGFloat = 0.0 + var descent: CGFloat = 0.0 + CTLineGetTypographicBounds(coreTextLine, &ascent, &descent, nil) + + var startIndex: Int? + var currentIndex: Int? + + let nsString = (attributedString.string as NSString) + nsString.enumerateSubstrings(in: range, options: .byComposedCharacterSequences) { substring, range, _, _ in + if let substring = substring, substring.rangeOfCharacter(from: .whitespacesAndNewlines) != nil { + if let currentStartIndex = startIndex { + startIndex = nil + let endIndex = range.location + addSpoilerWord(line: coreTextLine, ascent: ascent, descent: descent, startIndex: currentStartIndex, endIndex: endIndex) + } + } else if startIndex == nil { + startIndex = range.location + } + currentIndex = range.location + range.length + } + + if let currentStartIndex = startIndex, let currentIndex = currentIndex { + startIndex = nil + let endIndex = currentIndex + addSpoilerWord(line: coreTextLine, ascent: ascent, descent: descent, startIndex: currentStartIndex, endIndex: endIndex) + } + + addSpoiler(line: coreTextLine, ascent: ascent, descent: descent, startIndex: range.location, endIndex: range.location + range.length) + } else if let _ = attributes[NSAttributedString.Key.strikethroughStyle] { + let lowerX = floor(CTLineGetOffsetForStringIndex(coreTextLine, range.location, nil)) + let upperX = ceil(CTLineGetOffsetForStringIndex(coreTextLine, range.location + range.length, nil)) + let x = lowerX < upperX ? lowerX : upperX + strikethroughs.append(TextNodeStrikethrough(range: range, frame: CGRect(x: x, y: 0.0, width: abs(upperX - lowerX), height: fontLineHeight))) + } else if let paragraphStyle = attributes[NSAttributedString.Key.paragraphStyle] as? NSParagraphStyle { + headIndent = paragraphStyle.headIndent + } + } + + let lineWidth = ceil(CGFloat(CTLineGetTypographicBounds(coreTextLine, nil, nil, nil) - CTLineGetTrailingWhitespaceWidth(coreTextLine))) + let lineFrame = CGRect(x: lineCutoutOffset + headIndent, y: lineOriginY, width: lineWidth, height: fontLineHeight) + layoutSize.height += fontLineHeight + layoutSize.width = max(layoutSize.width, lineWidth + lineAdditionalWidth) + + if headIndent > 0.0 { + blockQuotes.append(TextNodeBlockQuote(frame: lineFrame)) + } + + var isRTL = false + let glyphRuns = CTLineGetGlyphRuns(coreTextLine) as NSArray + if glyphRuns.count != 0 { + let run = glyphRuns[0] as! CTRun + if CTRunGetStatus(run).contains(CTRunStatus.rightToLeft) { + isRTL = true + } + } + + lines.append(TextNodeLine(line: coreTextLine, frame: lineFrame, range: NSMakeRange(lineRange.location, lineRange.length), isRTL: isRTL, strikethroughs: strikethroughs, spoilers: spoilers, spoilerWords: spoilerWords)) + } else { + if !lines.isEmpty { + layoutSize.height += fontLineSpacing + } + break + } + } + } + + let rawLayoutSize = layoutSize + if !lines.isEmpty && bottomCutoutEnabled { + let proposedWidth = lines[lines.count - 1].frame.width + bottomCutoutSize.width + if proposedWidth > layoutSize.width { + if proposedWidth <= constrainedSize.width + .ulpOfOne { + layoutSize.width = proposedWidth + } else { + layoutSize.height += bottomCutoutSize.height + } + } + } + + if lines.count < minimumNumberOfLines { + var lineCount = lines.count + while lineCount < minimumNumberOfLines { + if lineCount != 0 { + layoutSize.height += fontLineSpacing + } + layoutSize.height += fontLineHeight + lineCount += 1 + } + } + + return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: resolvedAlignment, verticalAlignment: verticalAlignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(width: ceil(layoutSize.width) + insets.left + insets.right, height: ceil(layoutSize.height) + insets.top + insets.bottom), rawTextSize: CGSize(width: ceil(rawLayoutSize.width) + insets.left + insets.right, height: ceil(rawLayoutSize.height) + insets.top + insets.bottom), truncated: truncated, firstLineOffset: firstLineOffset, lines: lines, blockQuotes: blockQuotes, backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke, displaySpoilers: displaySpoilers) + } else { + return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: alignment, verticalAlignment: verticalAlignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke, displaySpoilers: displaySpoilers) + } + } + + public override func draw(_ rect: CGRect) { + let bounds = self.bounds + let layout = self.cachedLayout + + let context = UIGraphicsGetCurrentContext()! + + context.setAllowsAntialiasing(true) + + context.setAllowsFontSmoothing(false) + context.setShouldSmoothFonts(false) + + context.setAllowsFontSubpixelPositioning(false) + context.setShouldSubpixelPositionFonts(false) + + context.setAllowsFontSubpixelQuantization(true) + context.setShouldSubpixelQuantizeFonts(true) + + var clearRects: [CGRect] = [] + if let layout = layout { + if layout.backgroundColor != nil { + context.setBlendMode(.copy) + context.setFillColor((layout.backgroundColor ?? UIColor.clear).cgColor) + context.fill(bounds) + } + + if let textShadowColor = layout.textShadowColor { + context.setTextDrawingMode(.fill) + context.setShadow(offset: CGSize(width: 0.0, height: 1.0), blur: 0.0, color: textShadowColor.cgColor) + } + + if let (textStrokeColor, textStrokeWidth) = layout.textStroke { + context.setBlendMode(.normal) + context.setLineCap(.round) + context.setLineJoin(.round) + context.setStrokeColor(textStrokeColor.cgColor) + context.setFillColor(textStrokeColor.cgColor) + context.setLineWidth(textStrokeWidth) + context.setTextDrawingMode(.fillStroke) + } + + let textMatrix = context.textMatrix + let textPosition = context.textPosition + context.textMatrix = CGAffineTransform(scaleX: 1.0, y: -1.0) + + let alignment = layout.resolvedAlignment + var offset = CGPoint(x: layout.insets.left, y: layout.insets.top) + switch layout.verticalAlignment { + case .top: + break + case .middle: + offset.y = floor((bounds.height - layout.size.height) / 2.0) + layout.insets.top + case .bottom: + offset.y = floor(bounds.height - layout.size.height) + layout.insets.top + } + + for i in 0 ..< layout.lines.count { + let line = layout.lines[i] + + var lineFrame = line.frame + lineFrame.origin.y += offset.y + + if alignment == .center { + lineFrame.origin.x = offset.x + floor((bounds.size.width - lineFrame.width) / 2.0) + } else if alignment == .natural, line.isRTL { + lineFrame.origin.x = offset.x + floor(bounds.size.width - lineFrame.width) + + lineFrame = displayLineFrame(frame: lineFrame, isRTL: line.isRTL, boundingRect: CGRect(origin: CGPoint(), size: bounds.size), cutout: layout.cutout) + } + context.textPosition = CGPoint(x: lineFrame.minX, y: lineFrame.minY) + + if layout.displaySpoilers && !line.spoilers.isEmpty { + context.saveGState() + var clipRects: [CGRect] = [] + for spoiler in line.spoilerWords { + var spoilerClipRect = spoiler.frame.offsetBy(dx: lineFrame.minX, dy: lineFrame.minY - UIScreenPixel) + spoilerClipRect.size.height += 1.0 + UIScreenPixel + clipRects.append(spoilerClipRect) + } + context.clip(to: clipRects) + } + + let glyphRuns = CTLineGetGlyphRuns(line.line) as NSArray + if glyphRuns.count != 0 { + for run in glyphRuns { + let run = run as! CTRun + let glyphCount = CTRunGetGlyphCount(run) + CTRunDraw(run, context, CFRangeMake(0, glyphCount)) + } + } + + if !line.strikethroughs.isEmpty { + for strikethrough in line.strikethroughs { + var textColor: UIColor? + layout.attributedString?.enumerateAttributes(in: NSMakeRange(line.range.location, line.range.length), options: []) { attributes, range, _ in + if range == strikethrough.range, let color = attributes[NSAttributedString.Key.foregroundColor] as? UIColor { + textColor = color + } + } + if let textColor = textColor { + context.setFillColor(textColor.cgColor) + } + let frame = strikethrough.frame.offsetBy(dx: lineFrame.minX, dy: lineFrame.minY) + context.fill(CGRect(x: frame.minX, y: frame.minY - 5.0, width: frame.width, height: 1.0)) + } + } + + if !line.spoilers.isEmpty { + if layout.displaySpoilers { + context.restoreGState() + } else { + for spoiler in line.spoilerWords { + var spoilerClearRect = spoiler.frame.offsetBy(dx: lineFrame.minX, dy: lineFrame.minY - UIScreenPixel) + spoilerClearRect.size.height += 1.0 + UIScreenPixel + clearRects.append(spoilerClearRect) + } + } + } + } + + var blockQuoteFrames: [CGRect] = [] + var currentBlockQuoteFrame: CGRect? + for blockQuote in layout.blockQuotes { + if let frame = currentBlockQuoteFrame { + if blockQuote.frame.minY - frame.maxY < 20.0 { + currentBlockQuoteFrame = frame.union(blockQuote.frame) + } else { + blockQuoteFrames.append(frame) + currentBlockQuoteFrame = frame + } + } else { + currentBlockQuoteFrame = blockQuote.frame + } + } + + if let frame = currentBlockQuoteFrame { + blockQuoteFrames.append(frame) + } + + for frame in blockQuoteFrames { + if let lineColor = layout.lineColor { + context.setFillColor(lineColor.cgColor) + } + let rect = UIBezierPath(roundedRect: CGRect(x: frame.minX - 9.0, y: frame.minY - 14.0, width: 2.0, height: frame.height), cornerRadius: 1.0) + context.addPath(rect.cgPath) + context.fillPath() + } + + context.textMatrix = textMatrix + context.textPosition = CGPoint(x: textPosition.x, y: textPosition.y) + } + + context.setBlendMode(.normal) + + for rect in clearRects { + context.clear(rect) + } + } + + public static func asyncLayout(_ maybeView: TextView?) -> (TextNodeLayoutArguments) -> (TextNodeLayout, () -> TextView) { + let existingLayout: TextNodeLayout? = maybeView?.cachedLayout + + return { arguments in + let layout: TextNodeLayout + + var updated = false + if let existingLayout = existingLayout, existingLayout.constrainedSize == arguments.constrainedSize && existingLayout.maximumNumberOfLines == arguments.maximumNumberOfLines && existingLayout.truncationType == arguments.truncationType && existingLayout.cutout == arguments.cutout && existingLayout.explicitAlignment == arguments.alignment && existingLayout.lineSpacing.isEqual(to: arguments.lineSpacing) { + let stringMatch: Bool + + var colorMatch: Bool = true + if let backgroundColor = arguments.backgroundColor, let previousBackgroundColor = existingLayout.backgroundColor { + if !backgroundColor.isEqual(previousBackgroundColor) { + colorMatch = false + } + } else if (arguments.backgroundColor != nil) != (existingLayout.backgroundColor != nil) { + colorMatch = false + } + + if !colorMatch { + stringMatch = false + } else if let existingString = existingLayout.attributedString, let string = arguments.attributedString { + stringMatch = existingString.isEqual(to: string) + } else if existingLayout.attributedString == nil && arguments.attributedString == nil { + stringMatch = true + } else { + stringMatch = false + } + + if stringMatch { + layout = existingLayout + } else { + layout = TextNode.calculateLayout(attributedString: arguments.attributedString, minimumNumberOfLines: arguments.minimumNumberOfLines, maximumNumberOfLines: arguments.maximumNumberOfLines, truncationType: arguments.truncationType, backgroundColor: arguments.backgroundColor, constrainedSize: arguments.constrainedSize, alignment: arguments.alignment, verticalAlignment: arguments.verticalAlignment, lineSpacingFactor: arguments.lineSpacing, cutout: arguments.cutout, insets: arguments.insets, lineColor: arguments.lineColor, textShadowColor: arguments.textShadowColor, textStroke: arguments.textStroke, displaySpoilers: arguments.displaySpoilers) + updated = true + } + } else { + layout = TextNode.calculateLayout(attributedString: arguments.attributedString, minimumNumberOfLines: arguments.minimumNumberOfLines, maximumNumberOfLines: arguments.maximumNumberOfLines, truncationType: arguments.truncationType, backgroundColor: arguments.backgroundColor, constrainedSize: arguments.constrainedSize, alignment: arguments.alignment, verticalAlignment: arguments.verticalAlignment, lineSpacingFactor: arguments.lineSpacing, cutout: arguments.cutout, insets: arguments.insets, lineColor: arguments.lineColor, textShadowColor: arguments.textShadowColor, textStroke: arguments.textStroke, displaySpoilers: arguments.displaySpoilers) + updated = true + } + + let view = maybeView ?? TextView() + + return (layout, { + view.cachedLayout = layout + if updated { + if layout.size.width.isZero && layout.size.height.isZero { + view.layer.contents = nil + } + view.setNeedsDisplay() + } + + return view + }) + } + } +} diff --git a/submodules/PeerInfoUI/BUILD b/submodules/PeerInfoUI/BUILD index cfd857c73d..c6359760fa 100644 --- a/submodules/PeerInfoUI/BUILD +++ b/submodules/PeerInfoUI/BUILD @@ -74,6 +74,7 @@ swift_library( "//submodules/AnimatedStickerNode:AnimatedStickerNode", "//submodules/TelegramAnimatedStickerNode:TelegramAnimatedStickerNode", "//submodules/Components/ReactionImageComponent:ReactionImageComponent", + "//submodules/Components/LottieAnimationComponent:LottieAnimationComponent", ], visibility = [ "//visibility:public", diff --git a/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/BUILD b/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/BUILD new file mode 100644 index 0000000000..b34e2bac80 --- /dev/null +++ b/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/BUILD @@ -0,0 +1,32 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "CreateExternalMediaStreamScreen", + module_name = "CreateExternalMediaStreamScreen", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", + "//submodules/AsyncDisplayKit:AsyncDisplayKit", + "//submodules/Display:Display", + "//submodules/Postbox:Postbox", + "//submodules/TelegramCore:TelegramCore", + "//submodules/TelegramPresentationData:TelegramPresentationData", + "//submodules/AccountContext:AccountContext", + "//submodules/PresentationDataUtils:PresentationDataUtils", + "//submodules/ComponentFlow:ComponentFlow", + "//submodules/Components/ViewControllerComponent:ViewControllerComponent", + "//submodules/Components/MultilineTextComponent:MultilineTextComponent", + "//submodules/Components/SolidRoundedButtonComponent:SolidRoundedButtonComponent", + "//submodules/Components/BundleIconComponent:BundleIconComponent", + "//submodules/Components/AnimatedStickerComponent:AnimatedStickerComponent", + "//submodules/Components/ActivityIndicatorComponent:ActivityIndicatorComponent", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/Sources/CreateExternalMediaStreamScreen.swift b/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/Sources/CreateExternalMediaStreamScreen.swift new file mode 100644 index 0000000000..3b24847788 --- /dev/null +++ b/submodules/PeerInfoUI/CreateExternalMediaStreamScreen/Sources/CreateExternalMediaStreamScreen.swift @@ -0,0 +1,447 @@ +import Foundation +import UIKit +import Display +import SwiftSignalKit +import TelegramCore +import TelegramPresentationData +import PresentationDataUtils +import AccountContext +import ComponentFlow +import ViewControllerComponent +import MultilineTextComponent +import SolidRoundedButtonComponent +import BundleIconComponent +import AnimatedStickerComponent +import ActivityIndicatorComponent + +private final class CreateExternalMediaStreamScreenComponent: CombinedComponent { + typealias EnvironmentType = ViewControllerComponentContainer.Environment + + let context: AccountContext + let peerId: EnginePeer.Id + let credentialsPromise: Promise? + + init(context: AccountContext, peerId: EnginePeer.Id, credentialsPromise: Promise?) { + self.context = context + self.peerId = peerId + self.credentialsPromise = credentialsPromise + } + + static func ==(lhs: CreateExternalMediaStreamScreenComponent, rhs: CreateExternalMediaStreamScreenComponent) -> Bool { + if lhs.context !== rhs.context { + return false + } + if lhs.peerId != rhs.peerId { + return false + } + if lhs.credentialsPromise !== rhs.credentialsPromise { + return false + } + return true + } + + final class State: ComponentState { + let context: AccountContext + let peerId: EnginePeer.Id + + private(set) var credentials: GroupCallStreamCredentials? + + private var credentialsDisposable: Disposable? + private let activeActionDisposable = MetaDisposable() + + init(context: AccountContext, peerId: EnginePeer.Id, credentialsPromise: Promise?) { + self.context = context + self.peerId = peerId + + super.init() + + let credentialsSignal: Signal + if let credentialsPromise = credentialsPromise { + credentialsSignal = credentialsPromise.get() + } else { + credentialsSignal = context.engine.calls.getGroupCallStreamCredentials(peerId: peerId, revokePreviousCredentials: false) + |> `catch` { _ -> Signal in + return .never() + } + } + self.credentialsDisposable = (credentialsSignal |> deliverOnMainQueue).start(next: { [weak self] result in + guard let strongSelf = self else { + return + } + + strongSelf.credentials = result + strongSelf.updated(transition: .immediate) + }) + } + + deinit { + self.credentialsDisposable?.dispose() + self.activeActionDisposable.dispose() + } + + func copyCredentials(_ key: KeyPath) { + guard let credentials = self.credentials else { + return + } + UIPasteboard.general.string = credentials[keyPath: key] + } + + func createAndJoinGroupCall(baseController: ViewController, completion: @escaping () -> Void) { + guard let _ = self.context.sharedContext.callManager else { + return + } + let startCall: (Bool) -> Void = { [weak self, weak baseController] endCurrentIfAny in + guard let strongSelf = self, let baseController = baseController else { + return + } + + var cancelImpl: (() -> Void)? + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + let progressSignal = Signal { [weak baseController] subscriber in + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + baseController?.present(controller, in: .window(.root)) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(0.15, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() + let createSignal = strongSelf.context.engine.calls.createGroupCall(peerId: strongSelf.peerId, title: nil, scheduleDate: nil, isExternalStream: true) + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + cancelImpl = { + self?.activeActionDisposable.set(nil) + } + strongSelf.activeActionDisposable.set((createSignal + |> deliverOnMainQueue).start(next: { info in + guard let strongSelf = self else { + return + } + strongSelf.context.joinGroupCall(peerId: strongSelf.peerId, invite: nil, requestJoinAsPeerId: { result in + result(nil) + }, activeCall: EngineGroupCallDescription(id: info.id, accessHash: info.accessHash, title: info.title, scheduleTimestamp: nil, subscribedToScheduled: false, isStream: info.isStream)) + + completion() + }, error: { [weak baseController] error in + guard let strongSelf = self else { + return + } + + let text: String + text = presentationData.strings.Login_UnknownError + baseController?.present(textAlertController(context: strongSelf.context, updatedPresentationData: nil, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root)) + })) + } + + startCall(true) + } + } + + func makeState() -> State { + return State(context: self.context, peerId: self.peerId, credentialsPromise: self.credentialsPromise) + } + + static var body: Body { + let background = Child(Rectangle.self) + + let animation = Child(AnimatedStickerComponent.self) + let text = Child(MultilineTextComponent.self) + let bottomText = Child(MultilineTextComponent.self) + let button = Child(SolidRoundedButtonComponent.self) + + let activityIndicator = Child(ActivityIndicatorComponent.self) + + let credentialsBackground = Child(RoundedRectangle.self) + + let credentialsStripe = Child(Rectangle.self) + let credentialsURLTitle = Child(MultilineTextComponent.self) + let credentialsURLText = Child(MultilineTextComponent.self) + + let credentialsKeyTitle = Child(MultilineTextComponent.self) + let credentialsKeyText = Child(MultilineTextComponent.self) + + let credentialsCopyURLButton = Child(Button.self) + let credentialsCopyKeyButton = Child(Button.self) + + return { context in + let topInset: CGFloat = 16.0 + let sideInset: CGFloat = 16.0 + let credentialsSideInset: CGFloat = 16.0 + let credentialsTopInset: CGFloat = 9.0 + let credentialsTitleSpacing: CGFloat = 5.0 + + let environment = context.environment[ViewControllerComponentContainer.Environment.self].value + let state = context.state + let controller = environment.controller + + let bottomInset: CGFloat + if environment.safeInsets.bottom.isZero { + bottomInset = 16.0 + } else { + bottomInset = 42.0 + } + + let background = background.update( + component: Rectangle(color: environment.theme.list.blocksBackgroundColor), + availableSize: context.availableSize, + transition: context.transition + ) + + let animation = animation.update( + component: AnimatedStickerComponent( + animation: AnimatedStickerComponent.Animation( + name: "CreateStream", + loop: true + ), + size: CGSize(width: 138.0, height: 138.0) + ), + availableSize: CGSize(width: 138.0, height: 138.0), + transition: context.transition + ) + + let text = text.update( + component: MultilineTextComponent( + text: NSAttributedString(string: environment.strings.CreateExternalStream_Text, font: Font.regular(15.0), textColor: environment.theme.list.itemSecondaryTextColor, paragraphAlignment: .center), + horizontalAlignment: .center, + maximumNumberOfLines: 0, + lineSpacing: 0.1 + ), + availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: context.availableSize.height), + transition: context.transition + ) + + let bottomText = bottomText.update( + component: MultilineTextComponent( + text: NSAttributedString(string: environment.strings.CreateExternalStream_StartStreamingInfo, font: Font.regular(15.0), textColor: environment.theme.list.itemSecondaryTextColor, paragraphAlignment: .center), + horizontalAlignment: .center, + maximumNumberOfLines: 0, + lineSpacing: 0.1 + ), + availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: context.availableSize.height), + transition: context.transition + ) + + let button = button.update( + component: SolidRoundedButtonComponent( + title: environment.strings.CreateExternalStream_StartStreaming, + theme: SolidRoundedButtonComponent.Theme(theme: environment.theme), + font: .bold, + fontSize: 17.0, + height: 50.0, + cornerRadius: 10.0, + gloss: true, + action: { [weak state] in + guard let state = state, let controller = controller() else { + return + } + + state.createAndJoinGroupCall(baseController: controller, completion: { [weak controller] in + controller?.dismiss() + }) + } + ), + availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: 50.0), + transition: context.transition + ) + + let credentialsItemHeight: CGFloat = 60.0 + let credentialsAreaSize = CGSize(width: context.availableSize.width - sideInset * 2.0, height: credentialsItemHeight * 2.0) + + context.add(background + .position(CGPoint(x: context.availableSize.width / 2.0, y: context.availableSize.height / 2.0)) + ) + + let animationFrame = CGRect(origin: CGPoint(x: floor((context.availableSize.width - animation.size.width) / 2.0), y: environment.navigationHeight + topInset), size: animation.size) + + context.add(animation + .position(CGPoint(x: animationFrame.midX, y: animationFrame.midY)) + ) + + let textFrame = CGRect(origin: CGPoint(x: floor((context.availableSize.width - text.size.width) / 2.0), y: animationFrame.maxY + 16.0), size: text.size) + + context.add(text + .position(CGPoint(x: textFrame.midX, y: textFrame.midY)) + ) + + let credentialsFrame = CGRect(origin: CGPoint(x: sideInset, y: textFrame.maxY + 30.0), size: credentialsAreaSize) + + if let credentials = context.state.credentials { + let credentialsURLTitle = credentialsURLTitle.update( + component: MultilineTextComponent( + text: NSAttributedString(string: environment.strings.CreateExternalStream_ServerUrl, font: Font.regular(14.0), textColor: environment.theme.list.itemPrimaryTextColor, paragraphAlignment: .left), + horizontalAlignment: .left, + maximumNumberOfLines: 1 + ), + availableSize: CGSize(width: credentialsAreaSize.width - credentialsSideInset * 2.0, height: credentialsAreaSize.height), + transition: context.transition + ) + + let credentialsKeyTitle = credentialsKeyTitle.update( + component: MultilineTextComponent( + text: NSAttributedString(string: environment.strings.CreateExternalStream_StreamKey, font: Font.regular(14.0), textColor: environment.theme.list.itemPrimaryTextColor, paragraphAlignment: .left), + horizontalAlignment: .left, + maximumNumberOfLines: 1 + ), + availableSize: CGSize(width: credentialsAreaSize.width - credentialsSideInset * 2.0, height: credentialsAreaSize.height), + transition: context.transition + ) + + let credentialsURLText = credentialsURLText.update( + component: MultilineTextComponent( + text: NSAttributedString(string: credentials.url, font: Font.regular(16.0), textColor: environment.theme.list.itemAccentColor, paragraphAlignment: .left), + horizontalAlignment: .left, + truncationType: .middle, + maximumNumberOfLines: 1 + ), + availableSize: CGSize(width: credentialsAreaSize.width - credentialsSideInset * 2.0 - 22.0, height: credentialsAreaSize.height), + transition: context.transition + ) + + let credentialsKeyText = credentialsKeyText.update( + component: MultilineTextComponent( + text: NSAttributedString(string: credentials.streamKey, font: Font.regular(16.0), textColor: environment.theme.list.itemAccentColor, paragraphAlignment: .left), + horizontalAlignment: .left, + truncationType: .middle, + maximumNumberOfLines: 1 + ), + availableSize: CGSize(width: credentialsAreaSize.width - credentialsSideInset * 2.0 - 22.0, height: credentialsAreaSize.height), + transition: context.transition + ) + + let credentialsBackground = credentialsBackground.update( + component: RoundedRectangle(color: environment.theme.list.itemBlocksBackgroundColor, cornerRadius: 10.0), + availableSize: credentialsAreaSize, + transition: context.transition + ) + + let credentialsStripe = credentialsStripe.update( + component: Rectangle(color: environment.theme.list.itemPlainSeparatorColor), + availableSize: CGSize(width: credentialsAreaSize.width - credentialsSideInset, height: UIScreenPixel), + transition: context.transition + ) + + let credentialsCopyURLButton = credentialsCopyURLButton.update( + component: Button( + content: AnyComponent(BundleIconComponent(name: "Chat/Context Menu/Copy", tintColor: environment.theme.list.itemAccentColor)), + action: { [weak state] in + guard let state = state else { + return + } + state.copyCredentials(\.url) + } + ).minSize(CGSize(width: 44.0, height: 44.0)), + availableSize: CGSize(width: 44.0, height: 44.0), + transition: context.transition + ) + + let credentialsCopyKeyButton = credentialsCopyKeyButton.update( + component: Button( + content: AnyComponent(BundleIconComponent(name: "Chat/Context Menu/Copy", tintColor: environment.theme.list.itemAccentColor)), + action: { [weak state] in + guard let state = state else { + return + } + state.copyCredentials(\.streamKey) + } + ).minSize(CGSize(width: 44.0, height: 44.0)), + availableSize: CGSize(width: 44.0, height: 44.0), + transition: context.transition + ) + + context.add(credentialsBackground + .position(CGPoint(x: credentialsFrame.midX, y: credentialsFrame.midY)) + ) + + context.add(credentialsStripe + .position(CGPoint(x: credentialsFrame.minX + credentialsSideInset + credentialsStripe.size.width / 2.0, y: credentialsFrame.minY + credentialsItemHeight)) + ) + + context.add(credentialsURLTitle + .position(CGPoint(x: credentialsFrame.minX + credentialsSideInset + credentialsURLTitle.size.width / 2.0, y: credentialsFrame.minY + credentialsTopInset + credentialsURLTitle.size.height / 2.0)) + ) + context.add(credentialsURLText + .position(CGPoint(x: credentialsFrame.minX + credentialsSideInset + credentialsURLText.size.width / 2.0, y: credentialsFrame.minY + credentialsTopInset + credentialsTitleSpacing + credentialsURLTitle.size.height + credentialsURLText.size.height / 2.0)) + ) + context.add(credentialsCopyURLButton + .position(CGPoint(x: credentialsFrame.maxX - 12.0 - credentialsCopyURLButton.size.width / 2.0, y: credentialsFrame.minY + credentialsItemHeight / 2.0)) + ) + + context.add(credentialsKeyTitle + .position(CGPoint(x: credentialsFrame.minX + credentialsSideInset + credentialsKeyTitle.size.width / 2.0, y: credentialsFrame.minY + credentialsItemHeight + credentialsTopInset + credentialsKeyTitle.size.height / 2.0)) + ) + context.add(credentialsKeyText + .position(CGPoint(x: credentialsFrame.minX + credentialsSideInset + credentialsKeyText.size.width / 2.0, y: credentialsFrame.minY + credentialsItemHeight + credentialsTopInset + credentialsTitleSpacing + credentialsKeyTitle.size.height + credentialsKeyText.size.height / 2.0)) + ) + context.add(credentialsCopyKeyButton + .position(CGPoint(x: credentialsFrame.maxX - 12.0 - credentialsCopyKeyButton.size.width / 2.0, y: credentialsFrame.minY + credentialsItemHeight + credentialsItemHeight / 2.0)) + ) + } else { + let activityIndicator = activityIndicator.update( + component: ActivityIndicatorComponent(color: environment.theme.list.controlSecondaryColor), + availableSize: CGSize(width: 100.0, height: 100.0), + transition: context.transition + ) + context.add(activityIndicator + .position(CGPoint(x: credentialsFrame.midX, y: credentialsFrame.midY)) + ) + } + + let buttonFrame = CGRect(origin: CGPoint(x: sideInset, y: context.availableSize.height - bottomInset - button.size.height), size: button.size) + + context.add(bottomText + .position(CGPoint(x: context.availableSize.width / 2.0, y: buttonFrame.minY - 14.0 - bottomText.size.height / 2.0)) + ) + + context.add(button + .position(CGPoint(x: buttonFrame.midX, y: buttonFrame.midY)) + ) + + return context.availableSize + } + } +} + +public final class CreateExternalMediaStreamScreen: ViewControllerComponentContainer { + private let context: AccountContext + private let peerId: EnginePeer.Id + + public init(context: AccountContext, peerId: EnginePeer.Id, credentialsPromise: Promise?) { + self.context = context + self.peerId = peerId + + super.init(context: context, component: CreateExternalMediaStreamScreenComponent(context: context, peerId: peerId, credentialsPromise: credentialsPromise), navigationBarAppearance: .transparent) + + self.navigationPresentation = .modal + + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + self.title = presentationData.strings.CreateExternalStream_Title + + self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: presentationData.strings.Common_Cancel, style: .plain, target: self, action: #selector(self.cancelPressed)) + + self.supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .portrait) + } + + required public init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @objc private func cancelPressed() { + self.dismiss() + } + + override public func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + override public func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + } +} diff --git a/submodules/SolidRoundedButtonNode/BUILD b/submodules/SolidRoundedButtonNode/BUILD index 96b30de710..414ad4772d 100644 --- a/submodules/SolidRoundedButtonNode/BUILD +++ b/submodules/SolidRoundedButtonNode/BUILD @@ -12,6 +12,7 @@ swift_library( deps = [ "//submodules/AsyncDisplayKit:AsyncDisplayKit", "//submodules/Display:Display", + "//submodules/Components/HierarchyTrackingLayer:HierarchyTrackingLayer", ], visibility = [ "//visibility:public", diff --git a/submodules/SolidRoundedButtonNode/Sources/SolidRoundedButtonNode.swift b/submodules/SolidRoundedButtonNode/Sources/SolidRoundedButtonNode.swift index eaca96a86b..816c2118ba 100644 --- a/submodules/SolidRoundedButtonNode/Sources/SolidRoundedButtonNode.swift +++ b/submodules/SolidRoundedButtonNode/Sources/SolidRoundedButtonNode.swift @@ -2,6 +2,7 @@ import Foundation import UIKit import AsyncDisplayKit import Display +import HierarchyTrackingLayer private func generateIndefiniteActivityIndicatorImage(color: UIColor, diameter: CGFloat = 22.0, lineWidth: CGFloat = 2.0) -> UIImage? { return generateImage(CGSize(width: diameter, height: diameter), rotatedContext: { size, context in @@ -15,7 +16,7 @@ private func generateIndefiniteActivityIndicatorImage(color: UIColor, diameter: }) } -public final class SolidRoundedButtonTheme { +public final class SolidRoundedButtonTheme: Equatable { public let backgroundColor: UIColor public let gradientBackgroundColor: UIColor? public let foregroundColor: UIColor @@ -25,6 +26,19 @@ public final class SolidRoundedButtonTheme { self.gradientBackgroundColor = gradientBackgroundColor self.foregroundColor = foregroundColor } + + public static func ==(lhs: SolidRoundedButtonTheme, rhs: SolidRoundedButtonTheme) -> Bool { + if lhs.backgroundColor != rhs.backgroundColor { + return false + } + if lhs.gradientBackgroundColor != rhs.gradientBackgroundColor { + return false + } + if lhs.foregroundColor != rhs.foregroundColor { + return false + } + return true + } } public enum SolidRoundedButtonFont { @@ -38,7 +52,7 @@ public final class SolidRoundedButtonNode: ASDisplayNode { private var fontSize: CGFloat private let buttonBackgroundNode: ASDisplayNode - private let buttonGlossNode: SolidRoundedButtonGlossNode? + private let buttonGlossView: SolidRoundedButtonGlossView? private let buttonNode: HighlightTrackingButtonNode private let titleNode: ImmediateTextNode private let subtitleNode: ImmediateTextNode @@ -95,9 +109,9 @@ public final class SolidRoundedButtonNode: ASDisplayNode { self.buttonBackgroundNode.cornerRadius = cornerRadius if gloss { - self.buttonGlossNode = SolidRoundedButtonGlossNode(color: theme.foregroundColor, cornerRadius: cornerRadius) + self.buttonGlossView = SolidRoundedButtonGlossView(color: theme.foregroundColor, cornerRadius: cornerRadius) } else { - self.buttonGlossNode = nil + self.buttonGlossView = nil } self.buttonNode = HighlightTrackingButtonNode() @@ -116,8 +130,8 @@ public final class SolidRoundedButtonNode: ASDisplayNode { super.init() self.addSubnode(self.buttonBackgroundNode) - if let buttonGlossNode = self.buttonGlossNode { - self.addSubnode(buttonGlossNode) + if let buttonGlossView = self.buttonGlossView { + self.view.addSubview(buttonGlossView) } self.addSubnode(self.buttonNode) self.addSubnode(self.titleNode) @@ -211,7 +225,7 @@ public final class SolidRoundedButtonNode: ASDisplayNode { self.theme = theme self.buttonBackgroundNode.backgroundColor = theme.backgroundColor - self.buttonGlossNode?.color = theme.foregroundColor + self.buttonGlossView?.color = theme.foregroundColor self.titleNode.attributedText = NSAttributedString(string: self.title ?? "", font: self.font == .bold ? Font.semibold(self.fontSize) : Font.regular(self.fontSize), textColor: theme.foregroundColor) self.subtitleNode.attributedText = NSAttributedString(string: self.subtitle ?? "", font: Font.regular(14.0), textColor: theme.foregroundColor) @@ -237,8 +251,8 @@ public final class SolidRoundedButtonNode: ASDisplayNode { let buttonSize = CGSize(width: width, height: self.buttonHeight) let buttonFrame = CGRect(origin: CGPoint(), size: buttonSize) transition.updateFrame(node: self.buttonBackgroundNode, frame: buttonFrame) - if let buttonGlossNode = self.buttonGlossNode { - transition.updateFrame(node: buttonGlossNode, frame: buttonFrame) + if let buttonGlossView = self.buttonGlossView { + transition.updateFrame(view: buttonGlossView, frame: buttonFrame) } transition.updateFrame(node: self.buttonNode, frame: buttonFrame) @@ -289,7 +303,257 @@ public final class SolidRoundedButtonNode: ASDisplayNode { } } -private final class SolidRoundedButtonGlossNodeParameters: NSObject { +public final class SolidRoundedButtonView: UIView { + private var theme: SolidRoundedButtonTheme + private var font: SolidRoundedButtonFont + private var fontSize: CGFloat + + private let buttonBackgroundNode: UIView + private let buttonGlossView: SolidRoundedButtonGlossView? + private let buttonNode: HighlightTrackingButton + private let titleNode: ImmediateTextView + private let subtitleNode: ImmediateTextView + private let iconNode: UIImageView + private var progressNode: UIImageView? + + private let buttonHeight: CGFloat + private let buttonCornerRadius: CGFloat + + public var pressed: (() -> Void)? + public var validLayout: CGFloat? + + public var title: String? { + didSet { + if let width = self.validLayout { + _ = self.updateLayout(width: width, transition: .immediate) + } + } + } + + public var subtitle: String? { + didSet { + if let width = self.validLayout { + _ = self.updateLayout(width: width, previousSubtitle: oldValue, transition: .immediate) + } + } + } + + public var icon: UIImage? { + didSet { + self.iconNode.image = generateTintedImage(image: self.icon, color: self.theme.foregroundColor) + } + } + + public var iconSpacing: CGFloat = 8.0 { + didSet { + if let width = self.validLayout { + _ = self.updateLayout(width: width, transition: .immediate) + } + } + } + + public init(title: String? = nil, icon: UIImage? = nil, theme: SolidRoundedButtonTheme, font: SolidRoundedButtonFont = .bold, fontSize: CGFloat = 17.0, height: CGFloat = 48.0, cornerRadius: CGFloat = 24.0, gloss: Bool = false) { + self.theme = theme + self.font = font + self.fontSize = fontSize + self.buttonHeight = height + self.buttonCornerRadius = cornerRadius + self.title = title + + self.buttonBackgroundNode = UIView() + self.buttonBackgroundNode.clipsToBounds = true + self.buttonBackgroundNode.backgroundColor = theme.backgroundColor + self.buttonBackgroundNode.layer.cornerRadius = cornerRadius + + if gloss { + self.buttonGlossView = SolidRoundedButtonGlossView(color: theme.foregroundColor, cornerRadius: cornerRadius) + } else { + self.buttonGlossView = nil + } + + self.buttonNode = HighlightTrackingButton() + + self.titleNode = ImmediateTextView() + self.titleNode.isUserInteractionEnabled = false + + self.subtitleNode = ImmediateTextView() + self.subtitleNode.isUserInteractionEnabled = false + + self.iconNode = UIImageView() + self.iconNode.image = generateTintedImage(image: icon, color: self.theme.foregroundColor) + + super.init(frame: CGRect()) + + self.addSubview(self.buttonBackgroundNode) + if let buttonGlossView = self.buttonGlossView { + self.addSubview(buttonGlossView) + } + self.addSubview(self.buttonNode) + self.addSubview(self.titleNode) + self.addSubview(self.subtitleNode) + self.addSubview(self.iconNode) + + self.buttonNode.addTarget(self, action: #selector(self.buttonPressed), for: .touchUpInside) + + self.buttonNode.highligthedChanged = { [weak self] highlighted in + if let strongSelf = self { + if highlighted { + strongSelf.buttonBackgroundNode.layer.removeAnimation(forKey: "opacity") + strongSelf.buttonBackgroundNode.alpha = 0.55 + strongSelf.titleNode.layer.removeAnimation(forKey: "opacity") + strongSelf.titleNode.alpha = 0.55 + strongSelf.subtitleNode.layer.removeAnimation(forKey: "opacity") + strongSelf.subtitleNode.alpha = 0.55 + strongSelf.iconNode.layer.removeAnimation(forKey: "opacity") + strongSelf.iconNode.alpha = 0.55 + } else { + if strongSelf.buttonBackgroundNode.alpha > 0.0 { + strongSelf.buttonBackgroundNode.alpha = 1.0 + strongSelf.buttonBackgroundNode.layer.animateAlpha(from: 0.55, to: 1.0, duration: 0.2) + strongSelf.titleNode.alpha = 1.0 + strongSelf.titleNode.layer.animateAlpha(from: 0.55, to: 1.0, duration: 0.2) + strongSelf.subtitleNode.alpha = 1.0 + strongSelf.subtitleNode.layer.animateAlpha(from: 0.55, to: 1.0, duration: 0.2) + strongSelf.iconNode.alpha = 1.0 + strongSelf.iconNode.layer.animateAlpha(from: 0.55, to: 1.0, duration: 0.2) + } + } + } + } + + if #available(iOS 13.0, *) { + self.buttonBackgroundNode.layer.cornerCurve = .continuous + } + } + + required public init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func transitionToProgress() { + guard self.progressNode == nil else { + return + } + + self.isUserInteractionEnabled = false + + let buttonOffset = self.buttonBackgroundNode.frame.minX + let buttonWidth = self.buttonBackgroundNode.frame.width + + let progressFrame = CGRect(origin: CGPoint(x: floorToScreenPixels(buttonOffset + (buttonWidth - self.buttonHeight) / 2.0), y: 0.0), size: CGSize(width: self.buttonHeight, height: self.buttonHeight)) + let progressNode = UIImageView() + progressNode.frame = progressFrame + progressNode.image = generateIndefiniteActivityIndicatorImage(color: self.buttonBackgroundNode.backgroundColor ?? .clear, diameter: self.buttonHeight, lineWidth: 2.0 + UIScreenPixel) + self.insertSubview(progressNode, at: 0) + self.progressNode = progressNode + + let basicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") + basicAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) + basicAnimation.duration = 0.5 + basicAnimation.fromValue = NSNumber(value: Float(0.0)) + basicAnimation.toValue = NSNumber(value: Float.pi * 2.0) + basicAnimation.repeatCount = Float.infinity + basicAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) + basicAnimation.beginTime = 1.0 + progressNode.layer.add(basicAnimation, forKey: "progressRotation") + + self.buttonBackgroundNode.layer.cornerRadius = self.buttonHeight / 2.0 + self.buttonBackgroundNode.layer.animate(from: self.buttonCornerRadius as NSNumber, to: self.buttonHeight / 2.0 as NSNumber, keyPath: "cornerRadius", timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, duration: 0.2) + self.buttonBackgroundNode.layer.animateFrame(from: self.buttonBackgroundNode.frame, to: progressFrame, duration: 0.2) + + self.buttonBackgroundNode.alpha = 0.0 + self.buttonBackgroundNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2, removeOnCompletion: false) + + progressNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2, removeOnCompletion: false) + + self.titleNode.alpha = 0.0 + self.titleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2) + + self.subtitleNode.alpha = 0.0 + self.subtitleNode.layer.animateAlpha(from: 0.55, to: 0.0, duration: 0.2) + } + + public func updateTheme(_ theme: SolidRoundedButtonTheme) { + guard theme !== self.theme else { + return + } + self.theme = theme + + self.buttonBackgroundNode.backgroundColor = theme.backgroundColor + self.buttonGlossView?.color = theme.foregroundColor + self.titleNode.attributedText = NSAttributedString(string: self.title ?? "", font: self.font == .bold ? Font.semibold(self.fontSize) : Font.regular(self.fontSize), textColor: theme.foregroundColor) + self.subtitleNode.attributedText = NSAttributedString(string: self.subtitle ?? "", font: Font.regular(14.0), textColor: theme.foregroundColor) + + self.iconNode.image = generateTintedImage(image: self.iconNode.image, color: theme.foregroundColor) + + if let width = self.validLayout { + _ = self.updateLayout(width: width, transition: .immediate) + } + } + + public func updateLayout(width: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat { + return self.updateLayout(width: width, previousSubtitle: self.subtitle, transition: transition) + } + + private func updateLayout(width: CGFloat, previousSubtitle: String?, transition: ContainedViewLayoutTransition) -> CGFloat { + self.validLayout = width + + let buttonSize = CGSize(width: width, height: self.buttonHeight) + let buttonFrame = CGRect(origin: CGPoint(), size: buttonSize) + transition.updateFrame(view: self.buttonBackgroundNode, frame: buttonFrame) + if let buttonGlossView = self.buttonGlossView { + transition.updateFrame(view: buttonGlossView, frame: buttonFrame) + } + transition.updateFrame(view: self.buttonNode, frame: buttonFrame) + + if self.title != self.titleNode.attributedText?.string { + self.titleNode.attributedText = NSAttributedString(string: self.title ?? "", font: self.font == .bold ? Font.semibold(self.fontSize) : Font.regular(self.fontSize), textColor: self.theme.foregroundColor) + } + + let iconSize = self.iconNode.image?.size ?? CGSize() + let titleSize = self.titleNode.updateLayout(buttonSize) + + let iconSpacing: CGFloat = self.iconSpacing + + var contentWidth: CGFloat = titleSize.width + if !iconSize.width.isZero { + contentWidth += iconSize.width + iconSpacing + } + var nextContentOrigin = floor((buttonFrame.width - contentWidth) / 2.0) + transition.updateFrame(view: self.iconNode, frame: CGRect(origin: CGPoint(x: buttonFrame.minX + nextContentOrigin, y: floor((buttonFrame.height - iconSize.height) / 2.0)), size: iconSize)) + if !iconSize.width.isZero { + nextContentOrigin += iconSize.width + iconSpacing + } + + let spacingOffset: CGFloat = 9.0 + let verticalInset: CGFloat = self.subtitle == nil ? floor((buttonFrame.height - titleSize.height) / 2.0) : floor((buttonFrame.height - titleSize.height) / 2.0) - spacingOffset + + let titleFrame = CGRect(origin: CGPoint(x: buttonFrame.minX + nextContentOrigin, y: buttonFrame.minY + verticalInset), size: titleSize) + transition.updateFrame(view: self.titleNode, frame: titleFrame) + + if self.subtitle != self.subtitleNode.attributedText?.string { + self.subtitleNode.attributedText = NSAttributedString(string: self.subtitle ?? "", font: Font.regular(14.0), textColor: self.theme.foregroundColor) + } + + let subtitleSize = self.subtitleNode.updateLayout(buttonSize) + let subtitleFrame = CGRect(origin: CGPoint(x: buttonFrame.minX + floor((buttonFrame.width - subtitleSize.width) / 2.0), y: buttonFrame.minY + floor((buttonFrame.height - titleSize.height) / 2.0) + spacingOffset + 2.0), size: subtitleSize) + transition.updateFrame(view: self.subtitleNode, frame: subtitleFrame) + + if previousSubtitle == nil && self.subtitle != nil { + self.titleNode.layer.animatePosition(from: CGPoint(x: 0.0, y: spacingOffset / 2.0), to: CGPoint(), duration: 0.3, additive: true) + self.subtitleNode.layer.animatePosition(from: CGPoint(x: 0.0, y: -spacingOffset / 2.0), to: CGPoint(), duration: 0.3, additive: true) + self.subtitleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + } + + return buttonSize.height + } + + @objc private func buttonPressed() { + self.pressed?() + } +} + +private final class SolidRoundedButtonGlossViewParameters: NSObject { let gradientColors: NSArray? let cornerRadius: CGFloat let progress: CGFloat @@ -301,7 +565,7 @@ private final class SolidRoundedButtonGlossNodeParameters: NSObject { } } -public final class SolidRoundedButtonGlossNode: ASDisplayNode { +public final class SolidRoundedButtonGlossView: UIView { public var color: UIColor { didSet { self.updateGradientColors() @@ -313,14 +577,19 @@ public final class SolidRoundedButtonGlossNode: ASDisplayNode { private let buttonCornerRadius: CGFloat private var gradientColors: NSArray? + private let trackingLayer: HierarchyTrackingLayer + public init(color: UIColor, cornerRadius: CGFloat) { self.color = color self.buttonCornerRadius = cornerRadius - super.init() + self.trackingLayer = HierarchyTrackingLayer() + + super.init(frame: CGRect()) + + self.layer.addSublayer(self.trackingLayer) self.isOpaque = false - self.isLayerBacked = true var previousTime: CFAbsoluteTime? self.animator = ConstantDisplayLinkAnimator(update: { [weak self] in @@ -347,41 +616,48 @@ public final class SolidRoundedButtonGlossNode: ASDisplayNode { }) self.updateGradientColors() + + self.trackingLayer.didEnterHierarchy = { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.animator?.isPaused = false + } + + self.trackingLayer.didExitHierarchy = { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.animator?.isPaused = true + } + } + + required public init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") } private func updateGradientColors() { let transparentColor = self.color.withAlphaComponent(0.0).cgColor self.gradientColors = [transparentColor, transparentColor, self.color.withAlphaComponent(0.12).cgColor, transparentColor, transparentColor] } - - override public func willEnterHierarchy() { - super.willEnterHierarchy() - self.animator?.isPaused = false - } - - override public func didExitHierarchy() { - super.didExitHierarchy() - self.animator?.isPaused = true - } - - override public func drawParameters(forAsyncLayer layer: _ASDisplayLayer) -> NSObjectProtocol? { - return SolidRoundedButtonGlossNodeParameters(gradientColors: self.gradientColors, cornerRadius: self.buttonCornerRadius, progress: self.progress) - } - - @objc override public class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) { + + override public func draw(_ rect: CGRect) { + let parameters = SolidRoundedButtonGlossViewParameters(gradientColors: self.gradientColors, cornerRadius: self.buttonCornerRadius, progress: self.progress) + guard let gradientColors = parameters.gradientColors else { + return + } + let context = UIGraphicsGetCurrentContext()! - if let parameters = parameters as? SolidRoundedButtonGlossNodeParameters, let gradientColors = parameters.gradientColors { - let path = UIBezierPath(roundedRect: bounds, cornerRadius: parameters.cornerRadius) - context.addPath(path.cgPath) - context.clip() - - var locations: [CGFloat] = [0.0, 0.15, 0.5, 0.85, 1.0] - let colorSpace = CGColorSpaceCreateDeviceRGB() - let gradient = CGGradient(colorsSpace: colorSpace, colors: gradientColors, locations: &locations)! - - let x = -4.0 * bounds.size.width + 8.0 * bounds.size.width * parameters.progress - context.drawLinearGradient(gradient, start: CGPoint(x: x, y: 0.0), end: CGPoint(x: x + bounds.size.width, y: 0.0), options: CGGradientDrawingOptions()) - } + let path = UIBezierPath(roundedRect: bounds, cornerRadius: parameters.cornerRadius) + context.addPath(path.cgPath) + context.clip() + + var locations: [CGFloat] = [0.0, 0.15, 0.5, 0.85, 1.0] + let colorSpace = CGColorSpaceCreateDeviceRGB() + let gradient = CGGradient(colorsSpace: colorSpace, colors: gradientColors, locations: &locations)! + + let x = -4.0 * bounds.size.width + 8.0 * bounds.size.width * parameters.progress + context.drawLinearGradient(gradient, start: CGPoint(x: x, y: 0.0), end: CGPoint(x: x + bounds.size.width, y: 0.0), options: CGGradientDrawingOptions()) } } diff --git a/submodules/TelegramCallsUI/BUILD b/submodules/TelegramCallsUI/BUILD index 591d757de4..7077cca007 100644 --- a/submodules/TelegramCallsUI/BUILD +++ b/submodules/TelegramCallsUI/BUILD @@ -98,6 +98,9 @@ swift_library( "//submodules/ComponentFlow:ComponentFlow", "//submodules/Components/LottieAnimationComponent:LottieAnimationComponent", "//submodules/Components/ActivityIndicatorComponent:ActivityIndicatorComponent", + "//submodules/Components/ViewControllerComponent:ViewControllerComponent", + "//submodules/Components/BundleIconComponent:BundleIconComponent", + "//submodules/Components/MultilineTextComponent:MultilineTextComponent", ], visibility = [ "//visibility:public", diff --git a/submodules/TelegramCallsUI/Sources/Components/MediaStreamComponent.swift b/submodules/TelegramCallsUI/Sources/Components/MediaStreamComponent.swift index 3be60b54c7..5df799a69a 100644 --- a/submodules/TelegramCallsUI/Sources/Components/MediaStreamComponent.swift +++ b/submodules/TelegramCallsUI/Sources/Components/MediaStreamComponent.swift @@ -12,6 +12,8 @@ import UndoUI import TelegramPresentationData import LottieAnimationComponent import ContextUI +import ViewControllerComponent +import BundleIconComponent final class NavigationBackButtonComponent: Component { let text: String @@ -97,61 +99,6 @@ final class NavigationBackButtonComponent: Component { } } -final class BundleIconComponent: Component { - let name: String - let tintColor: UIColor? - - init(name: String, tintColor: UIColor?) { - self.name = name - self.tintColor = tintColor - } - - static func ==(lhs: BundleIconComponent, rhs: BundleIconComponent) -> Bool { - if lhs.name != rhs.name { - return false - } - if lhs.tintColor != rhs.tintColor { - return false - } - return false - } - - public final class View: UIImageView { - private var component: BundleIconComponent? - - override init(frame: CGRect) { - super.init(frame: frame) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func update(component: BundleIconComponent, availableSize: CGSize, transition: Transition) -> CGSize { - if self.component?.name != component.name || self.component?.tintColor != component.tintColor { - if let tintColor = component.tintColor { - self.image = generateTintedImage(image: UIImage(bundleImageName: component.name), color: tintColor, backgroundColor: nil) - } else { - self.image = UIImage(bundleImageName: component.name) - } - } - self.component = component - - let imageSize = self.image?.size ?? CGSize() - - return CGSize(width: min(imageSize.width, availableSize.width), height: min(imageSize.height, availableSize.height)) - } - } - - public func makeView() -> View { - return View(frame: CGRect()) - } - - public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { - return view.update(component: self, availableSize: availableSize, transition: transition) - } -} - private final class NavigationBarComponent: CombinedComponent { let topInset: CGFloat let sideInset: CGFloat @@ -206,7 +153,7 @@ private final class NavigationBarComponent: CombinedComponent { let contentHeight: CGFloat = 44.0 let size = CGSize(width: context.availableSize.width, height: context.component.topInset + contentHeight) - let background = background.update(component: Rectangle(color: UIColor(white: 0.0, alpha: 0.0)), availableSize: CGSize(width: size.width, height: size.height), transition: context.transition) + let background = background.update(component: Rectangle(color: UIColor(white: 0.0, alpha: 0.5)), availableSize: CGSize(width: size.width, height: size.height), transition: context.transition) let leftItem = context.component.leftItem.flatMap { leftItemComponent in return leftItem.update( @@ -389,7 +336,7 @@ private final class ToolbarComponent: CombinedComponent { let contentHeight: CGFloat = 44.0 let size = CGSize(width: context.availableSize.width, height: contentHeight + context.component.bottomInset) - let background = background.update(component: Rectangle(color: UIColor(white: 0.0, alpha: 0.0)), availableSize: CGSize(width: size.width, height: size.height), transition: context.transition) + let background = background.update(component: Rectangle(color: UIColor(white: 0.0, alpha: 0.5)), availableSize: CGSize(width: size.width, height: size.height), transition: context.transition) let leftItem = context.component.leftItem.flatMap { leftItemComponent in return leftItem.update( @@ -495,6 +442,8 @@ public final class MediaStreamComponent: CombinedComponent { private(set) var canManageCall: Bool = false let isPictureInPictureSupported: Bool + private(set) var peerTitle: String = "" + private(set) var isVisibleInHierarchy: Bool = false private var isVisibleInHierarchyDisposable: Disposable? @@ -545,6 +494,10 @@ public final class MediaStreamComponent: CombinedComponent { strongSelf.canManageCall = state.canManageCall updated = true } + if strongSelf.peerTitle != callPeer.debugDisplayTitle { + strongSelf.peerTitle = callPeer.debugDisplayTitle + updated = true + } let originInfo = OriginInfo(title: callPeer.debugDisplayTitle, memberCount: members.totalCount) if strongSelf.originInfo != originInfo { @@ -647,6 +600,8 @@ public final class MediaStreamComponent: CombinedComponent { call: context.component.call, hasVideo: context.state.hasVideo, isVisible: environment.isVisible && context.state.isVisibleInHierarchy, + isAdmin: context.state.canManageCall, + peerTitle: context.state.peerTitle, activatePictureInPicture: activatePictureInPicture, bringBackControllerForPictureInPictureDeactivation: { [weak call] completed in guard let call = call else { @@ -924,7 +879,7 @@ public final class MediaStreamComponentController: ViewControllerComponentContai self.context = call.accountContext self.call = call - super.init(context: call.accountContext, component: MediaStreamComponent(call: call as! PresentationGroupCallImpl)) + super.init(context: call.accountContext, component: MediaStreamComponent(call: call as! PresentationGroupCallImpl), navigationBarAppearance: .none) self.statusBar.statusBarStyle = .White self.view.disablesInteractiveModalDismiss = true diff --git a/submodules/TelegramCallsUI/Sources/Components/MediaStreamVideoComponent.swift b/submodules/TelegramCallsUI/Sources/Components/MediaStreamVideoComponent.swift index 407d821acd..cba30e1df5 100644 --- a/submodules/TelegramCallsUI/Sources/Components/MediaStreamVideoComponent.swift +++ b/submodules/TelegramCallsUI/Sources/Components/MediaStreamVideoComponent.swift @@ -4,18 +4,24 @@ import ComponentFlow import ActivityIndicatorComponent import AccountContext import AVKit +import MultilineTextComponent +import Display final class MediaStreamVideoComponent: Component { let call: PresentationGroupCallImpl let hasVideo: Bool let isVisible: Bool + let isAdmin: Bool + let peerTitle: String let activatePictureInPicture: ActionSlot> let bringBackControllerForPictureInPictureDeactivation: (@escaping () -> Void) -> Void - init(call: PresentationGroupCallImpl, hasVideo: Bool, isVisible: Bool, activatePictureInPicture: ActionSlot>, bringBackControllerForPictureInPictureDeactivation: @escaping (@escaping () -> Void) -> Void) { + init(call: PresentationGroupCallImpl, hasVideo: Bool, isVisible: Bool, isAdmin: Bool, peerTitle: String, activatePictureInPicture: ActionSlot>, bringBackControllerForPictureInPictureDeactivation: @escaping (@escaping () -> Void) -> Void) { self.call = call self.hasVideo = hasVideo self.isVisible = isVisible + self.isAdmin = isAdmin + self.peerTitle = peerTitle self.activatePictureInPicture = activatePictureInPicture self.bringBackControllerForPictureInPictureDeactivation = bringBackControllerForPictureInPictureDeactivation } @@ -30,6 +36,12 @@ final class MediaStreamVideoComponent: Component { if lhs.isVisible != rhs.isVisible { return false } + if lhs.isAdmin != rhs.isAdmin { + return false + } + if lhs.peerTitle != rhs.peerTitle { + return false + } return true } @@ -44,33 +56,30 @@ final class MediaStreamVideoComponent: Component { return State() } - public final class View: UIView, AVPictureInPictureControllerDelegate, ComponentTaggedView { + public final class View: UIScrollView, AVPictureInPictureControllerDelegate, ComponentTaggedView { public final class Tag { } private let videoRenderingContext = VideoRenderingContext() private var videoView: VideoRenderingView? - private let blurTintView: UIView - private var videoBlurView: VideoRenderingView? private var activityIndicatorView: ComponentHostView? + private var noSignalView: ComponentHostView? private var pictureInPictureController: AVPictureInPictureController? private var component: MediaStreamVideoComponent? private var hadVideo: Bool = false + private var noSignalTimer: Timer? + private var noSignalTimeout: Bool = false + private weak var state: State? override init(frame: CGRect) { - self.blurTintView = UIView() - self.blurTintView.backgroundColor = UIColor(white: 0.0, alpha: 0.55) - super.init(frame: frame) self.isUserInteractionEnabled = false self.clipsToBounds = true - - self.addSubview(self.blurTintView) } required init?(coder: NSCoder) { @@ -93,48 +102,49 @@ final class MediaStreamVideoComponent: Component { if component.hasVideo, self.videoView == nil { if let input = component.call.video(endpointId: "unified") { - if let videoBlurView = self.videoRenderingContext.makeView(input: input, blur: true) { - self.videoBlurView = videoBlurView - self.insertSubview(videoBlurView, belowSubview: self.blurTintView) - } - if let videoView = self.videoRenderingContext.makeView(input: input, blur: false, forceSampleBufferDisplayLayer: true) { self.videoView = videoView self.addSubview(videoView) - if #available(iOSApplicationExtension 15.0, iOS 15.0, *), AVPictureInPictureController.isPictureInPictureSupported(), let sampleBufferVideoView = videoView as? SampleBufferVideoRenderingView { - final class PlaybackDelegateImpl: NSObject, AVPictureInPictureSampleBufferPlaybackDelegate { - func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, setPlaying playing: Bool) { - - } - - func pictureInPictureControllerTimeRangeForPlayback(_ pictureInPictureController: AVPictureInPictureController) -> CMTimeRange { - return CMTimeRange(start: .zero, duration: .positiveInfinity) - } - - func pictureInPictureControllerIsPlaybackPaused(_ pictureInPictureController: AVPictureInPictureController) -> Bool { - return false - } - - func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, didTransitionToRenderSize newRenderSize: CMVideoDimensions) { - } - - func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, skipByInterval skipInterval: CMTime, completion completionHandler: @escaping () -> Void) { - completionHandler() - } - - public func pictureInPictureControllerShouldProhibitBackgroundAudioPlayback(_ pictureInPictureController: AVPictureInPictureController) -> Bool { - return false - } + if let sampleBufferVideoView = videoView as? SampleBufferVideoRenderingView { + if #available(iOS 13.0, *) { + sampleBufferVideoView.sampleBufferLayer.preventsDisplaySleepDuringVideoPlayback = true } - let pictureInPictureController = AVPictureInPictureController(contentSource: AVPictureInPictureController.ContentSource(sampleBufferDisplayLayer: sampleBufferVideoView.sampleBufferLayer, playbackDelegate: PlaybackDelegateImpl())) - - pictureInPictureController.delegate = self - pictureInPictureController.canStartPictureInPictureAutomaticallyFromInline = true - pictureInPictureController.requiresLinearPlayback = true - - self.pictureInPictureController = pictureInPictureController + if #available(iOSApplicationExtension 15.0, iOS 15.0, *), AVPictureInPictureController.isPictureInPictureSupported() { + final class PlaybackDelegateImpl: NSObject, AVPictureInPictureSampleBufferPlaybackDelegate { + func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, setPlaying playing: Bool) { + + } + + func pictureInPictureControllerTimeRangeForPlayback(_ pictureInPictureController: AVPictureInPictureController) -> CMTimeRange { + return CMTimeRange(start: .zero, duration: .positiveInfinity) + } + + func pictureInPictureControllerIsPlaybackPaused(_ pictureInPictureController: AVPictureInPictureController) -> Bool { + return false + } + + func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, didTransitionToRenderSize newRenderSize: CMVideoDimensions) { + } + + func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, skipByInterval skipInterval: CMTime, completion completionHandler: @escaping () -> Void) { + completionHandler() + } + + public func pictureInPictureControllerShouldProhibitBackgroundAudioPlayback(_ pictureInPictureController: AVPictureInPictureController) -> Bool { + return false + } + } + + let pictureInPictureController = AVPictureInPictureController(contentSource: AVPictureInPictureController.ContentSource(sampleBufferDisplayLayer: sampleBufferVideoView.sampleBufferLayer, playbackDelegate: PlaybackDelegateImpl())) + + pictureInPictureController.delegate = self + pictureInPictureController.canStartPictureInPictureAutomaticallyFromInline = true + pictureInPictureController.requiresLinearPlayback = true + + self.pictureInPictureController = pictureInPictureController + } } videoView.setOnOrientationUpdated { [weak state] _, _ in @@ -146,9 +156,19 @@ final class MediaStreamVideoComponent: Component { } strongSelf.hadVideo = true + strongSelf.activityIndicatorView?.removeFromSuperview() strongSelf.activityIndicatorView = nil + strongSelf.noSignalTimer?.invalidate() + strongSelf.noSignalTimer = nil + strongSelf.noSignalTimeout = false + strongSelf.noSignalView?.removeFromSuperview() + strongSelf.noSignalView = nil + + //strongSelf.translatesAutoresizingMaskIntoConstraints = false + //strongSelf.maximumZoomScale = 4.0 + state?.updated(transition: .immediate) } } @@ -171,15 +191,8 @@ final class MediaStreamVideoComponent: Component { } let videoSize = CGSize(width: aspect * 100.0, height: 100.0).aspectFitted(availableSize) - let blurredVideoSize = videoSize.aspectFilled(availableSize) transition.withAnimation(.none).setFrame(view: videoView, frame: CGRect(origin: CGPoint(x: floor((availableSize.width - videoSize.width) / 2.0), y: floor((availableSize.height - videoSize.height) / 2.0)), size: videoSize), completion: nil) - - if let videoBlurView = self.videoBlurView { - videoBlurView.updateIsEnabled(component.isVisible) - - transition.withAnimation(.none).setFrame(view: videoBlurView, frame: CGRect(origin: CGPoint(x: floor((availableSize.width - blurredVideoSize.width) / 2.0), y: floor((availableSize.height - blurredVideoSize.height) / 2.0)), size: blurredVideoSize), completion: nil) - } } if !self.hadVideo { @@ -196,11 +209,53 @@ final class MediaStreamVideoComponent: Component { let activityIndicatorSize = activityIndicatorView.update( transition: transition, - component: AnyComponent(ActivityIndicatorComponent()), + component: AnyComponent(ActivityIndicatorComponent(color: .white)), environment: {}, containerSize: CGSize(width: 100.0, height: 100.0) ) - activityIndicatorTransition.setFrame(view: activityIndicatorView, frame: CGRect(origin: CGPoint(x: floor((availableSize.width - activityIndicatorSize.width) / 2.0), y: floor((availableSize.height - activityIndicatorSize.height) / 2.0)), size: activityIndicatorSize), completion: nil) + let activityIndicatorFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - activityIndicatorSize.width) / 2.0), y: floor((availableSize.height - activityIndicatorSize.height) / 2.0)), size: activityIndicatorSize) + activityIndicatorTransition.setFrame(view: activityIndicatorView, frame: activityIndicatorFrame, completion: nil) + + if self.noSignalTimer == nil { + if #available(iOS 10.0, *) { + let noSignalTimer = Timer(timeInterval: 20.0, repeats: false, block: { [weak self] _ in + guard let strongSelf = self else { + return + } + strongSelf.noSignalTimeout = true + strongSelf.state?.updated(transition: .immediate) + }) + self.noSignalTimer = noSignalTimer + RunLoop.main.add(noSignalTimer, forMode: .common) + } + } + + if self.noSignalTimeout { + var noSignalTransition = transition + let noSignalView: ComponentHostView + if let current = self.noSignalView { + noSignalView = current + } else { + noSignalTransition = transition.withAnimation(.none) + noSignalView = ComponentHostView() + self.noSignalView = noSignalView + self.addSubview(noSignalView) + noSignalView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + } + + let presentationData = component.call.accountContext.sharedContext.currentPresentationData.with { $0 } + let noSignalSize = noSignalView.update( + transition: transition, + component: AnyComponent(MultilineTextComponent( + text: NSAttributedString(string: component.isAdmin ? presentationData.strings.LiveStream_NoSignalAdminText : presentationData.strings.LiveStream_NoSignalUserText(component.peerTitle).string, font: Font.regular(16.0), textColor: .white, paragraphAlignment: .center), + horizontalAlignment: .center, + maximumNumberOfLines: 0 + )), + environment: {}, + containerSize: CGSize(width: availableSize.width - 16.0 * 2.0, height: 1000.0) + ) + noSignalTransition.setFrame(view: noSignalView, frame: CGRect(origin: CGPoint(x: floor((availableSize.width - noSignalSize.width) / 2.0), y: activityIndicatorFrame.maxY + 24.0), size: noSignalSize), completion: nil) + } } self.component = component diff --git a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift index 584a7806f5..87b101f453 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift @@ -273,6 +273,168 @@ private extension PresentationGroupCallState { } } +private enum CurrentImpl { + case call(OngoingGroupCallContext) + case mediaStream(WrappedMediaStreamingContext) +} + +private extension CurrentImpl { + var joinPayload: Signal<(String, UInt32), NoError> { + switch self { + case let .call(callContext): + return callContext.joinPayload + case .mediaStream: + let ssrcId = UInt32.random(in: 0 ..< UInt32(Int32.max - 1)) + let dict: [String: Any] = [ + "fingerprints": [], + "ufrag": "", + "pwd": "", + "ssrc": Int32(bitPattern: ssrcId), + "ssrc-groups": [] + ] + guard let jsonString = (try? JSONSerialization.data(withJSONObject: dict, options: [])).flatMap({ String(data: $0, encoding: .utf8) }) else { + return .never() + } + return .single((jsonString, ssrcId)) + } + } + + var networkState: Signal { + switch self { + case let .call(callContext): + return callContext.networkState + case .mediaStream: + return .single(OngoingGroupCallContext.NetworkState(isConnected: true, isTransitioningFromBroadcastToRtc: false)) + } + } + + var audioLevels: Signal<[(OngoingGroupCallContext.AudioLevelKey, Float, Bool)], NoError> { + switch self { + case let .call(callContext): + return callContext.audioLevels + case .mediaStream: + return .single([]) + } + } + + var isMuted: Signal { + switch self { + case let .call(callContext): + return callContext.isMuted + case .mediaStream: + return .single(true) + } + } + + var isNoiseSuppressionEnabled: Signal { + switch self { + case let .call(callContext): + return callContext.isNoiseSuppressionEnabled + case .mediaStream: + return .single(false) + } + } + + func stop() { + switch self { + case let .call(callContext): + callContext.stop() + case .mediaStream: + break + } + } + + func setIsMuted(_ isMuted: Bool) { + switch self { + case let .call(callContext): + callContext.setIsMuted(isMuted) + case .mediaStream: + break + } + } + + func setIsNoiseSuppressionEnabled(_ isNoiseSuppressionEnabled: Bool) { + switch self { + case let .call(callContext): + callContext.setIsNoiseSuppressionEnabled(isNoiseSuppressionEnabled) + case .mediaStream: + break + } + } + + func requestVideo(_ capturer: OngoingCallVideoCapturer?) { + switch self { + case let .call(callContext): + callContext.requestVideo(capturer) + case .mediaStream: + break + } + } + + func disableVideo() { + switch self { + case let .call(callContext): + callContext.disableVideo() + case .mediaStream: + break + } + } + + func setVolume(ssrc: UInt32, volume: Double) { + switch self { + case let .call(callContext): + callContext.setVolume(ssrc: ssrc, volume: volume) + case .mediaStream: + break + } + } + + func setRequestedVideoChannels(_ channels: [OngoingGroupCallContext.VideoChannel]) { + switch self { + case let .call(callContext): + callContext.setRequestedVideoChannels(channels) + case .mediaStream: + break + } + } + + func makeIncomingVideoView(endpointId: String, requestClone: Bool, completion: @escaping (OngoingCallContextPresentationCallVideoView?, OngoingCallContextPresentationCallVideoView?) -> Void) { + switch self { + case let .call(callContext): + callContext.makeIncomingVideoView(endpointId: endpointId, requestClone: requestClone, completion: completion) + case .mediaStream: + break + } + } + + func video(endpointId: String) -> Signal { + switch self { + case let .call(callContext): + return callContext.video(endpointId: endpointId) + case let .mediaStream(mediaStreamContext): + return mediaStreamContext.video() + } + } + + func addExternalAudioData(data: Data) { + switch self { + case let .call(callContext): + callContext.addExternalAudioData(data: data) + case .mediaStream: + break + } + } + + func getStats(completion: @escaping (OngoingGroupCallContext.Stats) -> Void) { + switch self { + case let .call(callContext): + callContext.getStats(completion: completion) + case .mediaStream: + break + } + } +} + public final class PresentationGroupCallImpl: PresentationGroupCall { private enum InternalState { case requesting @@ -430,7 +592,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { private var currentLocalSsrc: UInt32? private var currentLocalEndpointId: String? - private var genericCallContext: OngoingGroupCallContext? + private var genericCallContext: CurrentImpl? private var currentConnectionMode: OngoingGroupCallContext.ConnectionMode = .none private var didInitializeConnectionMode: Bool = false @@ -827,7 +989,9 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { } } if !removedSsrc.isEmpty { - strongSelf.genericCallContext?.removeSsrcs(ssrcs: removedSsrc) + if case let .call(callContext) = strongSelf.genericCallContext { + callContext.removeSsrcs(ssrcs: removedSsrc) + } } } }) @@ -1411,39 +1575,57 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { } if shouldJoin, let callInfo = activeCallInfo { - let genericCallContext: OngoingGroupCallContext + let genericCallContext: CurrentImpl if let current = self.genericCallContext { genericCallContext = current } else { - var outgoingAudioBitrateKbit: Int32? - let appConfiguration = self.accountContext.currentAppConfiguration.with({ $0 }) - if let data = appConfiguration.data, let value = data["voice_chat_send_bitrate"] as? Double { - outgoingAudioBitrateKbit = Int32(value) - } + if self.isStream { + genericCallContext = .mediaStream(WrappedMediaStreamingContext(rejoinNeeded: { [weak self] in + Queue.mainQueue().async { + guard let strongSelf = self else { + return + } + if strongSelf.leaving { + return + } + if case .established = strongSelf.internalState { + strongSelf.requestCall(movingFromBroadcastToRtc: false) + } + } + })) + } else { + var outgoingAudioBitrateKbit: Int32? + let appConfiguration = self.accountContext.currentAppConfiguration.with({ $0 }) + if let data = appConfiguration.data, let value = data["voice_chat_send_bitrate"] as? Double { + outgoingAudioBitrateKbit = Int32(value) + } - genericCallContext = OngoingGroupCallContext(video: self.videoCapturer, requestMediaChannelDescriptions: { [weak self] ssrcs, completion in - let disposable = MetaDisposable() - Queue.mainQueue().async { - guard let strongSelf = self else { - return + genericCallContext = .call(OngoingGroupCallContext(video: self.videoCapturer, requestMediaChannelDescriptions: { [weak self] ssrcs, completion in + let disposable = MetaDisposable() + Queue.mainQueue().async { + guard let strongSelf = self else { + return + } + disposable.set(strongSelf.requestMediaChannelDescriptions(ssrcs: ssrcs, completion: completion)) } - disposable.set(strongSelf.requestMediaChannelDescriptions(ssrcs: ssrcs, completion: completion)) - } - return disposable - }, rejoinNeeded: { [weak self] in - Queue.mainQueue().async { - guard let strongSelf = self else { - return + return disposable + }, rejoinNeeded: { [weak self] in + Queue.mainQueue().async { + guard let strongSelf = self else { + return + } + if case .established = strongSelf.internalState { + strongSelf.requestCall(movingFromBroadcastToRtc: false) + } } - if case .established = strongSelf.internalState { - strongSelf.requestCall(movingFromBroadcastToRtc: false) - } - } - }, outgoingAudioBitrateKbit: outgoingAudioBitrateKbit, videoContentType: self.isVideoEnabled ? .generic : .none, enableNoiseSuppression: false, disableAudioInput: self.isStream, preferX264: self.accountContext.sharedContext.immediateExperimentalUISettings.preferredVideoCodec == "H264") + }, outgoingAudioBitrateKbit: outgoingAudioBitrateKbit, videoContentType: self.isVideoEnabled ? .generic : .none, enableNoiseSuppression: false, disableAudioInput: self.isStream, preferX264: self.accountContext.sharedContext.immediateExperimentalUISettings.preferredVideoCodec == "H264" + )) + } self.genericCallContext = genericCallContext self.stateVersionValue += 1 } + self.joinDisposable.set((genericCallContext.joinPayload |> distinctUntilChanged(isEqual: { lhs, rhs in if lhs.0 != rhs.0 { @@ -1528,15 +1710,28 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { } } - switch joinCallResult.connectionMode { - case .rtc: - strongSelf.currentConnectionMode = .rtc - strongSelf.genericCallContext?.setConnectionMode(.rtc, keepBroadcastConnectedIfWasEnabled: false, isUnifiedBroadcast: false) - strongSelf.genericCallContext?.setJoinResponse(payload: clientParams) - case .broadcast: - strongSelf.currentConnectionMode = .broadcast - strongSelf.genericCallContext?.setAudioStreamData(audioStreamData: OngoingGroupCallContext.AudioStreamData(engine: strongSelf.accountContext.engine, callId: callInfo.id, accessHash: callInfo.accessHash, isExternalStream: callInfo.isStream)) - strongSelf.genericCallContext?.setConnectionMode(.broadcast, keepBroadcastConnectedIfWasEnabled: false, isUnifiedBroadcast: callInfo.isStream) + if let genericCallContext = strongSelf.genericCallContext { + switch genericCallContext { + case let .call(callContext): + switch joinCallResult.connectionMode { + case .rtc: + strongSelf.currentConnectionMode = .rtc + callContext.setConnectionMode(.rtc, keepBroadcastConnectedIfWasEnabled: false, isUnifiedBroadcast: false) + callContext.setJoinResponse(payload: clientParams) + case .broadcast: + strongSelf.currentConnectionMode = .broadcast + callContext.setAudioStreamData(audioStreamData: OngoingGroupCallContext.AudioStreamData(engine: strongSelf.accountContext.engine, callId: callInfo.id, accessHash: callInfo.accessHash, isExternalStream: callInfo.isStream)) + callContext.setConnectionMode(.broadcast, keepBroadcastConnectedIfWasEnabled: false, isUnifiedBroadcast: callInfo.isStream) + } + case let .mediaStream(mediaStreamContext): + switch joinCallResult.connectionMode { + case .rtc: + strongSelf.currentConnectionMode = .rtc + case .broadcast: + strongSelf.currentConnectionMode = .broadcast + mediaStreamContext.setAudioStreamData(audioStreamData: OngoingGroupCallContext.AudioStreamData(engine: strongSelf.accountContext.engine, callId: callInfo.id, accessHash: callInfo.accessHash, isExternalStream: callInfo.isStream)) + } + } } strongSelf.updateSessionState(internalState: .established(info: joinCallResult.callInfo, connectionMode: joinCallResult.connectionMode, clientParams: clientParams, localSsrc: ssrc, initialState: joinCallResult.state), audioSessionControl: strongSelf.audioSessionControl) @@ -2952,7 +3147,15 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { if !self.didInitializeConnectionMode || self.currentConnectionMode != .none { self.didInitializeConnectionMode = true self.currentConnectionMode = .none - self.genericCallContext?.setConnectionMode(.none, keepBroadcastConnectedIfWasEnabled: movingFromBroadcastToRtc, isUnifiedBroadcast: false) + if let genericCallContext = self.genericCallContext { + switch genericCallContext { + case let .call(callContext): + callContext.setConnectionMode(.none, keepBroadcastConnectedIfWasEnabled: movingFromBroadcastToRtc, isUnifiedBroadcast: false) + case .mediaStream: + assertionFailure() + break + } + } } self.internalState = .requesting diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index 9628e0b0e6..8c1aa97946 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -265,6 +265,7 @@ swift_library( "//submodules/ChatTextLinkEditUI:ChatTextLinkEditUI", "//submodules/MediaPickerUI:MediaPickerUI", "//submodules/ChatMessageBackground:ChatMessageBackground", + "//submodules/PeerInfoUI/CreateExternalMediaStreamScreen:CreateExternalMediaStreamScreen", ] + select({ "@build_bazel_rules_apple//apple:ios_armv7": [], "@build_bazel_rules_apple//apple:ios_arm64": appcenter_targets, diff --git a/submodules/TelegramUI/Resources/Animations/CreateStream.tgs b/submodules/TelegramUI/Resources/Animations/CreateStream.tgs new file mode 100644 index 0000000000000000000000000000000000000000..34215d54922d0d6433ee0a6ad1c14566f142c067 GIT binary patch literal 35467 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index 950b273623..285a0d770b 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -65,6 +65,7 @@ import TooltipUI import QrCodeUI import Translate import ChatPresentationInterfaceState +import CreateExternalMediaStreamScreen protocol PeerInfoScreenItem: AnyObject { var id: AnyHashable { get } @@ -4106,6 +4107,10 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate self.context.scheduleGroupCall(peerId: self.peerId) } + private func createExternalStream(credentialsPromise: Promise?) { + self.controller?.push(CreateExternalMediaStreamScreen(context: self.context, peerId: self.peerId, credentialsPromise: credentialsPromise)) + } + private func createAndJoinGroupCall(peerId: PeerId, joinAsPeerId: PeerId?) { if let _ = self.context.sharedContext.callManager { let startCall: (Bool) -> Void = { [weak self] endCurrentIfAny in @@ -4113,12 +4118,6 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate return } - #if DEBUG - let isExternalStream: Bool = true - #else - let isExternalStream: Bool = false - #endif - var cancelImpl: (() -> Void)? let presentationData = strongSelf.presentationData let progressSignal = Signal { [weak self] subscriber in @@ -4135,7 +4134,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate |> runOn(Queue.mainQueue()) |> delay(0.15, queue: Queue.mainQueue()) let progressDisposable = progressSignal.start() - let createSignal = strongSelf.context.engine.calls.createGroupCall(peerId: peerId, title: nil, scheduleDate: nil, isExternalStream: isExternalStream) + let createSignal = strongSelf.context.engine.calls.createGroupCall(peerId: peerId, title: nil, scheduleDate: nil, isExternalStream: false) |> afterDisposed { Queue.mainQueue().async { progressDisposable.dispose() @@ -4467,6 +4466,9 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate } private func openVoiceChatOptions(defaultJoinAsPeerId: PeerId?, gesture: ContextGesture? = nil, contextController: ContextControllerProtocol? = nil) { + guard let chatPeer = self.data?.peer else { + return + } let context = self.context let peerId = self.peerId let defaultJoinAsPeerId = defaultJoinAsPeerId ?? self.context.account.peerId @@ -4534,6 +4536,31 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate self?.scheduleGroupCall() }))) + var credentialsPromise: Promise? + var canCreateStream = false + switch chatPeer { + case let group as TelegramGroup: + if case .creator = group.role { + canCreateStream = true + } + case let channel as TelegramChannel: + if channel.flags.contains(.isCreator) { + canCreateStream = true + credentialsPromise = Promise() + credentialsPromise?.set(context.engine.calls.getGroupCallStreamCredentials(peerId: peerId, revokePreviousCredentials: false) |> `catch` { _ -> Signal in return .never() }) + } + default: + break + } + + if canCreateStream { + items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.ChannelInfo_CreateExternalStream, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/VoiceChat"), color: theme.contextMenu.primaryColor) }, action: { _, f in + f(.dismissWithoutContent) + + self?.createExternalStream(credentialsPromise: credentialsPromise) + }))) + } + if let contextController = contextController { contextController.setItems(.single(ContextController.Items(content: .list(items))), minHeight: nil) } else { diff --git a/submodules/TelegramVoip/Sources/GroupCallContext.swift b/submodules/TelegramVoip/Sources/GroupCallContext.swift index 1d534dd233..f3165ef105 100644 --- a/submodules/TelegramVoip/Sources/GroupCallContext.swift +++ b/submodules/TelegramVoip/Sources/GroupCallContext.swift @@ -2,8 +2,9 @@ import Foundation import SwiftSignalKit import TgVoipWebrtc import TelegramCore +import Postbox -private final class ContextQueueImpl: NSObject, OngoingCallThreadLocalContextQueueWebrtc { +final class ContextQueueImpl: NSObject, OngoingCallThreadLocalContextQueueWebrtc { private let queue: Queue init(queue: Queue) { @@ -27,17 +28,17 @@ private final class ContextQueueImpl: NSObject, OngoingCallThreadLocalContextQue } } -private enum BroadcastPartSubject { +enum BroadcastPartSubject { case audio case video(channelId: Int32, quality: OngoingGroupCallContext.VideoChannel.Quality) } -private protocol BroadcastPartSource: AnyObject { +protocol BroadcastPartSource: AnyObject { func requestTime(completion: @escaping (Int64) -> Void) -> Disposable func requestPart(timestampMilliseconds: Int64, durationMilliseconds: Int64, subject: BroadcastPartSubject, completion: @escaping (OngoingGroupCallBroadcastPart) -> Void, rejoinNeeded: @escaping () -> Void) -> Disposable } -private final class NetworkBroadcastPartSource: BroadcastPartSource { +final class NetworkBroadcastPartSource: BroadcastPartSource { private let queue: Queue private let engine: TelegramEngine private let callId: Int64 @@ -45,6 +46,10 @@ private final class NetworkBroadcastPartSource: BroadcastPartSource { private let isExternalStream: Bool private var dataSource: AudioBroadcastDataSource? + #if DEBUG + private let debugDumpDirectory = TempBox.shared.tempDirectory() + #endif + init(queue: Queue, engine: TelegramEngine, callId: Int64, accessHash: Int64, isExternalStream: Bool) { self.queue = queue self.engine = engine @@ -139,6 +144,9 @@ private final class NetworkBroadcastPartSource: BroadcastPartSource { } |> deliverOn(self.queue) + #if DEBUG + let debugDumpDirectory = self.debugDumpDirectory + #endif return signal.start(next: { result in guard let result = result else { completion(OngoingGroupCallBroadcastPart(timestampMilliseconds: timestampIdMilliseconds, responseTimestamp: Double(timestampIdMilliseconds), status: .notReady, oggData: Data())) @@ -147,11 +155,11 @@ private final class NetworkBroadcastPartSource: BroadcastPartSource { let part: OngoingGroupCallBroadcastPart switch result.status { case let .data(dataValue): - /*#if DEBUG - let tempFile = EngineTempBox.shared.tempFile(fileName: "part.mp4") - let _ = try? dataValue.write(to: URL(fileURLWithPath: tempFile.path)) - print("Dump stream part: \(tempFile.path)") - #endif*/ + #if DEBUG + let tempFilePath = debugDumpDirectory.path + "/\(timestampMilliseconds).mp4" + let _ = try? dataValue.subdata(in: 32 ..< dataValue.count).write(to: URL(fileURLWithPath: tempFilePath)) + print("Dump stream part: \(tempFilePath)") + #endif part = OngoingGroupCallBroadcastPart(timestampMilliseconds: timestampIdMilliseconds, responseTimestamp: result.responseTimestamp, status: .success, oggData: dataValue) case .notReady: part = OngoingGroupCallBroadcastPart(timestampMilliseconds: timestampIdMilliseconds, responseTimestamp: result.responseTimestamp, status: .notReady, oggData: Data()) @@ -167,7 +175,7 @@ private final class NetworkBroadcastPartSource: BroadcastPartSource { } } -private final class OngoingGroupCallBroadcastPartTaskImpl : NSObject, OngoingGroupCallBroadcastPartTask { +final class OngoingGroupCallBroadcastPartTaskImpl: NSObject, OngoingGroupCallBroadcastPartTask { private let disposable: Disposable? init(disposable: Disposable?) { @@ -209,6 +217,11 @@ public final class OngoingGroupCallContext { public struct NetworkState: Equatable { public var isConnected: Bool public var isTransitioningFromBroadcastToRtc: Bool + + public init(isConnected: Bool, isTransitioningFromBroadcastToRtc: Bool) { + self.isConnected = isConnected + self.isTransitioningFromBroadcastToRtc = isTransitioningFromBroadcastToRtc + } } public enum AudioLevelKey: Hashable { diff --git a/submodules/TelegramVoip/Sources/WrappedMediaStreamingContext.swift b/submodules/TelegramVoip/Sources/WrappedMediaStreamingContext.swift new file mode 100644 index 0000000000..3ae1b27e2e --- /dev/null +++ b/submodules/TelegramVoip/Sources/WrappedMediaStreamingContext.swift @@ -0,0 +1,134 @@ +import Foundation +import SwiftSignalKit +import TgVoipWebrtc +import TelegramCore + +public final class WrappedMediaStreamingContext { + private final class Impl { + let queue: Queue + let context: MediaStreamingContext + + private let broadcastPartsSource = Atomic(value: nil) + + init(queue: Queue, rejoinNeeded: @escaping () -> Void) { + self.queue = queue + + var getBroadcastPartsSource: (() -> BroadcastPartSource?)? + + self.context = MediaStreamingContext( + queue: ContextQueueImpl(queue: queue), + requestCurrentTime: { completion in + let disposable = MetaDisposable() + + queue.async { + if let source = getBroadcastPartsSource?() { + disposable.set(source.requestTime(completion: completion)) + } else { + completion(0) + } + } + + return OngoingGroupCallBroadcastPartTaskImpl(disposable: disposable) + }, + requestAudioBroadcastPart: { timestampMilliseconds, durationMilliseconds, completion in + let disposable = MetaDisposable() + + queue.async { + disposable.set(getBroadcastPartsSource?()?.requestPart(timestampMilliseconds: timestampMilliseconds, durationMilliseconds: durationMilliseconds, subject: .audio, completion: completion, rejoinNeeded: { + rejoinNeeded() + })) + } + + return OngoingGroupCallBroadcastPartTaskImpl(disposable: disposable) + }, + requestVideoBroadcastPart: { timestampMilliseconds, durationMilliseconds, channelId, quality, completion in + let disposable = MetaDisposable() + + queue.async { + let mappedQuality: OngoingGroupCallContext.VideoChannel.Quality + switch quality { + case .thumbnail: + mappedQuality = .thumbnail + case .medium: + mappedQuality = .medium + case .full: + mappedQuality = .full + @unknown default: + mappedQuality = .thumbnail + } + disposable.set(getBroadcastPartsSource?()?.requestPart(timestampMilliseconds: timestampMilliseconds, durationMilliseconds: durationMilliseconds, subject: .video(channelId: channelId, quality: mappedQuality), completion: completion, rejoinNeeded: { + rejoinNeeded() + })) + } + + return OngoingGroupCallBroadcastPartTaskImpl(disposable: disposable) + } + ) + + let broadcastPartsSource = self.broadcastPartsSource + getBroadcastPartsSource = { + return broadcastPartsSource.with { $0 } + } + } + + deinit { + } + + func setAudioStreamData(audioStreamData: OngoingGroupCallContext.AudioStreamData?) { + if let audioStreamData = audioStreamData { + let broadcastPartsSource = NetworkBroadcastPartSource(queue: self.queue, engine: audioStreamData.engine, callId: audioStreamData.callId, accessHash: audioStreamData.accessHash, isExternalStream: audioStreamData.isExternalStream) + let _ = self.broadcastPartsSource.swap(broadcastPartsSource) + self.context.start() + } + } + + func video() -> Signal { + let queue = self.queue + return Signal { [weak self] subscriber in + let disposable = MetaDisposable() + + queue.async { + guard let strongSelf = self else { + return + } + let innerDisposable = strongSelf.context.addVideoOutput() { videoFrameData in + subscriber.putNext(OngoingGroupCallContext.VideoFrameData(frameData: videoFrameData)) + } + disposable.set(ActionDisposable { + innerDisposable.dispose() + }) + } + + return disposable + } + } + } + + private let queue = Queue() + private let impl: QueueLocalObject + + public init(rejoinNeeded: @escaping () -> Void) { + let queue = self.queue + self.impl = QueueLocalObject(queue: queue, generate: { + return Impl(queue: queue, rejoinNeeded: rejoinNeeded) + }) + } + + public func setAudioStreamData(audioStreamData: OngoingGroupCallContext.AudioStreamData?) { + self.impl.with { impl in + impl.setAudioStreamData(audioStreamData: audioStreamData) + } + } + + public func video() -> Signal { + return Signal { subscriber in + let disposable = MetaDisposable() + self.impl.with { impl in + disposable.set(impl.video().start(next: { value in + subscriber.putNext(value) + })) + } + return disposable + } + } +} diff --git a/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/MediaStreaming.h b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/MediaStreaming.h new file mode 100644 index 0000000000..8a5db63a01 --- /dev/null +++ b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/MediaStreaming.h @@ -0,0 +1,23 @@ +#ifndef TgVoipWebrtc_MediaStreaming_h +#define TgVoipWebrtc_MediaStreaming_h + +#import + +#import + +@interface MediaStreamingContext : NSObject + +- (instancetype _Nonnull)initWithQueue:(id _Nonnull)queue + requestCurrentTime:(id _Nonnull (^ _Nonnull)(void (^ _Nonnull)(int64_t)))requestAudioBroadcastPart + requestAudioBroadcastPart:(id _Nonnull (^ _Nonnull)(int64_t, int64_t, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)))requestAudioBroadcastPart + requestVideoBroadcastPart:(id _Nonnull (^ _Nonnull)(int64_t, int64_t, int32_t, OngoingGroupCallRequestedVideoQuality, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)))requestVideoBroadcastPart; + +- (void)start; +- (void)stop; + +- (GroupCallDisposable * _Nonnull)addVideoOutput:(void (^_Nonnull)(CallVideoFrameData * _Nonnull))sink; +- (void)getAudio:(int16_t * _Nonnull)audioSamples numSamples:(NSInteger)numSamples numChannels:(NSInteger)numChannels samplesPerSecond:(NSInteger)samplesPerSecond; + +@end + +#endif diff --git a/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h index bc7dbff2cb..5736fdaa25 100644 --- a/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h +++ b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h @@ -112,6 +112,7 @@ typedef NS_ENUM(int32_t, OngoingCallDataSavingWebrtc) { @interface GroupCallDisposable : NSObject +- (instancetype _Nonnull)initWithBlock:(dispatch_block_t _Nonnull)block; - (void)dispose; @end diff --git a/submodules/TgVoipWebrtc/Sources/MediaStreaming.mm b/submodules/TgVoipWebrtc/Sources/MediaStreaming.mm new file mode 100644 index 0000000000..5468c637b6 --- /dev/null +++ b/submodules/TgVoipWebrtc/Sources/MediaStreaming.mm @@ -0,0 +1,273 @@ +#import + +#import "MediaUtils.h" + +#include "StaticThreads.h" +#include "group/StreamingMediaContext.h" + +#include "api/video/video_sink_interface.h" +#include "sdk/objc/native/src/objc_frame_buffer.h" +#include "api/video/video_frame.h" + +#import "components/video_frame_buffer/RTCCVPixelBuffer.h" +#import "platform/darwin/TGRTCCVPixelBuffer.h" + +#include + +namespace { + +class BroadcastPartTaskImpl : public tgcalls::BroadcastPartTask { +public: + BroadcastPartTaskImpl(id task) { + _task = task; + } + + virtual ~BroadcastPartTaskImpl() { + } + + virtual void cancel() override { + [_task cancel]; + } + +private: + id _task; +}; + +class VideoSinkAdapter : public rtc::VideoSinkInterface { +public: + VideoSinkAdapter(void (^frameReceived)(webrtc::VideoFrame const &)) { + _frameReceived = [frameReceived copy]; + } + + void OnFrame(const webrtc::VideoFrame& nativeVideoFrame) override { + @autoreleasepool { + if (_frameReceived) { + _frameReceived(nativeVideoFrame); + } + } + } + +private: + void (^_frameReceived)(webrtc::VideoFrame const &); +}; + +} + +@interface MediaStreamingVideoSink : NSObject { + std::shared_ptr _adapter; +} + +@end + + +@implementation MediaStreamingVideoSink + +- (instancetype)initWithSink:(void (^_Nonnull)(CallVideoFrameData * _Nonnull))sink { + self = [super init]; + if (self != nil) { + void (^storedSink)(CallVideoFrameData * _Nonnull) = [sink copy]; + + _adapter.reset(new VideoSinkAdapter(^(webrtc::VideoFrame const &videoFrame) { + id mappedBuffer = nil; + + bool mirrorHorizontally = false; + bool mirrorVertically = false; + + if (videoFrame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative) { + id nativeBuffer = static_cast(videoFrame.video_frame_buffer().get())->wrapped_frame_buffer(); + if ([nativeBuffer isKindOfClass:[RTC_OBJC_TYPE(RTCCVPixelBuffer) class]]) { + RTCCVPixelBuffer *pixelBuffer = (RTCCVPixelBuffer *)nativeBuffer; + mappedBuffer = [[CallVideoFrameNativePixelBuffer alloc] initWithPixelBuffer:pixelBuffer.pixelBuffer]; + } + if ([nativeBuffer isKindOfClass:[TGRTCCVPixelBuffer class]]) { + if (((TGRTCCVPixelBuffer *)nativeBuffer).shouldBeMirrored) { + switch (videoFrame.rotation()) { + case webrtc::kVideoRotation_0: + case webrtc::kVideoRotation_180: + mirrorHorizontally = true; + break; + case webrtc::kVideoRotation_90: + case webrtc::kVideoRotation_270: + mirrorVertically = true; + break; + default: + break; + } + } + } + } else if (videoFrame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNV12) { + rtc::scoped_refptr nv12Buffer = (webrtc::NV12BufferInterface *)videoFrame.video_frame_buffer().get(); + mappedBuffer = [[CallVideoFrameNV12Buffer alloc] initWithBuffer:nv12Buffer]; + } else if (videoFrame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kI420) { + rtc::scoped_refptr i420Buffer = (webrtc::I420BufferInterface *)videoFrame.video_frame_buffer().get(); + mappedBuffer = [[CallVideoFrameI420Buffer alloc] initWithBuffer:i420Buffer]; + } + + if (storedSink && mappedBuffer) { + storedSink([[CallVideoFrameData alloc] initWithBuffer:mappedBuffer frame:videoFrame mirrorHorizontally:mirrorHorizontally mirrorVertically:mirrorVertically]); + } + })); + } + return self; +} + +- (std::shared_ptr>)sink { + return _adapter; +} + +@end + +@interface MediaStreamingContext () { + id _queue; + + id _Nonnull (^ _Nonnull _requestCurrentTime)(void (^ _Nonnull)(int64_t)); + id _Nonnull (^ _Nonnull _requestAudioBroadcastPart)(int64_t, int64_t, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)); + id _Nonnull (^ _Nonnull _requestVideoBroadcastPart)(int64_t, int64_t, int32_t, OngoingGroupCallRequestedVideoQuality, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)); + + std::unique_ptr _context; + + int _nextSinkId; + NSMutableDictionary *_sinks; +} + +@end + +@implementation MediaStreamingContext + +- (instancetype _Nonnull)initWithQueue:(id _Nonnull)queue + requestCurrentTime:(id _Nonnull (^ _Nonnull)(void (^ _Nonnull)(int64_t)))requestCurrentTime + requestAudioBroadcastPart:(id _Nonnull (^ _Nonnull)(int64_t, int64_t, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)))requestAudioBroadcastPart + requestVideoBroadcastPart:(id _Nonnull (^ _Nonnull)(int64_t, int64_t, int32_t, OngoingGroupCallRequestedVideoQuality, void (^ _Nonnull)(OngoingGroupCallBroadcastPart * _Nullable)))requestVideoBroadcastPart { + self = [super init]; + if (self != nil) { + _queue = queue; + + _requestCurrentTime = [requestCurrentTime copy]; + _requestAudioBroadcastPart = [requestAudioBroadcastPart copy]; + _requestVideoBroadcastPart = [requestVideoBroadcastPart copy]; + + _sinks = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)dealloc { +} + +- (void)resetContext { + tgcalls::StreamingMediaContext::StreamingMediaContextArguments arguments; + arguments.threads = tgcalls::StaticThreads::getThreads(); + arguments.isUnifiedBroadcast = true; + arguments.requestCurrentTime = [requestCurrentTime = _requestCurrentTime](std::function completion) -> std::shared_ptr { + id task = requestCurrentTime(^(int64_t result) { + completion(result); + }); + return std::make_shared(task); + }; + arguments.requestAudioBroadcastPart = nullptr; + arguments.requestVideoBroadcastPart = [requestVideoBroadcastPart = _requestVideoBroadcastPart](int64_t timestampMilliseconds, int64_t durationMilliseconds, int32_t channelId, tgcalls::VideoChannelDescription::Quality quality, std::function completion) -> std::shared_ptr { + OngoingGroupCallRequestedVideoQuality mappedQuality; + switch (quality) { + case tgcalls::VideoChannelDescription::Quality::Thumbnail: { + mappedQuality = OngoingGroupCallRequestedVideoQualityThumbnail; + break; + } + case tgcalls::VideoChannelDescription::Quality::Medium: { + mappedQuality = OngoingGroupCallRequestedVideoQualityMedium; + break; + } + case tgcalls::VideoChannelDescription::Quality::Full: { + mappedQuality = OngoingGroupCallRequestedVideoQualityFull; + break; + } + default: { + mappedQuality = OngoingGroupCallRequestedVideoQualityThumbnail; + break; + } + } + id task = requestVideoBroadcastPart(timestampMilliseconds, durationMilliseconds, channelId, mappedQuality, ^(OngoingGroupCallBroadcastPart * _Nullable part) { + tgcalls::BroadcastPart parsedPart; + parsedPart.timestampMilliseconds = part.timestampMilliseconds; + + parsedPart.responseTimestamp = part.responseTimestamp; + + tgcalls::BroadcastPart::Status mappedStatus; + switch (part.status) { + case OngoingGroupCallBroadcastPartStatusSuccess: { + mappedStatus = tgcalls::BroadcastPart::Status::Success; + break; + } + case OngoingGroupCallBroadcastPartStatusNotReady: { + mappedStatus = tgcalls::BroadcastPart::Status::NotReady; + break; + } + case OngoingGroupCallBroadcastPartStatusResyncNeeded: { + mappedStatus = tgcalls::BroadcastPart::Status::ResyncNeeded; + break; + } + default: { + mappedStatus = tgcalls::BroadcastPart::Status::NotReady; + break; + } + } + parsedPart.status = mappedStatus; + + parsedPart.data.resize(part.oggData.length); + [part.oggData getBytes:parsedPart.data.data() length:part.oggData.length]; + + completion(std::move(parsedPart)); + }); + return std::make_shared(task); + }; + + arguments.updateAudioLevel = nullptr; + + _context = std::make_unique(std::move(arguments)); + + for (MediaStreamingVideoSink *storedSink in _sinks.allValues) { + _context->addVideoSink("unified", [storedSink sink]); + } +} + +- (void)start { + [self resetContext]; +} + +- (void)stop { + _context.reset(); +} + +- (GroupCallDisposable * _Nonnull)addVideoOutput:(void (^_Nonnull)(CallVideoFrameData * _Nonnull))sink { + int sinkId = _nextSinkId; + _nextSinkId += 1; + + MediaStreamingVideoSink *storedSink = [[MediaStreamingVideoSink alloc] initWithSink:sink]; + _sinks[@(sinkId)] = storedSink; + + if (_context) { + _context->addVideoSink("unified", [storedSink sink]); + } + + __weak MediaStreamingContext *weakSelf = self; + id queue = _queue; + return [[GroupCallDisposable alloc] initWithBlock:^{ + [queue dispatch:^{ + __strong MediaStreamingContext *strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf->_sinks removeObjectForKey:@(sinkId)]; + }]; + }]; +} + +- (void)getAudio:(int16_t * _Nonnull)audioSamples numSamples:(NSInteger)numSamples numChannels:(NSInteger)numChannels samplesPerSecond:(NSInteger)samplesPerSecond { + if (_context) { + _context->getAudio(audioSamples, (size_t)numSamples, (size_t)numChannels, (uint32_t)samplesPerSecond); + } else { + memset(audioSamples, 0, numSamples * numChannels * sizeof(int16_t)); + } +} + +@end diff --git a/submodules/TgVoipWebrtc/Sources/MediaUtils.h b/submodules/TgVoipWebrtc/Sources/MediaUtils.h new file mode 100644 index 0000000000..060651018f --- /dev/null +++ b/submodules/TgVoipWebrtc/Sources/MediaUtils.h @@ -0,0 +1,58 @@ +#import + + +#import "Instance.h" +#import "InstanceImpl.h" +#import "v2/InstanceV2Impl.h" +#include "StaticThreads.h" + +#import "VideoCaptureInterface.h" +#import "platform/darwin/VideoCameraCapturer.h" + +#ifndef WEBRTC_IOS +#import "platform/darwin/VideoMetalViewMac.h" +#import "platform/darwin/GLVideoViewMac.h" +#import "platform/darwin/VideoSampleBufferViewMac.h" +#define UIViewContentModeScaleAspectFill kCAGravityResizeAspectFill +#define UIViewContentModeScaleAspect kCAGravityResizeAspect + +#else +#import "platform/darwin/VideoMetalView.h" +#import "platform/darwin/GLVideoView.h" +#import "platform/darwin/VideoSampleBufferView.h" +#import "platform/darwin/VideoCaptureView.h" +#import "platform/darwin/CustomExternalCapturer.h" +#endif + +#import "group/GroupInstanceImpl.h" +#import "group/GroupInstanceCustomImpl.h" + +#import "VideoCaptureInterfaceImpl.h" + +#include "sdk/objc/native/src/objc_frame_buffer.h" +#import "components/video_frame_buffer/RTCCVPixelBuffer.h" +#import "platform/darwin/TGRTCCVPixelBuffer.h" + +@interface CallVideoFrameNativePixelBuffer (Initialization) + +- (instancetype _Nonnull)initWithPixelBuffer:(CVPixelBufferRef _Nonnull)pixelBuffer; + +@end + +@interface CallVideoFrameI420Buffer (Initialization) + +- (instancetype _Nonnull)initWithBuffer:(rtc::scoped_refptr)i420Buffer; + +@end + +@interface CallVideoFrameNV12Buffer (Initialization) + +- (instancetype _Nonnull)initWithBuffer:(rtc::scoped_refptr)nv12Buffer; + +@end + +@interface CallVideoFrameData (Initialization) + +- (instancetype _Nonnull)initWithBuffer:(id _Nonnull)buffer frame:(webrtc::VideoFrame const &)frame mirrorHorizontally:(bool)mirrorHorizontally mirrorVertically:(bool)mirrorVertically; + +@end diff --git a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm index 1b862efe8a..53f9aaf5ef 100644 --- a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm +++ b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm @@ -1,5 +1,6 @@ #import +#import "MediaUtils.h" #import "Instance.h" #import "InstanceImpl.h" diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index d5d8fc5467..4f3f4025b9 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit d5d8fc5467d490319572fbccd864fa6bd78b7877 +Subproject commit 4f3f4025b9b4ad9662612636af10e6fd5d204535