mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Ads improvements
This commit is contained in:
parent
025b7d56b0
commit
3eae06e717
@ -4278,6 +4278,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
adOpaqueId = adAttribute.opaqueId
|
||||
}
|
||||
}
|
||||
if adOpaqueId == nil, let panelMessage = self.chatDisplayNode.adPanelNode?.message, let adAttribute = panelMessage.adAttribute {
|
||||
adOpaqueId = adAttribute.opaqueId
|
||||
}
|
||||
let _ = self.context.engine.accountData.updateAdMessagesEnabled(enabled: false).start()
|
||||
if let adOpaqueId {
|
||||
self.removeAd(opaqueId: adOpaqueId)
|
||||
@ -5541,7 +5544,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
adMessage
|
||||
).startStrict(next: { [weak self] peerView, globalNotificationSettings, onlineMemberCount, hasScheduledMessages, peerReportNotice, pinnedCount, threadInfo, hasSearchTags, hasSavedChats, isPremiumRequiredForMessaging, managingBot, adMessage in
|
||||
if let strongSelf = self {
|
||||
if strongSelf.peerView === peerView && strongSelf.reportIrrelvantGeoNotice == peerReportNotice && strongSelf.hasScheduledMessages == hasScheduledMessages && strongSelf.threadInfo == threadInfo && strongSelf.presentationInterfaceState.hasSearchTags == hasSearchTags && strongSelf.presentationInterfaceState.hasSavedChats == hasSavedChats && strongSelf.presentationInterfaceState.isPremiumRequiredForMessaging == isPremiumRequiredForMessaging && managingBot == strongSelf.presentationInterfaceState.contactStatus?.managingBot {
|
||||
if strongSelf.peerView === peerView && strongSelf.reportIrrelvantGeoNotice == peerReportNotice && strongSelf.hasScheduledMessages == hasScheduledMessages && strongSelf.threadInfo == threadInfo && strongSelf.presentationInterfaceState.hasSearchTags == hasSearchTags && strongSelf.presentationInterfaceState.hasSavedChats == hasSavedChats && strongSelf.presentationInterfaceState.isPremiumRequiredForMessaging == isPremiumRequiredForMessaging && managingBot == strongSelf.presentationInterfaceState.contactStatus?.managingBot && adMessage?.id == strongSelf.presentationInterfaceState.adMessage?.id {
|
||||
return
|
||||
}
|
||||
|
||||
@ -5827,11 +5830,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|
||||
var adMessage = adMessage
|
||||
if let peer = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramUser, peer.botInfo != nil {
|
||||
if let peer = peerView.peers[peerView.peerId] as? TelegramUser, peer.botInfo != nil {
|
||||
} else {
|
||||
adMessage = nil
|
||||
}
|
||||
|
||||
if strongSelf.presentationInterfaceState.adMessage?.id != adMessage?.id {
|
||||
animated = true
|
||||
}
|
||||
|
||||
strongSelf.updateChatPresentationInterfaceState(animated: animated, interactive: false, {
|
||||
return $0.updatedPeer { _ in
|
||||
return renderedPeer
|
||||
|
@ -1432,21 +1432,32 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
var dismissedAdPanelNode: ChatAdPanelNode?
|
||||
var adPanelHeight: CGFloat?
|
||||
if let _ = self.chatPresentationInterfaceState.adMessage {
|
||||
var animateAppearance = false
|
||||
let adPanelNode: ChatAdPanelNode
|
||||
if let current = self.adPanelNode {
|
||||
adPanelNode = current
|
||||
} else {
|
||||
adPanelNode = ChatAdPanelNode(context: self.context, animationCache: self.controllerInteraction.presentationContext.animationCache, animationRenderer: self.controllerInteraction.presentationContext.animationRenderer)
|
||||
adPanelNode.controllerInteraction = self.controllerInteraction
|
||||
adPanelNode.clipsToBounds = true
|
||||
animateAppearance = true
|
||||
}
|
||||
|
||||
if self.adPanelNode != adPanelNode {
|
||||
dismissedAdPanelNode = self.adPanelNode
|
||||
self.adPanelNode = adPanelNode
|
||||
self.contentContainerNode.contentNode.addSubnode(adPanelNode)
|
||||
self.titleAccessoryPanelContainer.addSubnode(adPanelNode)
|
||||
|
||||
adPanelNode.clipsToBounds = true
|
||||
}
|
||||
|
||||
adPanelHeight = adPanelNode.updateLayout(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, transition: transition, interfaceState: self.chatPresentationInterfaceState)
|
||||
let height = adPanelNode.updateLayout(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, transition: transition, interfaceState: self.chatPresentationInterfaceState)
|
||||
adPanelHeight = height
|
||||
if transition.isAnimated && animateAppearance {
|
||||
adPanelNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
|
||||
adPanelNode.subnodeTransform = CATransform3DMakeTranslation(0.0, -height, 0.0)
|
||||
transition.updateSublayerTransformOffset(layer: adPanelNode.layer, offset: CGPoint())
|
||||
}
|
||||
} else if let adPanelNode = self.adPanelNode {
|
||||
dismissedAdPanelNode = adPanelNode
|
||||
self.adPanelNode = nil
|
||||
@ -1759,7 +1770,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
|
||||
var adPanelFrame: CGRect?
|
||||
if let _ = self.adPanelNode, let panelHeight = adPanelHeight {
|
||||
adPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: panelHeight))
|
||||
adPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: extraNavigationBarHeight), size: CGSize(width: layout.size.width, height: panelHeight))
|
||||
insets.top += panelHeight
|
||||
extraNavigationBarHeight += panelHeight
|
||||
}
|
||||
@ -2212,12 +2223,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
}
|
||||
|
||||
if let adPanelNode = self.adPanelNode, let adPanelFrame, !adPanelNode.frame.equalTo(adPanelFrame) {
|
||||
if adPanelNode.frame.width.isZero {
|
||||
adPanelNode.frame = adPanelFrame
|
||||
transition.animatePositionAdditive(node: adPanelNode, offset: CGPoint(x: 0.0, y: -adPanelFrame.height))
|
||||
} else {
|
||||
transition.updateFrame(node: adPanelNode, frame: adPanelFrame)
|
||||
}
|
||||
adPanelNode.frame = adPanelFrame
|
||||
}
|
||||
|
||||
if let secondaryInputPanelNode = self.secondaryInputPanelNode, let apparentSecondaryInputPanelFrame = apparentSecondaryInputPanelFrame, !secondaryInputPanelNode.frame.equalTo(apparentSecondaryInputPanelFrame) {
|
||||
@ -2339,6 +2345,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
if let dismissedAdPanelNode {
|
||||
var dismissedPanelFrame = dismissedAdPanelNode.frame
|
||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||
transition.updateAlpha(node: dismissedAdPanelNode, alpha: 0.0)
|
||||
transition.updateFrame(node: dismissedAdPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedAdPanelNode] _ in
|
||||
dismissedAdPanelNode?.removeFromSupernode()
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user