From fdc90ce6b851134860aec877764a0d0299467444 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sun, 13 Jun 2021 15:57:39 +0300 Subject: [PATCH] Fix peer profile buttons --- .../VideoUnavailable.imageset/Contents.json | 11 ++++++++ .../Sources/PeerInfo/PeerInfoData.swift | 25 ++++++++++++++++++- .../Sources/PeerInfo/PeerInfoHeaderNode.swift | 18 ++----------- .../Sources/PeerInfo/PeerInfoScreen.swift | 23 ++++++++++++++--- 4 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 submodules/TelegramUI/Images.xcassets/Call/VideoUnavailable.imageset/Contents.json diff --git a/submodules/TelegramUI/Images.xcassets/Call/VideoUnavailable.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Call/VideoUnavailable.imageset/Contents.json new file mode 100644 index 0000000000..6fe332016d --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Call/VideoUnavailable.imageset/Contents.json @@ -0,0 +1,11 @@ +{ + "images" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift index 41c0bf59fe..f54a5f3f96 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoData.swift @@ -947,7 +947,27 @@ func availableActionsForMemberOfPeer(accountPeerId: PeerId, peer: Peer?, member: return result } -func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFromChat: Bool, videoCallsEnabled: Bool, isSecretChat: Bool, isContact: Bool) -> [PeerInfoHeaderButtonKey] { +func peerInfoHeaderButtonIsHiddenWhileExpanded(buttonKey: PeerInfoHeaderButtonKey, isOpenedFromChat: Bool) -> Bool { + var hiddenWhileExpanded = false + if isOpenedFromChat { + switch buttonKey { + case .message, .search, .videoCall, .addMember: + hiddenWhileExpanded = true + default: + hiddenWhileExpanded = false + } + } else { + switch buttonKey { + case .search, .call, .videoCall, .addMember: + hiddenWhileExpanded = true + default: + hiddenWhileExpanded = false + } + } + return hiddenWhileExpanded +} + +func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFromChat: Bool, isExpanded: Bool, videoCallsEnabled: Bool, isSecretChat: Bool, isContact: Bool) -> [PeerInfoHeaderButtonKey] { var result: [PeerInfoHeaderButtonKey] = [] if let user = peer as? TelegramUser { if !isOpenedFromChat { @@ -1096,6 +1116,9 @@ func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFro result.append(.search) result.append(.more) } + if isExpanded && result.count > 3 { + result = result.filter { !peerInfoHeaderButtonIsHiddenWhileExpanded(buttonKey: $0, isOpenedFromChat: isOpenedFromChat) } + } return result } diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift index b3ba163f13..662ae05eb1 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoHeaderNode.swift @@ -1999,7 +1999,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { let expandedAvatarListHeight = min(width, containerHeight - expandedAvatarControlsHeight) let expandedAvatarListSize = CGSize(width: width, height: expandedAvatarListHeight) - let buttonKeys: [PeerInfoHeaderButtonKey] = self.isSettings ? [] : peerInfoHeaderButtons(peer: peer, cachedData: cachedData, isOpenedFromChat: self.isOpenedFromChat, videoCallsEnabled: self.videoCallsEnabled, isSecretChat: isSecretChat, isContact: isContact) + let buttonKeys: [PeerInfoHeaderButtonKey] = self.isSettings ? [] : peerInfoHeaderButtons(peer: peer, cachedData: cachedData, isOpenedFromChat: self.isOpenedFromChat, isExpanded: false, videoCallsEnabled: self.videoCallsEnabled, isSecretChat: isSecretChat, isContact: isContact) var isVerified = false let titleString: NSAttributedString @@ -2469,21 +2469,7 @@ final class PeerInfoHeaderNode: ASDisplayNode { let hiddenWhileExpanded: Bool if buttonKeys.count > 3 { - if self.isOpenedFromChat { - switch buttonKey { - case .message, .search, .mute: - hiddenWhileExpanded = true - default: - hiddenWhileExpanded = false - } - } else { - switch buttonKey { - case .mute, .search, .videoCall: - hiddenWhileExpanded = true - default: - hiddenWhileExpanded = false - } - } + hiddenWhileExpanded = peerInfoHeaderButtonIsHiddenWhileExpanded(buttonKey: buttonKey, isOpenedFromChat: self.isOpenedFromChat) } else { hiddenWhileExpanded = false } diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index 3bf8501e47..b1afe3a05d 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -3478,10 +3478,27 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD mainItemsImpl = { var items: [ContextMenuItem] = [] - let headerButtons = peerInfoHeaderButtons(peer: peer, cachedData: data.cachedData, isOpenedFromChat: self.isOpenedFromChat, videoCallsEnabled: self.videoCallsEnabled, isSecretChat: self.peerId.namespace == Namespaces.Peer.SecretChat, isContact: self.data?.isContact ?? false) + let allHeaderButtons = Set(peerInfoHeaderButtons(peer: peer, cachedData: data.cachedData, isOpenedFromChat: self.isOpenedFromChat, isExpanded: false, videoCallsEnabled: self.videoCallsEnabled, isSecretChat: self.peerId.namespace == Namespaces.Peer.SecretChat, isContact: self.data?.isContact ?? false)) + let headerButtons = Set(peerInfoHeaderButtons(peer: peer, cachedData: data.cachedData, isOpenedFromChat: self.isOpenedFromChat, isExpanded: self.headerNode.isAvatarExpanded, videoCallsEnabled: self.videoCallsEnabled, isSecretChat: self.peerId.namespace == Namespaces.Peer.SecretChat, isContact: self.data?.isContact ?? false)) - let hasSearch = !headerButtons.contains(.search) || (self.headerNode.isAvatarExpanded && self.peerId.namespace == Namespaces.Peer.CloudUser) - if hasSearch { + let filteredButtons = allHeaderButtons.subtracting(headerButtons) + if filteredButtons.contains(.addMember) { + items.append(.action(ContextMenuActionItem(text: presentationData.strings.PeerInfo_ButtonAddMember, icon: { theme in + generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/AddUser"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] _, f in + f(.dismissWithoutContent) + self?.openAddMember() + }))) + } + if filteredButtons.contains(.call) { + items.append(.action(ContextMenuActionItem(text: presentationData.strings.PeerInfo_ButtonCall, icon: { theme in + generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Call"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] _, f in + f(.dismissWithoutContent) + self?.requestCall(isVideo: false) + }))) + } + if filteredButtons.contains(.search) { items.append(.action(ContextMenuActionItem(text: presentationData.strings.ChatSearch_SearchPlaceholder, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Search"), color: theme.contextMenu.primaryColor) }, action: { [weak self] _, f in