diff --git a/Signal/Images.xcassets/alert.imageset/Contents.json b/Signal/Images.xcassets/alert.imageset/Contents.json new file mode 100644 index 0000000000..99404db4da --- /dev/null +++ b/Signal/Images.xcassets/alert.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "alert.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/alert.imageset/alert.pdf b/Signal/Images.xcassets/alert.imageset/alert.pdf new file mode 100644 index 0000000000..34a72dbd35 Binary files /dev/null and b/Signal/Images.xcassets/alert.imageset/alert.pdf differ diff --git a/Signal/src/ViewControllers/Donations/BadgeIssueSheet.swift b/Signal/src/ViewControllers/Donations/BadgeIssueSheet.swift index e411b81667..91ee78b866 100644 --- a/Signal/src/ViewControllers/Donations/BadgeIssueSheet.swift +++ b/Signal/src/ViewControllers/Donations/BadgeIssueSheet.swift @@ -240,6 +240,23 @@ public class BadgeIssueSheetState { ) } }() + + var showIconAlert: Bool { + switch mode { + case + .boostExpired, + .giftBadgeExpired, + .bankPaymentFailed, + .subscriptionExpiredBecauseOfChargeFailure, + .subscriptionExpiredBecauseNotRenewed: + return true + case + .giftNotRedeemed, + .boostBankPaymentProcessing, + .subscriptionBankPaymentProcessing: + return false + } + } } class BadgeIssueSheet: OWSTableSheetViewController { @@ -283,17 +300,30 @@ class BadgeIssueSheet: OWSTableSheetViewController { let stackView = UIStackView() stackView.axis = .vertical stackView.alignment = .center - stackView.layoutMargins = UIEdgeInsets(hMargin: 24, vMargin: 0) + stackView.layoutMargins = .init(top: 24, left: 24, bottom: 0, right: 24) stackView.isLayoutMarginsRelativeArrangement = true cell.contentView.addSubview(stackView) stackView.autoPinEdgesToSuperviewEdges() + let containerView = UIView() + stackView.addArrangedSubview(containerView) + stackView.setCustomSpacing(24, after: containerView) + let badgeImageView = UIImageView() - badgeImageView.image = self.state.badge.assets?.universal112 - badgeImageView.autoSetDimensions(to: CGSize(square: 112)) - stackView.addArrangedSubview(badgeImageView) - stackView.setCustomSpacing(16, after: badgeImageView) + badgeImageView.image = self.state.badge.assets?.universal160 + badgeImageView.autoSetDimensions(to: CGSize(square: 80)) + containerView.addSubview(badgeImageView) + badgeImageView.autoPinEdgesToSuperviewEdges() + + if self.state.showIconAlert { + let alertImageView = UIImageView() + alertImageView.image = UIImage(named: "alert") + alertImageView.autoSetDimensions(to: CGSize(square: 24)) + containerView.addSubview(alertImageView) + alertImageView.autoPinEdge(.right, to: .right, of: badgeImageView) + alertImageView.autoPinEdge(.top, to: .top, of: badgeImageView) + } let titleLabel = UILabel() titleLabel.font = .dynamicTypeTitle2.semibold() @@ -311,7 +341,7 @@ class BadgeIssueSheet: OWSTableSheetViewController { comment: "Text for the 'learn more' link in a sheet explaining there's been an issue with your badge." ).styled(with: .link(learnMoreLink)) let label = LinkingTextView() - label.attributedText = .composed(of: [self.state.body.text, " ", learnMore]).styled(with: .color(Theme.primaryTextColor), .font(.dynamicTypeBody)) + label.attributedText = .composed(of: [self.state.body.text, " ", learnMore]).styled(with: .color(Theme.secondaryTextAndIconColor), .font(.dynamicTypeSubheadlineClamped)) label.textAlignment = .center label.linkTextAttributes = [ .foregroundColor: Theme.accentBlueColor, @@ -321,15 +351,15 @@ class BadgeIssueSheet: OWSTableSheetViewController { bodyLabel = label } else { let label = UILabel() - label.font = .dynamicTypeBody - label.textColor = Theme.primaryTextColor + label.font = .dynamicTypeSubheadlineClamped + label.textColor = Theme.secondaryTextAndIconColor label.numberOfLines = 0 label.text = self.state.body.text label.textAlignment = .center bodyLabel = label } stackView.addArrangedSubview(bodyLabel) - stackView.setCustomSpacing(30, after: bodyLabel) + stackView.setCustomSpacing(24, after: bodyLabel) return cell }, actionBlock: nil)) @@ -345,7 +375,7 @@ class BadgeIssueSheet: OWSTableSheetViewController { let stackView = UIStackView() stackView.axis = .vertical stackView.alignment = .center - stackView.layoutMargins = UIEdgeInsets(top: 30, left: 24, bottom: 30, right: 24) + stackView.layoutMargins = UIEdgeInsets(top: 12, left: 24, bottom: 12, right: 24) stackView.spacing = 16 stackView.isLayoutMarginsRelativeArrangement = true cell.contentView.addSubview(stackView) diff --git a/Signal/src/ViewControllers/Donations/BadgeThanksSheet.swift b/Signal/src/ViewControllers/Donations/BadgeThanksSheet.swift index 41bfa96edf..1f8422212a 100644 --- a/Signal/src/ViewControllers/Donations/BadgeThanksSheet.swift +++ b/Signal/src/ViewControllers/Donations/BadgeThanksSheet.swift @@ -316,6 +316,12 @@ class BadgeThanksSheet: OWSTableSheetViewController { cell.contentView.addSubview(stackView) stackView.autoPinEdgesToSuperviewMargins() + let badgeImageView = UIImageView() + badgeImageView.image = self.badge.assets?.universal160 + badgeImageView.autoSetDimensions(to: CGSize(square: 80)) + stackView.addArrangedSubview(badgeImageView) + stackView.setCustomSpacing(24, after: badgeImageView) + let titleLabel = UILabel() titleLabel.font = .dynamicTypeTitle2.semibold() titleLabel.textColor = Theme.primaryTextColor @@ -326,42 +332,13 @@ class BadgeThanksSheet: OWSTableSheetViewController { stackView.setCustomSpacing(12, after: titleLabel) let bodyLabel = UILabel() - bodyLabel.font = .dynamicTypeBody - bodyLabel.textColor = Theme.primaryTextColor + bodyLabel.font = .dynamicTypeSubheadlineClamped + bodyLabel.textColor = Theme.secondaryTextAndIconColor bodyLabel.textAlignment = .center bodyLabel.numberOfLines = 0 bodyLabel.text = self.bodyText stackView.addArrangedSubview(bodyLabel) - stackView.setCustomSpacing(30, after: bodyLabel) - - let badgeImageView = UIImageView() - let shouldShowBadgeLabel: Bool - switch self.thanksType { - case .badgeRedeemedViaBankPayment, .badgeRedeemedViaNonBankPayment: - badgeImageView.image = self.badge.assets?.universal160 - badgeImageView.autoSetDimensions(to: CGSize(square: 160)) - shouldShowBadgeLabel = true - case .giftReceived: - // Use a smaller image for gifts since they have an extra button. - badgeImageView.image = self.badge.assets?.universal112 - badgeImageView.autoSetDimensions(to: CGSize(square: 112)) - shouldShowBadgeLabel = false - } - stackView.addArrangedSubview(badgeImageView) - - if shouldShowBadgeLabel { - let badgeLabel = UILabel() - badgeLabel.font = .dynamicTypeTitle3.semibold() - badgeLabel.textColor = Theme.primaryTextColor - badgeLabel.textAlignment = .center - badgeLabel.numberOfLines = 0 - badgeLabel.text = self.badge.localizedName - stackView.addArrangedSubview(badgeLabel) - stackView.setCustomSpacing(14, after: badgeImageView) - stackView.setCustomSpacing(36, after: badgeLabel) - } else { - stackView.setCustomSpacing(36, after: badgeImageView) - } + stackView.setCustomSpacing(36, after: bodyLabel) return cell }, actionBlock: nil)) diff --git a/Signal/src/ViewControllers/Donations/DonateChoosePaymentMethodSheet.swift b/Signal/src/ViewControllers/Donations/DonateChoosePaymentMethodSheet.swift index 787066afb7..14cc936ed0 100644 --- a/Signal/src/ViewControllers/Donations/DonateChoosePaymentMethodSheet.swift +++ b/Signal/src/ViewControllers/Donations/DonateChoosePaymentMethodSheet.swift @@ -111,8 +111,8 @@ class DonateChoosePaymentMethodSheet: OWSTableSheetViewController { stackView.spacing = 6 if let assets = badge.assets { - let badgeImageView = UIImageView(image: assets.universal112) - badgeImageView.autoSetDimensions(to: CGSize(square: 112)) + let badgeImageView = UIImageView(image: assets.universal160) + badgeImageView.autoSetDimensions(to: CGSize(square: 80)) stackView.addArrangedSubview(badgeImageView) stackView.setCustomSpacing(12, after: badgeImageView) }