mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 11:23: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
|
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()
|
let _ = self.context.engine.accountData.updateAdMessagesEnabled(enabled: false).start()
|
||||||
if let adOpaqueId {
|
if let adOpaqueId {
|
||||||
self.removeAd(opaqueId: adOpaqueId)
|
self.removeAd(opaqueId: adOpaqueId)
|
||||||
@ -5541,7 +5544,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
adMessage
|
adMessage
|
||||||
).startStrict(next: { [weak self] peerView, globalNotificationSettings, onlineMemberCount, hasScheduledMessages, peerReportNotice, pinnedCount, threadInfo, hasSearchTags, hasSavedChats, isPremiumRequiredForMessaging, managingBot, adMessage in
|
).startStrict(next: { [weak self] peerView, globalNotificationSettings, onlineMemberCount, hasScheduledMessages, peerReportNotice, pinnedCount, threadInfo, hasSearchTags, hasSavedChats, isPremiumRequiredForMessaging, managingBot, adMessage in
|
||||||
if let strongSelf = self {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5827,11 +5830,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
var adMessage = adMessage
|
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 {
|
} else {
|
||||||
adMessage = nil
|
adMessage = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strongSelf.presentationInterfaceState.adMessage?.id != adMessage?.id {
|
||||||
|
animated = true
|
||||||
|
}
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: animated, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: animated, interactive: false, {
|
||||||
return $0.updatedPeer { _ in
|
return $0.updatedPeer { _ in
|
||||||
return renderedPeer
|
return renderedPeer
|
||||||
|
@ -1432,21 +1432,32 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
|||||||
var dismissedAdPanelNode: ChatAdPanelNode?
|
var dismissedAdPanelNode: ChatAdPanelNode?
|
||||||
var adPanelHeight: CGFloat?
|
var adPanelHeight: CGFloat?
|
||||||
if let _ = self.chatPresentationInterfaceState.adMessage {
|
if let _ = self.chatPresentationInterfaceState.adMessage {
|
||||||
|
var animateAppearance = false
|
||||||
let adPanelNode: ChatAdPanelNode
|
let adPanelNode: ChatAdPanelNode
|
||||||
if let current = self.adPanelNode {
|
if let current = self.adPanelNode {
|
||||||
adPanelNode = current
|
adPanelNode = current
|
||||||
} else {
|
} else {
|
||||||
adPanelNode = ChatAdPanelNode(context: self.context, animationCache: self.controllerInteraction.presentationContext.animationCache, animationRenderer: self.controllerInteraction.presentationContext.animationRenderer)
|
adPanelNode = ChatAdPanelNode(context: self.context, animationCache: self.controllerInteraction.presentationContext.animationCache, animationRenderer: self.controllerInteraction.presentationContext.animationRenderer)
|
||||||
adPanelNode.controllerInteraction = self.controllerInteraction
|
adPanelNode.controllerInteraction = self.controllerInteraction
|
||||||
|
adPanelNode.clipsToBounds = true
|
||||||
|
animateAppearance = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.adPanelNode != adPanelNode {
|
if self.adPanelNode != adPanelNode {
|
||||||
dismissedAdPanelNode = self.adPanelNode
|
dismissedAdPanelNode = self.adPanelNode
|
||||||
self.adPanelNode = 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 {
|
} else if let adPanelNode = self.adPanelNode {
|
||||||
dismissedAdPanelNode = adPanelNode
|
dismissedAdPanelNode = adPanelNode
|
||||||
self.adPanelNode = nil
|
self.adPanelNode = nil
|
||||||
@ -1759,7 +1770,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
|||||||
|
|
||||||
var adPanelFrame: CGRect?
|
var adPanelFrame: CGRect?
|
||||||
if let _ = self.adPanelNode, let panelHeight = adPanelHeight {
|
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
|
insets.top += panelHeight
|
||||||
extraNavigationBarHeight += panelHeight
|
extraNavigationBarHeight += panelHeight
|
||||||
}
|
}
|
||||||
@ -2212,12 +2223,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let adPanelNode = self.adPanelNode, let adPanelFrame, !adPanelNode.frame.equalTo(adPanelFrame) {
|
if let adPanelNode = self.adPanelNode, let adPanelFrame, !adPanelNode.frame.equalTo(adPanelFrame) {
|
||||||
if adPanelNode.frame.width.isZero {
|
adPanelNode.frame = adPanelFrame
|
||||||
adPanelNode.frame = adPanelFrame
|
|
||||||
transition.animatePositionAdditive(node: adPanelNode, offset: CGPoint(x: 0.0, y: -adPanelFrame.height))
|
|
||||||
} else {
|
|
||||||
transition.updateFrame(node: adPanelNode, frame: adPanelFrame)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let secondaryInputPanelNode = self.secondaryInputPanelNode, let apparentSecondaryInputPanelFrame = apparentSecondaryInputPanelFrame, !secondaryInputPanelNode.frame.equalTo(apparentSecondaryInputPanelFrame) {
|
if let secondaryInputPanelNode = self.secondaryInputPanelNode, let apparentSecondaryInputPanelFrame = apparentSecondaryInputPanelFrame, !secondaryInputPanelNode.frame.equalTo(apparentSecondaryInputPanelFrame) {
|
||||||
@ -2339,6 +2345,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
|||||||
if let dismissedAdPanelNode {
|
if let dismissedAdPanelNode {
|
||||||
var dismissedPanelFrame = dismissedAdPanelNode.frame
|
var dismissedPanelFrame = dismissedAdPanelNode.frame
|
||||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||||
|
transition.updateAlpha(node: dismissedAdPanelNode, alpha: 0.0)
|
||||||
transition.updateFrame(node: dismissedAdPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedAdPanelNode] _ in
|
transition.updateFrame(node: dismissedAdPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedAdPanelNode] _ in
|
||||||
dismissedAdPanelNode?.removeFromSupernode()
|
dismissedAdPanelNode?.removeFromSupernode()
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user