mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
123 lines
4.0 KiB
Swift
123 lines
4.0 KiB
Swift
import Foundation
|
|
import Display
|
|
import AsyncDisplayKit
|
|
import Postbox
|
|
import TelegramCore
|
|
|
|
private enum ChatInfoTitleButton {
|
|
case search
|
|
case info
|
|
case mute
|
|
case unmute
|
|
|
|
var title: String {
|
|
switch self {
|
|
case .search:
|
|
return "Search"
|
|
case .info:
|
|
return "Info"
|
|
case .mute:
|
|
return "Mute"
|
|
case .unmute:
|
|
return "Unmute"
|
|
}
|
|
}
|
|
}
|
|
|
|
private func peerButtons(_ peer: Peer) -> [ChatInfoTitleButton] {
|
|
if let _ = peer as? TelegramUser {
|
|
return [.search, .info]
|
|
} else {
|
|
return [.search, .mute]
|
|
}
|
|
}
|
|
|
|
final class ChatInfoTitlePanelNode: ChatTitleAccessoryPanelNode {
|
|
private let separatorNode: ASDisplayNode
|
|
|
|
private var buttons: [(ChatInfoTitleButton, UIButton)] = []
|
|
|
|
override init() {
|
|
self.separatorNode = ASDisplayNode()
|
|
self.separatorNode.backgroundColor = UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0)
|
|
self.separatorNode.isLayerBacked = true
|
|
|
|
super.init()
|
|
|
|
self.backgroundColor = UIColor(0xF5F6F8)
|
|
|
|
self.addSubnode(self.separatorNode)
|
|
}
|
|
|
|
override func updateLayout(width: CGFloat, transition: ContainedViewLayoutTransition, interfaceState: ChatPresentationInterfaceState) -> CGFloat {
|
|
let panelHeight: CGFloat = 44.0
|
|
|
|
let updatedButtons: [ChatInfoTitleButton]
|
|
if let peer = interfaceState.peer {
|
|
updatedButtons = peerButtons(peer)
|
|
} else {
|
|
updatedButtons = []
|
|
}
|
|
|
|
var buttonsUpdated = false
|
|
if self.buttons.count != updatedButtons.count {
|
|
buttonsUpdated = true
|
|
} else {
|
|
for i in 0 ..< updatedButtons.count {
|
|
if self.buttons[i].0 != updatedButtons[i] {
|
|
buttonsUpdated = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
if buttonsUpdated {
|
|
for (_, view) in self.buttons {
|
|
view.removeFromSuperview()
|
|
}
|
|
self.buttons.removeAll()
|
|
for button in updatedButtons {
|
|
let view = UIButton()
|
|
view.setTitle(button.title, for: [])
|
|
view.titleLabel?.font = Font.regular(17.0)
|
|
view.setTitleColor(UIColor(0x007ee5), for: [])
|
|
view.setTitleColor(UIColor(0x007ee5).withAlphaComponent(0.7), for: [.highlighted])
|
|
view.addTarget(self, action: #selector(self.buttonPressed(_:)), for: [.touchUpInside])
|
|
self.view.addSubview(view)
|
|
self.buttons.append((button, view))
|
|
}
|
|
}
|
|
|
|
if !self.buttons.isEmpty {
|
|
let buttonWidth = floor(width / CGFloat(self.buttons.count))
|
|
var nextButtonOrigin: CGFloat = 0.0
|
|
for (_, view) in self.buttons {
|
|
view.frame = CGRect(origin: CGPoint(x: nextButtonOrigin, y: 0.0), size: CGSize(width: buttonWidth, height: panelHeight))
|
|
nextButtonOrigin += buttonWidth
|
|
}
|
|
}
|
|
|
|
transition.updateFrame(node: self.separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: panelHeight - UIScreenPixel), size: CGSize(width: width, height: UIScreenPixel)))
|
|
|
|
return panelHeight
|
|
}
|
|
|
|
@objc func buttonPressed(_ view: UIButton) {
|
|
for (button, buttonView) in self.buttons {
|
|
if buttonView === view {
|
|
switch button {
|
|
case .info:
|
|
self.interfaceInteraction?.openPeerInfo()
|
|
case .mute:
|
|
self.interfaceInteraction?.togglePeerNotifications()
|
|
case .unmute:
|
|
self.interfaceInteraction?.togglePeerNotifications()
|
|
case .search:
|
|
self.interfaceInteraction?.beginMessageSearch()
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|