From df5c951d101b4bf4e2bc9a2701d85532fa62a76e Mon Sep 17 00:00:00 2001 From: kate-signal Date: Fri, 6 Feb 2026 14:46:23 -0500 Subject: [PATCH] preview member label should match group color --- Signal/ConversationView/Loading/CVItemViewState.swift | 2 +- Signal/ConversationView/Loading/CVLoader.swift | 7 +++++++ .../EditHistoryTableSheetViewController.swift | 4 ++++ .../src/ViewControllers/MemberLabelViewController.swift | 5 ++++- .../ViewControllers/MessageDetailViewController.swift | 3 +++ .../PinnedMessagesDetailsViewController.swift | 6 ++++++ .../ThreadSettings/ContactAboutSheet.swift | 9 ++++++++- .../ConversationSettingsViewController+Contents.swift | 8 +++++++- Signal/src/views/MockConversationView.swift | 3 +++ 9 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Signal/ConversationView/Loading/CVItemViewState.swift b/Signal/ConversationView/Loading/CVItemViewState.swift index 9211f29c4b..7bb7aa81b5 100644 --- a/Signal/ConversationView/Loading/CVItemViewState.swift +++ b/Signal/ConversationView/Loading/CVItemViewState.swift @@ -190,6 +190,7 @@ struct CVItemModelBuilder: CVItemBuilding { threadAssociatedData: ThreadAssociatedData, threadViewModel: ThreadViewModel, itemBuildingContext: CVItemBuildingContext, + groupNameColors: GroupNameColors, transaction: DBReadTransaction, ) -> CVItemModel? { AssertIsOnMainThread() @@ -209,7 +210,6 @@ struct CVItemModelBuilder: CVItemBuilding { return nil } - let groupNameColors = GroupNameColors.forThread(thread) let displayNameCache = DisplayNameCache() configureItemViewState( diff --git a/Signal/ConversationView/Loading/CVLoader.swift b/Signal/ConversationView/Loading/CVLoader.swift index f47801bd2b..f86c973d4d 100644 --- a/Signal/ConversationView/Loading/CVLoader.swift +++ b/Signal/ConversationView/Loading/CVLoader.swift @@ -304,12 +304,15 @@ public class CVLoader: NSObject { conversationStyle: conversationStyle, mediaCache: CVMediaCache(), ) + let groupNameColors = GroupNameColors.forThread(thread) + return CVLoader.buildStandaloneRenderItem( interaction: interaction, thread: thread, threadAssociatedData: threadAssociatedData, coreState: coreState, spoilerState: spoilerState, + groupNameColors: groupNameColors, transaction: transaction, ) } @@ -320,6 +323,7 @@ public class CVLoader: NSObject { threadAssociatedData: ThreadAssociatedData, conversationStyle: ConversationStyle, spoilerState: SpoilerRenderState, + groupNameColors: GroupNameColors, transaction: DBReadTransaction, ) -> CVRenderItem? { let coreState = CVCoreState( @@ -332,6 +336,7 @@ public class CVLoader: NSObject { threadAssociatedData: threadAssociatedData, coreState: coreState, spoilerState: spoilerState, + groupNameColors: groupNameColors, transaction: transaction, ) } @@ -342,6 +347,7 @@ public class CVLoader: NSObject { threadAssociatedData: ThreadAssociatedData, coreState: CVCoreState, spoilerState: SpoilerRenderState, + groupNameColors: GroupNameColors, transaction: DBReadTransaction, ) -> CVRenderItem? { AssertIsOnMainThread() @@ -376,6 +382,7 @@ public class CVLoader: NSObject { threadAssociatedData: threadAssociatedData, threadViewModel: threadViewModel, itemBuildingContext: itemBuildingContext, + groupNameColors: groupNameColors, transaction: transaction, ) else { diff --git a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift index a8adce82b9..0d1309be60 100644 --- a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift +++ b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift @@ -236,6 +236,8 @@ class EditHistoryTableSheetViewController: OWSTableSheetViewController { isStandaloneRenderItem: true, ) + let groupNameColors = GroupNameColors.forThread(thread) + let itemDate = Date(millisecondsSince1970: interaction.timestamp) let daysPrior = DateUtil.daysFrom(firstDate: itemDate, toSecondDate: Date()) if forceDateHeader || daysPrior > currentDaysBefore { @@ -249,6 +251,7 @@ class EditHistoryTableSheetViewController: OWSTableSheetViewController { threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: self.spoilerState, + groupNameColors: groupNameColors, transaction: tx, ) { @@ -263,6 +266,7 @@ class EditHistoryTableSheetViewController: OWSTableSheetViewController { threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: self.spoilerState, + groupNameColors: groupNameColors, transaction: tx, ) { diff --git a/Signal/src/ViewControllers/MemberLabelViewController.swift b/Signal/src/ViewControllers/MemberLabelViewController.swift index 3c9796dd0b..d099799b93 100644 --- a/Signal/src/ViewControllers/MemberLabelViewController.swift +++ b/Signal/src/ViewControllers/MemberLabelViewController.swift @@ -22,17 +22,19 @@ class MemberLabelViewController: OWSViewController, UITextFieldDelegate { private let stackView = UIStackView() private let textField = UITextField() private var characterCountLabel = UILabel() + private var groupNameColors: GroupNameColors weak var updateDelegate: MemberLabelUpdateDelegate? private static let maxCharCount = 24 private static let showCharacterCountMax = 9 - init(memberLabel: String? = nil, emoji: String? = nil) { + init(memberLabel: String? = nil, emoji: String? = nil, groupNameColors: GroupNameColors) { self.initialMemberLabel = memberLabel self.initialEmoji = emoji self.updatedMemberLabel = memberLabel self.updatedEmoji = emoji + self.groupNameColors = groupNameColors textField.text = memberLabel super.init() @@ -205,6 +207,7 @@ class MemberLabelViewController: OWSViewController, UITextFieldDelegate { threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: SpoilerRenderState(), + groupNameColors: groupNameColors, transaction: tx, ) } diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index c715428227..ddbec4eda0 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -236,12 +236,15 @@ class MessageDetailViewController: OWSTableViewController2 { ), ) + let groupNameColors = GroupNameColors.forThread(thread) + return CVLoader.buildStandaloneRenderItem( interaction: interaction, thread: thread, threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: spoilerState, + groupNameColors: groupNameColors, transaction: transaction, ) } diff --git a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift index 163ca2ad75..5d5f04f4e5 100644 --- a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift +++ b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift @@ -229,12 +229,15 @@ class PinnedMessagesDetailsViewController: OWSViewController, DatabaseChangeDele isStandaloneRenderItem: true, ) + let groupNameColors = GroupNameColors.forThread(threadViewModel.threadRecord) + return CVLoader.buildStandaloneRenderItem( interaction: dateInteraction, thread: threadViewModel.threadRecord, threadAssociatedData: threadViewModel.associatedData, conversationStyle: conversationStyle, spoilerState: self.spoilerState, + groupNameColors: groupNameColors, transaction: tx, ) } @@ -259,12 +262,15 @@ class PinnedMessagesDetailsViewController: OWSViewController, DatabaseChangeDele ), ) + let groupNameColors = GroupNameColors.forThread(threadViewModel.threadRecord) + return CVLoader.buildStandaloneRenderItem( interaction: message, thread: thread, threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: self.spoilerState, + groupNameColors: groupNameColors, transaction: tx, ) } diff --git a/Signal/src/ViewControllers/ThreadSettings/ContactAboutSheet.swift b/Signal/src/ViewControllers/ThreadSettings/ContactAboutSheet.swift index 32e501c53c..295ddcef5e 100644 --- a/Signal/src/ViewControllers/ThreadSettings/ContactAboutSheet.swift +++ b/Signal/src/ViewControllers/ThreadSettings/ContactAboutSheet.swift @@ -206,11 +206,18 @@ class ContactAboutSheet: StackSheetViewController { canEditMemberLabel, let localAci = db.read(block: { tx in tsAccountManager.localIdentifiers(tx: tx)?.aci }), let groupModel = groupViewHelper?.delegate?.currentGroupModel, + let groupThread = groupViewHelper?.thread as? TSGroupThread, let csvc = fromViewController as? ConversationSettingsViewController { + let groupNameColors = GroupNameColors.forThread(groupThread) + stackView.addArrangedSubview(ProfileDetailLabel.memberLabel(memberLabel?.label, tapAction: { [weak self] in let fullMemberLabel = groupModel.groupMembership.memberLabel(for: localAci) - let memberLabelViewController = MemberLabelViewController(memberLabel: fullMemberLabel?.label, emoji: fullMemberLabel?.labelEmoji) + let memberLabelViewController = MemberLabelViewController( + memberLabel: fullMemberLabel?.label, + emoji: fullMemberLabel?.labelEmoji, + groupNameColors: groupNameColors, + ) memberLabelViewController.updateDelegate = csvc self?.present(OWSNavigationController(rootViewController: memberLabelViewController), animated: true) })) diff --git a/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController+Contents.swift b/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController+Contents.swift index 8bc33c60e9..7dc82b7f74 100644 --- a/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController+Contents.swift +++ b/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController+Contents.swift @@ -890,6 +890,8 @@ extension ConversationSettingsViewController { let db = DependenciesBridge.shared.db let tsAccountManager = DependenciesBridge.shared.tsAccountManager + let groupNameColors = GroupNameColors.forThread(groupViewHelper.thread) + if BuildFlags.MemberLabel.send, groupViewHelper.canEditConversationAttributes, @@ -904,7 +906,11 @@ extension ConversationSettingsViewController { ), actionBlock: { [weak self] in let fullMemberLabel = groupModelV2.groupMembership.memberLabel(for: localAci) - let memberLabelViewController = MemberLabelViewController(memberLabel: fullMemberLabel?.label, emoji: fullMemberLabel?.labelEmoji) + let memberLabelViewController = MemberLabelViewController( + memberLabel: fullMemberLabel?.label, + emoji: fullMemberLabel?.labelEmoji, + groupNameColors: groupNameColors, + ) memberLabelViewController.updateDelegate = self self?.present(OWSNavigationController(rootViewController: memberLabelViewController), animated: true) }, diff --git a/Signal/src/views/MockConversationView.swift b/Signal/src/views/MockConversationView.swift index 51dcddf3b6..802d0fa1cb 100644 --- a/Signal/src/views/MockConversationView.swift +++ b/Signal/src/views/MockConversationView.swift @@ -167,6 +167,8 @@ class MockConversationView: UIView { interaction = MockIncomingMessage(messageBody: text!, thread: self.thread) } + let groupNameColors = GroupNameColors.forThread(thread) + guard let renderItem = CVLoader.buildStandaloneRenderItem( interaction: interaction, @@ -174,6 +176,7 @@ class MockConversationView: UIView { threadAssociatedData: threadAssociatedData, conversationStyle: conversationStyle, spoilerState: SpoilerRenderState(), + groupNameColors: groupNameColors, transaction: transaction, ) else {