Fix call rating alert layout

This commit is contained in:
Ilya Laktyushin 2020-05-06 15:54:22 +04:00
parent ad3147dbbf
commit 1e914ba95c
3 changed files with 53 additions and 10 deletions

View File

@ -7,6 +7,7 @@ open class ASButtonNode: ASControlNode {
public let highlightedTitleNode: ImmediateTextNode public let highlightedTitleNode: ImmediateTextNode
public let disabledTitleNode: ImmediateTextNode public let disabledTitleNode: ImmediateTextNode
public let imageNode: ASImageNode public let imageNode: ASImageNode
public let highlightedImageNode: ASImageNode
public let disabledImageNode: ASImageNode public let disabledImageNode: ASImageNode
public let backgroundImageNode: ASImageNode public let backgroundImageNode: ASImageNode
public let highlightedBackgroundImageNode: ASImageNode public let highlightedBackgroundImageNode: ASImageNode
@ -69,6 +70,11 @@ open class ASButtonNode: ASControlNode {
self.imageNode.displaysAsynchronously = false self.imageNode.displaysAsynchronously = false
self.imageNode.displayWithoutProcessing = true self.imageNode.displayWithoutProcessing = true
self.highlightedImageNode = ASImageNode()
self.highlightedImageNode.isUserInteractionEnabled = false
self.highlightedImageNode.displaysAsynchronously = false
self.highlightedImageNode.displayWithoutProcessing = true
self.disabledImageNode = ASImageNode() self.disabledImageNode = ASImageNode()
self.disabledImageNode.isUserInteractionEnabled = false self.disabledImageNode.isUserInteractionEnabled = false
self.disabledImageNode.displaysAsynchronously = false self.disabledImageNode.displaysAsynchronously = false
@ -95,6 +101,8 @@ open class ASButtonNode: ASControlNode {
self.addSubnode(self.disabledTitleNode) self.addSubnode(self.disabledTitleNode)
self.disabledTitleNode.isHidden = true self.disabledTitleNode.isHidden = true
self.addSubnode(self.imageNode) self.addSubnode(self.imageNode)
self.addSubnode(self.highlightedImageNode)
self.highlightedImageNode.isHidden = true
self.addSubnode(self.disabledImageNode) self.addSubnode(self.disabledImageNode)
self.disabledImageNode.isHidden = true self.disabledImageNode.isHidden = true
} }
@ -216,6 +224,11 @@ open class ASButtonNode: ASControlNode {
} }
if state == .disabled { if state == .disabled {
self.disabledImageNode.image = image self.disabledImageNode.image = image
} else if state == [] {
self.imageNode.image = image
self.highlightedImageNode.image = image
} else if state == .highlighted || state == .selected || state == [.selected, .highlighted] {
self.highlightedImageNode.image = image
} else { } else {
self.imageNode.image = image self.imageNode.image = image
} }
@ -225,7 +238,7 @@ open class ASButtonNode: ASControlNode {
if state == [] { if state == [] {
self.backgroundImageNode.image = image self.backgroundImageNode.image = image
self.highlightedBackgroundImageNode.image = image self.highlightedBackgroundImageNode.image = image
} else if state == .highlighted || state == .selected { } else if state == .highlighted || state == .selected || state == [.selected, .highlighted] {
self.highlightedBackgroundImageNode.image = image self.highlightedBackgroundImageNode.image = image
} else { } else {
self.backgroundImageNode.image = image self.backgroundImageNode.image = image
@ -245,10 +258,29 @@ open class ASButtonNode: ASControlNode {
return self.backgroundImageNode.image return self.backgroundImageNode.image
} }
override open var isSelected: Bool {
didSet {
if self.isSelected != oldValue {
if self.isSelected {
if self.highlightedImageNode.image != nil {
self.highlightedImageNode.isHidden = false
self.imageNode.isHidden = true
} else {
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
}
} else {
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
}
}
}
}
override open var isHighlighted: Bool { override open var isHighlighted: Bool {
didSet { didSet {
if self.isHighlighted != oldValue { if self.isHighlighted != oldValue {
if self.isHighlighted { if self.isHighlighted || self.isSelected {
if self.highlightedTitleNode.attributedText != nil { if self.highlightedTitleNode.attributedText != nil {
self.highlightedTitleNode.isHidden = false self.highlightedTitleNode.isHidden = false
self.titleNode.isHidden = true self.titleNode.isHidden = true
@ -263,12 +295,22 @@ open class ASButtonNode: ASControlNode {
self.highlightedBackgroundImageNode.isHidden = true self.highlightedBackgroundImageNode.isHidden = true
self.backgroundImageNode.isHidden = false self.backgroundImageNode.isHidden = false
} }
if self.highlightedImageNode.image != nil {
self.highlightedImageNode.isHidden = false
self.imageNode.isHidden = true
} else {
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
}
} else { } else {
self.highlightedTitleNode.isHidden = true self.highlightedTitleNode.isHidden = true
self.titleNode.isHidden = false self.titleNode.isHidden = false
self.highlightedBackgroundImageNode.isHidden = true self.highlightedBackgroundImageNode.isHidden = true
self.backgroundImageNode.isHidden = false self.backgroundImageNode.isHidden = false
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
} }
} }
} }
@ -342,6 +384,7 @@ open class ASButtonNode: ASControlNode {
self.highlightedTitleNode.frame = CGRect(origin: highlightedTitleOrigin, size: self.calculatedHighlightedTitleSize) self.highlightedTitleNode.frame = CGRect(origin: highlightedTitleOrigin, size: self.calculatedHighlightedTitleSize)
self.disabledTitleNode.frame = CGRect(origin: disabledTitleOrigin, size: self.calculatedDisabledTitleSize) self.disabledTitleNode.frame = CGRect(origin: disabledTitleOrigin, size: self.calculatedDisabledTitleSize)
self.imageNode.frame = CGRect(origin: imageOrigin, size: imageSize) self.imageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.highlightedImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.disabledImageNode.frame = CGRect(origin: imageOrigin, size: imageSize) self.disabledImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.backgroundImageNode.frame = CGRect(origin: CGPoint(), size: size) self.backgroundImageNode.frame = CGRect(origin: CGPoint(), size: size)

View File

@ -140,13 +140,7 @@ private final class CallRatingAlertContentNode: AlertContentNode {
size.width = min(size.width , 270.0) size.width = min(size.width , 270.0)
self.validLayout = size self.validLayout = size
var origin: CGPoint = CGPoint(x: 0.0, y: 20.0)
let titleSize = self.titleNode.measure(CGSize(width: size.width - 32.0, height: size.height))
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - titleSize.width) / 2.0), y: origin.y), size: titleSize))
origin.y += titleSize.height + 13.0
let actionButtonHeight: CGFloat = 44.0 let actionButtonHeight: CGFloat = 44.0
var minActionsWidth: CGFloat = 0.0 var minActionsWidth: CGFloat = 0.0
let maxActionWidth: CGFloat = floor(size.width / CGFloat(self.actionNodes.count)) let maxActionWidth: CGFloat = floor(size.width / CGFloat(self.actionNodes.count))
@ -168,6 +162,9 @@ private final class CallRatingAlertContentNode: AlertContentNode {
let insets = UIEdgeInsets(top: 18.0, left: 18.0, bottom: 18.0, right: 18.0) let insets = UIEdgeInsets(top: 18.0, left: 18.0, bottom: 18.0, right: 18.0)
var origin: CGPoint = CGPoint(x: 0.0, y: 20.0)
let titleSize = self.titleNode.measure(CGSize(width: size.width - 32.0, height: size.height))
var contentWidth = max(titleSize.width, minActionsWidth) var contentWidth = max(titleSize.width, minActionsWidth)
contentWidth = max(contentWidth, 234.0) contentWidth = max(contentWidth, 234.0)
@ -181,6 +178,9 @@ private final class CallRatingAlertContentNode: AlertContentNode {
let resultWidth = contentWidth + insets.left + insets.right let resultWidth = contentWidth + insets.left + insets.right
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((resultWidth - titleSize.width) / 2.0), y: origin.y), size: titleSize))
origin.y += titleSize.height + 13.0
let starSize = CGSize(width: 42.0, height: 38.0) let starSize = CGSize(width: 42.0, height: 38.0)
let starsOrigin = floorToScreenPixels((resultWidth - starSize.width * 5.0) / 2.0) let starsOrigin = floorToScreenPixels((resultWidth - starSize.width * 5.0) / 2.0)
for i in 0 ..< self.starNodes.count { for i in 0 ..< self.starNodes.count {

View File

@ -534,7 +534,7 @@ public final class PresentationCallImpl: PresentationCall {
if !self.shouldPresentCallRating { if !self.shouldPresentCallRating {
self.ongoingContext.needsRating { needsRating in self.ongoingContext.needsRating { needsRating in
self.shouldPresentCallRating = needsRating // self.shouldPresentCallRating = needsRating
} }
} }
} }