From 299e3869a60b7c7cbe70e7b6e9494fa34efbdd3c Mon Sep 17 00:00:00 2001 From: Sasha Weiss <105739406+sashaweiss-signal@users.noreply.github.com> Date: Tue, 23 Aug 2022 21:07:12 -0700 Subject: [PATCH] DRY out showing the MemberActionSheet in ConversationViewController --- ...ersationViewController+BodyTextItems.swift | 17 ++--------------- ...onViewController+CVComponentDelegate.swift | 7 ++----- .../ConversationViewController+Misc.swift | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController+BodyTextItems.swift b/Signal/src/ViewControllers/ConversationView/ConversationViewController+BodyTextItems.swift index b4e2f2b3d7..62c2e2c038 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController+BodyTextItems.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController+BodyTextItems.swift @@ -183,16 +183,7 @@ extension ConversationViewController { if address.isLocalAddress || Self.contactsManagerImpl.isKnownRegisteredUserWithSneakyTransaction(address: address) { - let groupViewHelper: GroupViewHelper? = { - guard threadViewModel.isGroupThread else { - return nil - } - let groupViewHelper = GroupViewHelper(threadViewModel: threadViewModel) - groupViewHelper.delegate = self - return groupViewHelper - }() - let actionSheet = MemberActionSheet(address: address, groupViewHelper: groupViewHelper) - actionSheet.present(from: self) + showMemberActionSheet(forAddress: address, withHapticFeedback: false) return } @@ -356,10 +347,6 @@ extension ConversationViewController { private func didTapOrLongPressMention(_ mention: Mention) { AssertIsOnMainThread() - ImpactHapticFeedback.impactOccured(style: .light) - let groupViewHelper = GroupViewHelper(threadViewModel: threadViewModel) - groupViewHelper.delegate = self - let actionSheet = MemberActionSheet(address: mention.address, groupViewHelper: groupViewHelper) - actionSheet.present(from: self) + showMemberActionSheet(forAddress: mention.address, withHapticFeedback: true) } } diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController+CVComponentDelegate.swift b/Signal/src/ViewControllers/ConversationView/ConversationViewController+CVComponentDelegate.swift index ffe929aa69..4e2ca02006 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController+CVComponentDelegate.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController+CVComponentDelegate.swift @@ -123,11 +123,8 @@ extension ConversationViewController: CVComponentDelegate { owsFailDebug("not an incoming message.") return } - let groupViewHelper = GroupViewHelper(threadViewModel: threadViewModel) - groupViewHelper.delegate = self - let actionSheet = MemberActionSheet(address: incomingMessage.authorAddress, - groupViewHelper: groupViewHelper) - actionSheet.present(from: self) + + showMemberActionSheet(forAddress: incomingMessage.authorAddress, withHapticFeedback: false) } public func cvc_shouldAllowReplyForItem(_ itemViewModel: CVItemViewModelImpl) -> Bool { diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController+Misc.swift b/Signal/src/ViewControllers/ConversationView/ConversationViewController+Misc.swift index bcac6d8f71..9ff00fdf50 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController+Misc.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController+Misc.swift @@ -275,6 +275,25 @@ public extension ConversationViewController { return Array(viewControllers.prefix(upTo: index + 1)) } + + // MARK: - Member Action Sheet + + func showMemberActionSheet(forAddress address: SignalServiceAddress, withHapticFeedback: Bool) { + AssertIsOnMainThread() + + if withHapticFeedback { + ImpactHapticFeedback.impactOccured(style: .light) + } + + var groupViewHelper: GroupViewHelper? + if threadViewModel.isGroupThread { + groupViewHelper = GroupViewHelper(threadViewModel: threadViewModel) + groupViewHelper!.delegate = self + } + + let actionSheet = MemberActionSheet(address: address, groupViewHelper: groupViewHelper) + actionSheet.present(from: self) + } } // MARK: -