Various Improvements

This commit is contained in:
Ilya Laktyushin 2021-08-13 22:38:08 +03:00
parent dfc224aab0
commit c7faf75032
12 changed files with 105 additions and 48 deletions

View File

@ -1,7 +1,8 @@
import Foundation
import Display
import Postbox
import SwiftSignalKit
import Postbox
import TelegramCore
public struct ChatListNodePeersFilter: OptionSet {
public var rawValue: Int32
@ -40,9 +41,9 @@ public final class PeerSelectionControllerParams {
public let createNewGroup: (() -> Void)?
public let pretendPresentedInModal: Bool
public let multipleSelection: Bool
public let forwardedMessagesCount: Int
public let forwardedMessageIds: [EngineMessage.Id]
public init(context: AccountContext, filter: ChatListNodePeersFilter = [.onlyWriteable], hasChatListSelector: Bool = true, hasContactSelector: Bool = true, hasGlobalSearch: Bool = true, title: String? = nil, attemptSelection: ((Peer) -> Void)? = nil, createNewGroup: (() -> Void)? = nil, pretendPresentedInModal: Bool = false, multipleSelection: Bool = false, forwardedMessagesCount: Int = 0) {
public init(context: AccountContext, filter: ChatListNodePeersFilter = [.onlyWriteable], hasChatListSelector: Bool = true, hasContactSelector: Bool = true, hasGlobalSearch: Bool = true, title: String? = nil, attemptSelection: ((Peer) -> Void)? = nil, createNewGroup: (() -> Void)? = nil, pretendPresentedInModal: Bool = false, multipleSelection: Bool = false, forwardedMessageIds: [EngineMessage.Id] = []) {
self.context = context
self.filter = filter
self.hasChatListSelector = hasChatListSelector
@ -53,7 +54,7 @@ public final class PeerSelectionControllerParams {
self.createNewGroup = createNewGroup
self.pretendPresentedInModal = pretendPresentedInModal
self.multipleSelection = multipleSelection
self.forwardedMessagesCount = forwardedMessagesCount
self.forwardedMessageIds = forwardedMessageIds
}
}
@ -65,7 +66,7 @@ public enum PeerSelectionControllerSendMode {
public protocol PeerSelectionController: ViewController {
var peerSelected: ((Peer) -> Void)? { get set }
var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)? { get set }
var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode, Bool) -> Void)? { get set }
var inProgress: Bool { get set }
var customDismiss: (() -> Void)? { get set }
}

View File

@ -891,12 +891,12 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
}).start()
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode in
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode, hideSendersNames in
guard let strongSelf = self, let strongController = peerSelectionController else {
return
}
strongController.dismiss()
var result: [EnqueueMessage] = []
if messageText.string.count > 0 {
let inputText = convertMarkdownToAttributes(messageText)
@ -912,8 +912,13 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
}
}
var attributes: [MessageAttribute] = []
if hideSendersNames {
attributes.append(ForwardHideSendersNamesMessageAttribute())
}
result.append(contentsOf: messageIds.map { messageId -> EnqueueMessage in
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
return .forward(source: messageId, grouping: .auto, attributes: attributes, correlationId: nil)
})
var displayPeers: [Peer] = []

View File

@ -373,6 +373,8 @@ public func chatMessageStickerPackThumbnail(postbox: Postbox, resource: MediaRes
}
}
addCorners(context, arguments: arguments)
return context
}
}

View File

@ -11033,7 +11033,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
var attemptSelectionImpl: ((Peer) -> Void)?
let controller = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: filter, attemptSelection: { peer in
attemptSelectionImpl?(peer)
}, multipleSelection: true, forwardedMessagesCount: messages.count))
}, multipleSelection: true, forwardedMessageIds: messages.map { $0.id }))
let context = self.context
attemptSelectionImpl = { [weak controller] peer in
guard let controller = controller else {
@ -11048,7 +11048,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Forward_ErrorDisabledForChat, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
}
controller.multiplePeersSelected = { [weak self, weak controller] peers, peerMap, messageText, mode in
controller.multiplePeersSelected = { [weak self, weak controller] peers, peerMap, messageText, mode, hideSendersNames in
guard let strongSelf = self, let strongController = controller else {
return
}
@ -11069,8 +11069,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
}
var attributes: [MessageAttribute] = []
if hideSendersNames {
attributes.append(ForwardHideSendersNamesMessageAttribute())
}
result.append(contentsOf: messages.map { message -> EnqueueMessage in
return .forward(source: message.id, grouping: .auto, attributes: [], correlationId: nil)
return .forward(source: message.id, grouping: .auto, attributes: attributes, correlationId: nil)
})
let commit: ([EnqueueMessage]) -> Void = { result in

View File

@ -549,7 +549,7 @@ final class ChatMediaInputNode: ChatInputNode {
self.listView.useSingleDimensionTouchPoint = true
self.listView.reorderedItemHasShadow = false
self.listView.transform = CATransform3DMakeRotation(-CGFloat(Double.pi / 2.0), 0.0, 0.0, 1.0)
self.listView.scroller.panGestureRecognizer.cancelsTouchesInView = false
self.listView.scroller.panGestureRecognizer.cancelsTouchesInView = true
self.listView.accessibilityPageScrolledString = { row, count in
return strings.VoiceOver_ScrollStatus(row, count).string
}
@ -557,7 +557,7 @@ final class ChatMediaInputNode: ChatInputNode {
self.gifListView = ListView()
self.gifListView.useSingleDimensionTouchPoint = true
self.gifListView.transform = CATransform3DMakeRotation(-CGFloat(Double.pi / 2.0), 0.0, 0.0, 1.0)
self.gifListView.scroller.panGestureRecognizer.cancelsTouchesInView = false
self.gifListView.scroller.panGestureRecognizer.cancelsTouchesInView = true
self.gifListView.accessibilityPageScrolledString = { row, count in
return strings.VoiceOver_ScrollStatus(row, count).string
}

View File

@ -216,7 +216,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode {
switch thumbnailItem {
case let .still(representation):
imageSize = representation.dimensions.cgSize.aspectFitted(boundingImageSize)
let imageApply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: boundingImageSize, intrinsicInsets: UIEdgeInsets()))
let imageApply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(radius: 6.0), imageSize: imageSize, boundingSize: boundingImageSize, intrinsicInsets: UIEdgeInsets()))
imageApply()
self.imageNode.setSignal(chatMessageStickerPackThumbnail(postbox: account.postbox, resource: representation.resource, nilIfEmpty: true))
case let .animated(resource, _):
@ -339,7 +339,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode {
imageSize = representation.dimensions.cgSize.aspectFitted(boundingImageSize)
let imageNode = TransformImageNode()
let imageApply = imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: boundingImageSize, intrinsicInsets: UIEdgeInsets()))
let imageApply = imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(radius: 6.0), imageSize: imageSize, boundingSize: boundingImageSize, intrinsicInsets: UIEdgeInsets()))
imageApply()
imageNode.setSignal(chatMessageStickerPackThumbnail(postbox: account.postbox, resource: representation.resource, nilIfEmpty: true))
scalingNode.addSubnode(imageNode)

View File

@ -28,7 +28,10 @@ private func fixGridScrolling(_ gridNode: GridNode) {
var scrollIndex: Int?
if itemFrame.minY + itemFrame.height * 0.6 < contentInset {
for i in 0 ..< gridNode.items.count {
if let _ = gridNode.items[i] as? ChatMediaInputStickerGridItem {
if let _ = gridNode.items[i] as? StickerPaneTrendingListGridItem {
scrollIndex = i
break
} else if let _ = gridNode.items[i] as? ChatMediaInputStickerGridItem {
scrollIndex = i
break
}

View File

@ -238,14 +238,16 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
self.validLayout = (size, interfaceState)
let bounds = CGRect(origin: CGPoint(), size: CGSize(width: size.width, height: 45.0))
let leftInset: CGFloat = 55.0
let inset: CGFloat = interfaceState.renderedPeer == nil ? 19.0 : 55.0
let leftInset: CGFloat = inset
let rightInset: CGFloat = inset
let textLineInset: CGFloat = 10.0
let rightInset: CGFloat = 55.0
let textRightInset: CGFloat = 20.0
let closeButtonSize = CGSize(width: 44.0, height: bounds.height)
let closeButtonFrame = CGRect(origin: CGPoint(x: bounds.width - rightInset - closeButtonSize.width + 12.0, y: 2.0), size: closeButtonSize)
self.closeButton.frame = closeButtonFrame
self.closeButton.isHidden = interfaceState.renderedPeer == nil
self.actionArea.frame = CGRect(origin: CGPoint(x: leftInset, y: 2.0), size: CGSize(width: closeButtonFrame.minX - leftInset, height: bounds.height))
@ -288,7 +290,11 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
@objc func tapGesture(_ recognizer: UITapGestureRecognizer) {
if case .ended = recognizer.state {
self.closePressed()
if self.closeButton.isHidden {
self.interfaceInteraction?.updateForwardMessageHideSendersNames(!self.hideSendersNames)
} else {
self.closePressed()
}
}
}
}

View File

@ -5645,7 +5645,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
func forwardMessages(messageIds: Set<MessageId>?) {
if let messageIds = messageIds ?? self.state.selectedMessageIds, !messageIds.isEmpty {
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode in
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode, hideSendersNames in
guard let strongSelf = self, let strongController = peerSelectionController else {
return
}
@ -5666,8 +5666,13 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
}
}
var attributes: [MessageAttribute] = []
if hideSendersNames {
attributes.append(ForwardHideSendersNamesMessageAttribute())
}
result.append(contentsOf: messageIds.map { messageId -> EnqueueMessage in
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
return .forward(source: messageId, grouping: .auto, attributes: attributes, correlationId: nil)
})
var displayPeers: [Peer] = []

View File

@ -19,7 +19,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
private var customTitle: String?
public var peerSelected: ((Peer) -> Void)?
public var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
public var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode, Bool) -> Void)?
private let filter: ChatListNodePeersFilter
private let attemptSelection: ((Peer) -> Void)?
@ -58,7 +58,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
private let hasContactSelector: Bool
private let hasGlobalSearch: Bool
private let pretendPresentedInModal: Bool
private let forwardedMessagesCount: Int
private let forwardedMessageIds: [EngineMessage.Id]
override public var _presentedInModal: Bool {
get {
@ -86,7 +86,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
self.attemptSelection = params.attemptSelection
self.createNewGroup = params.createNewGroup
self.pretendPresentedInModal = params.pretendPresentedInModal
self.forwardedMessagesCount = params.forwardedMessagesCount
self.forwardedMessageIds = params.forwardedMessageIds
super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData))
@ -150,7 +150,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
}
override public func loadDisplayNode() {
self.displayNode = PeerSelectionControllerNode(context: self.context, filter: self.filter, hasChatListSelector: self.hasChatListSelector, hasContactSelector: self.hasContactSelector, hasGlobalSearch: self.hasGlobalSearch, forwardedMessagesCount: self.forwardedMessagesCount, createNewGroup: self.createNewGroup, present: { [weak self] c, a in
self.displayNode = PeerSelectionControllerNode(context: self.context, filter: self.filter, hasChatListSelector: self.hasChatListSelector, hasContactSelector: self.hasContactSelector, hasGlobalSearch: self.hasGlobalSearch, forwardedMessageIds: self.forwardedMessageIds, createNewGroup: self.createNewGroup, present: { [weak self] c, a in
self?.present(c, in: .window(.root), with: a)
}, presentInGlobalOverlay: { [weak self] c, a in
self?.presentInGlobalOverlay(c, with: a)
@ -160,8 +160,8 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
self.peerSelectionNode.navigationBar = self.navigationBar
self.peerSelectionNode.requestSend = { [weak self] peers, peerMap, text, mode in
self?.multiplePeersSelected?(peers, peerMap, text, mode)
self.peerSelectionNode.requestSend = { [weak self] peers, peerMap, text, mode, hideSendersNames in
self?.multiplePeersSelected?(peers, peerMap, text, mode, hideSendersNames)
}
self.peerSelectionNode.requestDeactivateSearch = { [weak self] in

View File

@ -20,6 +20,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
private let dismiss: () -> Void
private let filter: ChatListNodePeersFilter
private let hasGlobalSearch: Bool
private let forwardedMessageIds: [EngineMessage.Id]
private var presentationInterfaceState: ChatPresentationInterfaceState
private var interfaceInteraction: ChatPanelInterfaceInteraction?
@ -37,6 +38,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
private let segmentedControlNode: SegmentedControlNode?
private var textInputPanelNode: PeerSelectionTextInputPanelNode?
private var forwardAccessoryPanelNode: ForwardAccessoryPanelNode?
var contactListNode: ContactListNode?
let chatListNode: ChatListNode
@ -56,7 +58,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
var requestOpenDisabledPeer: ((Peer) -> Void)?
var requestOpenPeerFromSearch: ((Peer) -> Void)?
var requestOpenMessageFromSearch: ((Peer, MessageId) -> Void)?
var requestSend: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
var requestSend: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode, Bool) -> Void)?
private var presentationData: PresentationData
private var presentationDataDisposable: Disposable?
@ -66,28 +68,21 @@ final class PeerSelectionControllerNode: ASDisplayNode {
return self.readyValue.get()
}
init(context: AccountContext, filter: ChatListNodePeersFilter, hasChatListSelector: Bool, hasContactSelector: Bool, hasGlobalSearch: Bool, forwardedMessagesCount: Int, createNewGroup: (() -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void) {
init(context: AccountContext, filter: ChatListNodePeersFilter, hasChatListSelector: Bool, hasContactSelector: Bool, hasGlobalSearch: Bool, forwardedMessageIds: [EngineMessage.Id], createNewGroup: (() -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void) {
self.context = context
self.present = present
self.presentInGlobalOverlay = presentInGlobalOverlay
self.dismiss = dismiss
self.filter = filter
self.hasGlobalSearch = hasGlobalSearch
self.forwardedMessageIds = forwardedMessageIds
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
self.presentationData = presentationData
self.presentationInterfaceState = ChatPresentationInterfaceState(chatWallpaper: .builtin(WallpaperSettings()), theme: self.presentationData.theme, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameDisplayOrder: self.presentationData.nameDisplayOrder, limitsConfiguration: self.context.currentLimitsConfiguration.with { $0 }, fontSize: self.presentationData.chatFontSize, bubbleCorners: self.presentationData.chatBubbleCorners, accountPeerId: self.context.account.peerId, mode: .standard(previewing: false), chatLocation: .peer(PeerId(0)), subject: nil, peerNearbyData: nil, greetingData: nil, pendingUnpinnedAllMessages: false, activeGroupCallInfo: nil, hasActiveGroupCall: false, importState: nil)
var mockMessageIds: [MessageId]?
if forwardedMessagesCount > 0 {
var messageIds: [MessageId] = []
for _ in 0 ..< forwardedMessagesCount {
messageIds.append(MessageId(peerId: PeerId(0), namespace: Namespaces.Message.Local, id: Int32.random(in: 0 ..< Int32.max)))
}
mockMessageIds = messageIds
}
self.presentationInterfaceState = self.presentationInterfaceState.updatedInterfaceState { $0.withUpdatedForwardMessageIds(mockMessageIds) }
self.presentationInterfaceState = self.presentationInterfaceState.updatedInterfaceState { $0.withUpdatedForwardMessageIds(forwardedMessageIds) }
if hasChatListSelector && hasContactSelector {
self.toolbarBackgroundNode = NavigationBackgroundNode(color: self.presentationData.theme.rootController.navigationBar.blurredBackgroundColor)
@ -198,7 +193,10 @@ final class PeerSelectionControllerNode: ASDisplayNode {
}, forwardSelectedMessages: {
}, forwardCurrentForwardMessages: {
}, forwardMessages: { _ in
}, updateForwardMessageHideSendersNames: { _ in
}, updateForwardMessageHideSendersNames: { [weak self] value in
if let strongSelf = self {
strongSelf.updateChatPresentationInterfaceState(animated: true, { $0.updatedInterfaceState({ $0.withUpdatedForwardMessageHideSendersNames(value) }) })
}
}, shareSelectedMessages: {
}, updateTextInputStateAndMode: { [weak self] f in
if let strongSelf = self {
@ -336,6 +334,11 @@ final class PeerSelectionControllerNode: ASDisplayNode {
func beginSelection() {
if let _ = self.textInputPanelNode {
} else {
let forwardAccessoryPanelNode = ForwardAccessoryPanelNode(context: self.context, messageIds: self.forwardedMessageIds, theme: self.presentationData.theme, strings: self.presentationData.strings, fontSize: self.presentationData.chatFontSize, nameDisplayOrder: self.presentationData.nameDisplayOrder, hideSendersNames: false)
forwardAccessoryPanelNode.interfaceInteraction = self.interfaceInteraction
self.addSubnode(forwardAccessoryPanelNode)
self.forwardAccessoryPanelNode = forwardAccessoryPanelNode
let textInputPanelNode = PeerSelectionTextInputPanelNode(presentationInterfaceState: self.presentationInterfaceState, presentController: { [weak self] c in self?.present(c, nil) })
textInputPanelNode.interfaceInteraction = self.interfaceInteraction
textInputPanelNode.sendMessage = { [weak self] mode in
@ -343,10 +346,13 @@ final class PeerSelectionControllerNode: ASDisplayNode {
return
}
let effectiveInputText = strongSelf.presentationInterfaceState.interfaceState.composeInputState.inputText
let hideSendersNames = strongSelf.presentationInterfaceState.interfaceState.forwardMessageHideSendersNames
if strongSelf.contactListActive {
strongSelf.contactListNode?.multipleSelection = true
let selectedContactPeers = strongSelf.contactListNode?.selectedPeers ?? []
let effectiveInputText = strongSelf.presentationInterfaceState.interfaceState.composeInputState.inputText
var selectedPeers: [Peer] = []
var selectedPeerMap: [PeerId: Peer] = [:]
for contactPeer in selectedContactPeers {
@ -356,7 +362,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
}
}
if !selectedPeers.isEmpty {
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode)
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode, hideSendersNames)
}
} else {
var selectedPeerIds: [PeerId] = []
@ -367,14 +373,13 @@ final class PeerSelectionControllerNode: ASDisplayNode {
return state
}
if !selectedPeerIds.isEmpty {
let effectiveInputText = strongSelf.presentationInterfaceState.interfaceState.composeInputState.inputText
var selectedPeers: [Peer] = []
for peerId in selectedPeerIds {
if let peer = selectedPeerMap[peerId] {
selectedPeers.append(peer)
}
}
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode)
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode, hideSendersNames)
}
}
}
@ -417,6 +422,12 @@ final class PeerSelectionControllerNode: ASDisplayNode {
var toolbarHeight: CGFloat = cleanInsets.bottom
var textPanelHeight: CGFloat?
var accessoryHeight: CGFloat = 0.0
if let forwardAccessoryPanelNode = self.forwardAccessoryPanelNode {
let size = forwardAccessoryPanelNode.calculateSizeThatFits(CGSize(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right, height: layout.size.height))
accessoryHeight = size.height
}
if let textInputPanelNode = self.textInputPanelNode {
var panelTransition = transition
@ -434,15 +445,30 @@ final class PeerSelectionControllerNode: ASDisplayNode {
let panelFrame = CGRect(x: 0.0, y: layout.size.height - panelHeight, width: layout.size.width, height: panelHeight)
if textInputPanelNode.frame.width.isZero {
var initialPanelFrame = panelFrame
initialPanelFrame.origin.y = layout.size.height
initialPanelFrame.origin.y = layout.size.height + accessoryHeight
textInputPanelNode.frame = initialPanelFrame
}
transition.updateFrame(node: textInputPanelNode, frame: panelFrame)
}
if let forwardAccessoryPanelNode = self.forwardAccessoryPanelNode {
let size = forwardAccessoryPanelNode.calculateSizeThatFits(CGSize(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right, height: layout.size.height))
forwardAccessoryPanelNode.updateState(size: size, interfaceState: self.presentationInterfaceState)
forwardAccessoryPanelNode.updateThemeAndStrings(theme: self.presentationData.theme, strings: self.presentationData.strings, hideSendersNames: self.presentationInterfaceState.interfaceState.forwardMessageHideSendersNames)
let panelFrame = CGRect(x: layout.safeInsets.left, y: layout.size.height - (textPanelHeight ?? 0.0) - size.height, width: size.width - layout.safeInsets.left - layout.safeInsets.right, height: size.height)
accessoryHeight = size.height
if forwardAccessoryPanelNode.frame.width.isZero {
var initialPanelFrame = panelFrame
initialPanelFrame.origin.y = layout.size.height
forwardAccessoryPanelNode.frame = initialPanelFrame
}
transition.updateFrame(node: forwardAccessoryPanelNode, frame: panelFrame)
}
if let segmentedControlNode = self.segmentedControlNode, let toolbarBackgroundNode = self.toolbarBackgroundNode, let toolbarSeparatorNode = self.toolbarSeparatorNode {
if let textPanelHeight = textPanelHeight {
toolbarHeight = textPanelHeight
toolbarHeight = textPanelHeight + accessoryHeight
} else {
toolbarHeight += 44.0
}

View File

@ -166,7 +166,7 @@ private final class FeaturedPackItemNode: ListViewItemNode {
self.visibilityStatus = self.visibility != .none
}
}
var visibilityStatus: Bool = false {
didSet {
if self.visibilityStatus != oldValue {
@ -291,7 +291,7 @@ private final class FeaturedPackItemNode: ListViewItemNode {
} else {
self.containerNode.addSubnode(animatedStickerNode)
}
animatedStickerNode.setup(source: AnimatedStickerResourceSource(account: account, resource: resource), width: 80, height: 80, mode: .direct(cachePathPrefix: nil))
animatedStickerNode.setup(source: AnimatedStickerResourceSource(account: account, resource: resource), width: 128, height: 128, mode: .cached)
}
animatedStickerNode.visibility = self.visibilityStatus && loopAnimatedStickers
}
@ -398,7 +398,7 @@ class StickerPaneTrendingListGridItemNode: GridItemNode {
override var isVisibleInGrid: Bool {
didSet {
self.updateVisibility()
}
}
@ -453,6 +453,10 @@ class StickerPaneTrendingListGridItemNode: GridItemNode {
self.setNeedsLayout()
}
func updateVisibility() {
}
override func layout() {
super.layout()
guard let item = self.item else {