diff --git a/Signal/ConversationView/CVViewState.swift b/Signal/ConversationView/CVViewState.swift index 4ec4486572..4f4e99cd96 100644 --- a/Signal/ConversationView/CVViewState.swift +++ b/Signal/ConversationView/CVViewState.swift @@ -184,8 +184,9 @@ extension ConversationViewController { set { viewState.conversationStyle = newValue if #available(iOS 26, *) { - viewState.scrollDownButton.tintColor = newValue.chatColorValue.asLiquidGlassTintColor() - viewState.scrollToNextMentionButton.tintColor = newValue.chatColorValue.asLiquidGlassTintColor() + let tintColor = newValue.chatColorValue.asChatUIElementTintColor() + viewState.scrollDownButton.badgeTintColor = tintColor + viewState.scrollToNextMentionButton.badgeTintColor = tintColor } } } diff --git a/Signal/ConversationView/ConversationInputToolbar.swift b/Signal/ConversationView/ConversationInputToolbar.swift index 86ead0763b..d7f01f6139 100644 --- a/Signal/ConversationView/ConversationInputToolbar.swift +++ b/Signal/ConversationView/ConversationInputToolbar.swift @@ -191,7 +191,7 @@ public class ConversationInputToolbar: UIView, QuotedReplyPreviewDelegate { func update(conversationStyle: ConversationStyle) { self.conversationStyle = conversationStyle if #available(iOS 26, *), let sendButton = trailingEdgeControl as? UIButton { - sendButton.tintColor = conversationStyle.chatColorValue.asLiquidGlassTintColor() + sendButton.tintColor = conversationStyle.chatColorValue.asChatUIElementTintColor() } } @@ -489,7 +489,7 @@ public class ConversationInputToolbar: UIView, QuotedReplyPreviewDelegate { }, accessibilityIdentifier: UIView.accessibilityIdentifier(in: self, name: "sendButton"), ) - button.tintColor = conversationStyle.bubbleChatColorOutgoing.asLiquidGlassTintColor() + button.tintColor = conversationStyle.bubbleChatColorOutgoing.asChatUIElementTintColor() return button } diff --git a/Signal/ConversationView/ConversationScrollButton.swift b/Signal/ConversationView/ConversationScrollButton.swift index 6d04112ce5..384ea31935 100644 --- a/Signal/ConversationView/ConversationScrollButton.swift +++ b/Signal/ConversationView/ConversationScrollButton.swift @@ -18,13 +18,18 @@ public class ConversationScrollButton: UIButton { } } + var badgeTintColor: UIColor! { + get { unreadBadge.backgroundColor ?? UIColor.Signal.accent } + set { unreadBadge.backgroundColor = newValue ?? UIColor.Signal.accent } + } + init(iconName: String) { self.iconName = iconName super.init(frame: .zero) var configuration: UIButton.Configuration? if #available(iOS 26, *) { - configuration = .prominentGlass() + configuration = .glass() } if configuration == nil { configuration = .gray() @@ -50,6 +55,14 @@ public class ConversationScrollButton: UIButton { addUnreadLabel() } + override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + if previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle { + applyUnreadBadgeStroke() + } + } + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -95,5 +108,16 @@ public class ConversationScrollButton: UIButton { unreadBadge.centerXAnchor.constraint(equalTo: centerXAnchor), unreadBadge.bottomAnchor.constraint(equalTo: topAnchor, constant: pillViewOverlap), ]) + + applyUnreadBadgeStroke() + } + + private func applyUnreadBadgeStroke() { + let strokeColor = switch traitCollection.userInterfaceStyle { + case .dark: UIColor(white: 1, alpha: 0.1) + default: UIColor(white: 0, alpha: 0.1) + } + unreadBadge.layer.borderWidth = 1 + unreadBadge.layer.borderColor = strokeColor.cgColor } } diff --git a/SignalUI/Appearance/ColorOrGradient+SignalUI.swift b/SignalUI/Appearance/ColorOrGradient+SignalUI.swift index 5868abe7d6..b455478d3c 100644 --- a/SignalUI/Appearance/ColorOrGradient+SignalUI.swift +++ b/SignalUI/Appearance/ColorOrGradient+SignalUI.swift @@ -115,7 +115,7 @@ public extension UIColor { @available(iOS 26, *) public extension ColorOrGradientValue { - func asLiquidGlassTintColor() -> UIColor { + func asChatUIElementTintColor() -> UIColor { let bubbleColor: UIColor = { switch self { case .transparent, .blur: