diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift index 53111d78d3..1dbdb6a225 100644 --- a/submodules/ContextUI/Sources/ContextController.swift +++ b/submodules/ContextUI/Sources/ContextController.swift @@ -1731,9 +1731,17 @@ public final class ContextControllerReferenceViewInfo { } public protocol ContextReferenceContentSource: AnyObject { + var shouldBeDismissed: Signal { get } + func transitionInfo() -> ContextControllerReferenceViewInfo? } +public extension ContextReferenceContentSource { + var shouldBeDismissed: Signal { + return .single(false) + } +} + public final class ContextControllerTakeViewInfo { public let contentContainingNode: ContextExtractedContentContainingNode public let contentAreaInScreenSpace: CGRect @@ -1852,8 +1860,18 @@ public final class ContextController: ViewController, StandalonePresentableContr super.init(navigationBarPresentationData: nil) switch source { - case .reference: + case let .reference(referenceSource): self.statusBar.statusBarStyle = .Ignore + + self.shouldBeDismissedDisposable = (referenceSource.shouldBeDismissed + |> filter { $0 } + |> take(1) + |> deliverOnMainQueue).start(next: { [weak self] _ in + guard let strongSelf = self else { + return + } + strongSelf.dismiss(result: .default, completion: {}) + }) case let .extracted(extractedSource): if extractedSource.blurBackground { self.statusBar.statusBarStyle = .Hide diff --git a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift index 7a8cc7b59b..57aff7a548 100644 --- a/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift +++ b/submodules/TelegramBaseController/Sources/MediaNavigationAccessoryHeaderNode.swift @@ -217,6 +217,8 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi } } + private let dismissedPromise = ValuePromise(false) + public init(context: AccountContext, presentationData: PresentationData) { self.context = context @@ -437,6 +439,8 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi guard let (size, _, _) = self.validLayout else { return } + + self.dismissedPromise.set(true) transition.updatePosition(node: self.separatorNode, position: self.separatorNode.position.offsetBy(dx: 0.0, dy: size.height)) } @@ -551,7 +555,8 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi return } let items: Signal<[ContextMenuItem], NoError> = self.contextMenuSpeedItems() - let contextController = ContextController(account: self.context.account, presentationData: self.context.sharedContext.currentPresentationData.with { $0 }, source: .reference(HeaderContextReferenceContentSource(controller: controller, sourceNode: self.rateButton.referenceNode)), items: items, reactionItems: [], gesture: gesture) + let contextController = ContextController(account: self.context.account, presentationData: self.context.sharedContext.currentPresentationData.with { $0 }, source: .reference(HeaderContextReferenceContentSource(controller: controller, sourceNode: self.rateButton.referenceNode, shouldBeDismissed: self.dismissedPromise.get())), items: items, reactionItems: [], gesture: gesture) + self.presentInGlobalOverlay?(contextController) } @@ -766,11 +771,14 @@ private final class HeaderContextReferenceContentSource: ContextReferenceContent private let controller: ViewController private let sourceNode: ContextReferenceContentNode - init(controller: ViewController, sourceNode: ContextReferenceContentNode) { + var shouldBeDismissed: Signal + + init(controller: ViewController, sourceNode: ContextReferenceContentNode, shouldBeDismissed: Signal) { self.controller = controller self.sourceNode = sourceNode + self.shouldBeDismissed = shouldBeDismissed } - + func transitionInfo() -> ContextControllerReferenceViewInfo? { return ContextControllerReferenceViewInfo(referenceNode: self.sourceNode, contentAreaInScreenSpace: UIScreen.main.bounds) }