Dismiss context menu when message gets deleted

This commit is contained in:
Ali
2021-02-18 23:21:58 +04:00
parent 20d620d630
commit a46bfa8265
4 changed files with 50 additions and 7 deletions

View File

@@ -1510,11 +1510,18 @@ public protocol ContextExtractedContentSource: class {
var keepInPlace: Bool { get }
var ignoreContentTouches: Bool { get }
var blurBackground: Bool { get }
var shouldBeDismissed: Signal<Bool, NoError> { get }
func takeView() -> ContextControllerTakeViewInfo?
func putBack() -> ContextControllerPutBackViewInfo?
}
public extension ContextExtractedContentSource {
var shouldBeDismissed: Signal<Bool, NoError> {
return .single(false)
}
}
public protocol ContextControllerContentSource: class {
var controller: ViewController { get }
var navigationController: NavigationController? { get }
@@ -1555,6 +1562,8 @@ public final class ContextController: ViewController, StandalonePresentableContr
public var reactionSelected: ((ReactionContextItem.Reaction) -> Void)?
private var shouldBeDismissedDisposable: Disposable?
public init(account: Account, presentationData: PresentationData, source: ContextContentSource, items: Signal<[ContextMenuItem], NoError>, reactionItems: [ReactionContextItem], recognizer: TapLongTapOrDoubleTapGestureRecognizer? = nil, gesture: ContextGesture? = nil, displayTextSelectionTip: Bool = false) {
self.account = account
self.presentationData = presentationData
@@ -1567,8 +1576,19 @@ public final class ContextController: ViewController, StandalonePresentableContr
super.init(navigationBarPresentationData: nil)
if case let .extracted(extractedSource) = source, !extractedSource.blurBackground {
self.statusBar.statusBarStyle = .Ignore
if case let .extracted(extractedSource) = source {
if !extractedSource.blurBackground {
self.statusBar.statusBarStyle = .Ignore
}
self.shouldBeDismissedDisposable = (extractedSource.shouldBeDismissed
|> filter { $0 }
|> take(1)
|> deliverOnMainQueue).start(next: { [weak self] _ in
guard let strongSelf = self else {
return
}
strongSelf.dismiss(result: .default, completion: {})
})
} else {
self.statusBar.statusBarStyle = .Hide
}
@@ -1579,6 +1599,10 @@ public final class ContextController: ViewController, StandalonePresentableContr
fatalError("init(coder:) has not been implemented")
}
deinit {
self.shouldBeDismissedDisposable?.dispose()
}
override public func loadDisplayNode() {
self.displayNode = ContextControllerNode(account: self.account, controller: self, presentationData: self.presentationData, source: self.source, items: self.items, reactionItems: self.reactionItems, beginDismiss: { [weak self] result in
self?.dismiss(result: result, completion: nil)