From 815b5b008217476149c34c42f8e4b1fcce2c954a Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 28 Sep 2020 18:20:43 +0400 Subject: [PATCH] Disable search tabs in peer search --- .../Sources/ChatListControllerNode.swift | 2 +- .../Sources/ChatListSearchContainerNode.swift | 13 ++++++-- .../ChatListSearchPaneContainerNode.swift | 30 +++++++++---------- .../Sources/PeerSelectionControllerNode.swift | 2 +- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/submodules/ChatListUI/Sources/ChatListControllerNode.swift b/submodules/ChatListUI/Sources/ChatListControllerNode.swift index 1aa28b6f09..8ba93bf617 100644 --- a/submodules/ChatListUI/Sources/ChatListControllerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListControllerNode.swift @@ -1156,7 +1156,7 @@ final class ChatListControllerNode: ASDisplayNode { filter.insert(.excludeRecent) } - let contentNode = ChatListSearchContainerNode(context: self.context, filter: filter, groupId: self.groupId, openPeer: { [weak self] peer, dismissSearch in + let contentNode = ChatListSearchContainerNode(context: self.context, filter: filter, groupId: self.groupId, displaySearchFilters: displaySearchFilters, openPeer: { [weak self] peer, dismissSearch in self?.requestOpenPeerFromSearch?(peer, dismissSearch) }, openDisabledPeer: { _ in }, openRecentPeerOptions: { [weak self] peer in diff --git a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift index f3804e6671..8b03b35f1c 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift @@ -82,6 +82,7 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo private let context: AccountContext private let peersFilter: ChatListNodePeersFilter private let groupId: PeerGroupId + private let displaySearchFilters: Bool private var interaction: ChatListSearchInteraction? private let openMessage: (Peer, MessageId, Bool) -> Void private let navigationController: NavigationController? @@ -123,10 +124,11 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo private var validLayout: (ContainerViewLayout, CGFloat)? - public init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, openPeer originalOpenPeer: @escaping (Peer, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage originalOpenMessage: @escaping (Peer, MessageId, Bool) -> Void, addContact: ((String) -> Void)?, peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, navigationController: NavigationController?) { + public init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, displaySearchFilters: Bool, openPeer originalOpenPeer: @escaping (Peer, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage originalOpenMessage: @escaping (Peer, MessageId, Bool) -> Void, addContact: ((String) -> Void)?, peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, navigationController: NavigationController?) { self.context = context self.peersFilter = filter self.groupId = groupId + self.displaySearchFilters = displaySearchFilters self.navigationController = navigationController self.presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -576,7 +578,14 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo bottomInset -= bottomIntrinsicInset } - self.paneContainerNode.update(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), sideInset: layout.safeInsets.left, bottomInset: bottomInset, visibleHeight: layout.size.height - topInset, presentationData: self.presentationData, transition: transition) + let availablePanes: [ChatListSearchPaneKey] + if self.displaySearchFilters { + availablePanes = defaultAvailableSearchPanes + } else { + availablePanes = [.chats] + } + + self.paneContainerNode.update(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), sideInset: layout.safeInsets.left, bottomInset: bottomInset, visibleHeight: layout.size.height - topInset, presentationData: self.presentationData, availablePanes: availablePanes, transition: transition) } private var currentMessages: ([PeerId: Peer], [MessageId: Message]) { diff --git a/submodules/ChatListUI/Sources/ChatListSearchPaneContainerNode.swift b/submodules/ChatListUI/Sources/ChatListSearchPaneContainerNode.swift index da9d2922ae..36625212c7 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchPaneContainerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchPaneContainerNode.swift @@ -55,7 +55,7 @@ enum ChatListSearchPaneKey { case voice } -private let availablePanes: [ChatListSearchPaneKey] = [.chats, .media, .links, .files, .music, .voice] +let defaultAvailableSearchPanes: [ChatListSearchPaneKey] = [.chats, .media, .links, .files, .music, .voice] struct ChatListSearchPaneSpecifier: Equatable { var key: ChatListSearchPaneKey @@ -112,7 +112,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD var isAdjacentLoadingEnabled = false - private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, presentationData: PresentationData)? + private var currentParams: (size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, presentationData: PresentationData, [ChatListSearchPaneKey])? private(set) var currentPaneKey: ChatListSearchPaneKey? var pendingSwitchToPaneKey: ChatListSearchPaneKey? @@ -160,14 +160,14 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD if self.currentPanes[key] != nil { self.currentPaneKey = key - if let (size, sideInset, bottomInset, visibleHeight, presentationData) = self.currentParams { - self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, transition: .animated(duration: 0.4, curve: .spring)) + if let (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) = self.currentParams { + self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, availablePanes: availablePanes, transition: .animated(duration: 0.4, curve: .spring)) } } else if self.pendingSwitchToPaneKey != key { self.pendingSwitchToPaneKey = key - if let (size, sideInset, bottomInset, visibleHeight, presentationData) = self.currentParams { - self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, transition: .animated(duration: 0.4, curve: .spring)) + if let (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) = self.currentParams { + self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, availablePanes: availablePanes, transition: .animated(duration: 0.4, curve: .spring)) } } } @@ -176,7 +176,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD super.didLoad() let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:)), allowedDirections: { [weak self] point in - guard let strongSelf = self, let currentPaneKey = strongSelf.currentPaneKey, let index = availablePanes.firstIndex(of: currentPaneKey) else { + guard let strongSelf = self, let (_, _, _, _, _, availablePanes) = strongSelf.currentParams, let currentPaneKey = strongSelf.currentPaneKey, let index = availablePanes.firstIndex(of: currentPaneKey) else { return [] } if index == 0 { @@ -222,7 +222,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD cancelContextGestures(view: self.view) case .changed: - if let (size, sideInset, bottomInset, visibleHeight, presentationData) = self.currentParams, let currentPaneKey = self.currentPaneKey, let currentIndex = availablePanes.firstIndex(of: currentPaneKey) { + if let (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) = self.currentParams, let currentPaneKey = self.currentPaneKey, let currentIndex = availablePanes.firstIndex(of: currentPaneKey) { self.isAdjacentLoadingEnabled = true let translation = recognizer.translation(in: self.view) var transitionFraction = translation.x / size.width @@ -233,10 +233,10 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD transitionFraction = max(0.0, transitionFraction) } self.transitionFraction = transitionFraction - self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, transition: .immediate) + self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, availablePanes: availablePanes, transition: .immediate) } case .cancelled, .ended: - if let (size, sideInset, bottomInset, visibleHeight, presentationData) = self.currentParams, let currentPaneKey = self.currentPaneKey, let currentIndex = availablePanes.firstIndex(of: currentPaneKey) { + if let (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) = self.currentParams, let currentPaneKey = self.currentPaneKey, let currentIndex = availablePanes.firstIndex(of: currentPaneKey) { let translation = recognizer.translation(in: self.view) let velocity = recognizer.velocity(in: self.view) var directionIsToRight: Bool? @@ -261,7 +261,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD } } self.transitionFraction = 0.0 - self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, transition: .animated(duration: 0.35, curve: .spring)) + self.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, availablePanes: availablePanes, transition: .animated(duration: 0.35, curve: .spring)) } default: break @@ -293,7 +293,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD } } - func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, presentationData: PresentationData, transition: ContainedViewLayoutTransition) { + func update(size: CGSize, sideInset: CGFloat, bottomInset: CGFloat, visibleHeight: CGFloat, presentationData: PresentationData, availablePanes: [ChatListSearchPaneKey], transition: ContainedViewLayoutTransition) { let previousAvailablePanes = self.currentAvailablePanes ?? [] self.currentAvailablePanes = availablePanes @@ -327,7 +327,7 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD currentIndex = nil } - self.currentParams = (size, sideInset, bottomInset, visibleHeight, presentationData) + self.currentParams = (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) self.backgroundColor = presentationData.theme.list.itemBlocksBackgroundColor @@ -376,12 +376,12 @@ final class ChatListSearchPaneContainerNode: ASDisplayNode, UIGestureRecognizerD guard let strongSelf = self else { return } - if let (size, sideInset, bottomInset, visibleHeight, presentationData) = strongSelf.currentParams { + if let (size, sideInset, bottomInset, visibleHeight, presentationData, availablePanes) = strongSelf.currentParams { var transition: ContainedViewLayoutTransition = .immediate if strongSelf.pendingSwitchToPaneKey == key && strongSelf.currentPaneKey != nil { transition = .animated(duration: 0.4, curve: .spring) } - strongSelf.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, transition: transition) + strongSelf.update(size: size, sideInset: sideInset, bottomInset: bottomInset, visibleHeight: visibleHeight, presentationData: presentationData, availablePanes: availablePanes, transition: transition) } } if leftScope { diff --git a/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift b/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift index a92e3ff049..f4fe3ec184 100644 --- a/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift +++ b/submodules/TelegramUI/Sources/PeerSelectionControllerNode.swift @@ -212,7 +212,7 @@ final class PeerSelectionControllerNode: ASDisplayNode { } if self.chatListNode.supernode != nil { - self.searchDisplayController = SearchDisplayController(presentationData: self.presentationData, contentNode: ChatListSearchContainerNode(context: self.context, filter: self.filter, groupId: .root, openPeer: { [weak self] peer, _ in + self.searchDisplayController = SearchDisplayController(presentationData: self.presentationData, contentNode: ChatListSearchContainerNode(context: self.context, filter: self.filter, groupId: .root, displaySearchFilters: false, openPeer: { [weak self] peer, _ in if let requestOpenPeerFromSearch = self?.requestOpenPeerFromSearch { requestOpenPeerFromSearch(peer) }