diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index d5a2424da1..3d889dc92b 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -681,6 +681,8 @@ 503AECCD29B2B88600642F66 /* VoiceMessageConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503AECC929B2B22E00642F66 /* VoiceMessageConstants.swift */; }; 503B47222AF0569B00978266 /* PublicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503B471E2AF0569A00978266 /* PublicKey.swift */; }; 503B47232AF0569B00978266 /* ECKeyPair.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503B471F2AF0569A00978266 /* ECKeyPair.swift */; }; + 503BD2892B44D666009624FC /* ProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503BD2882B44D666009624FC /* ProfileManager.swift */; }; + 503BD28B2B44DA64009624FC /* OWSFakeProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503BD28A2B44DA64009624FC /* OWSFakeProfileManager.swift */; }; 503BDDB4296F3E2C00FED3B2 /* SystemContactsDataProviderTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503BDDB3296F3E2C00FED3B2 /* SystemContactsDataProviderTest.swift */; }; 503BDDB6296F5BE100FED3B2 /* ContactReminderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503BDDB5296F5BE100FED3B2 /* ContactReminderTableViewCell.swift */; }; 503C2F432977752B00217527 /* OWSURLSessionEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503C2F422977752B00217527 /* OWSURLSessionEndpoint.swift */; }; @@ -3324,6 +3326,8 @@ 503AECC929B2B22E00642F66 /* VoiceMessageConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageConstants.swift; sourceTree = ""; }; 503B471E2AF0569A00978266 /* PublicKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublicKey.swift; sourceTree = ""; }; 503B471F2AF0569A00978266 /* ECKeyPair.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECKeyPair.swift; sourceTree = ""; }; + 503BD2882B44D666009624FC /* ProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileManager.swift; sourceTree = ""; }; + 503BD28A2B44DA64009624FC /* OWSFakeProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OWSFakeProfileManager.swift; sourceTree = ""; }; 503BDDB3296F3E2C00FED3B2 /* SystemContactsDataProviderTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemContactsDataProviderTest.swift; sourceTree = ""; }; 503BDDB5296F5BE100FED3B2 /* ContactReminderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactReminderTableViewCell.swift; sourceTree = ""; }; 503C2F422977752B00217527 /* OWSURLSessionEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OWSURLSessionEndpoint.swift; sourceTree = ""; }; @@ -9793,6 +9797,7 @@ F9C5CA06289453B100548EEE /* NotificationsProtocol.h */, 664657402AC4FB720099DE1C /* NotificationsProtocolSwift.swift */, F9C5CA04289453B100548EEE /* OWSCallMessageHandler.h */, + 503BD2882B44D666009624FC /* ProfileManager.swift */, F9C5CA02289453B100548EEE /* ProfileManagerProtocol.h */, F9C5CA05289453B100548EEE /* ProtoUtils.h */, F9C5CA01289453B100548EEE /* ProtoUtils.m */, @@ -10320,6 +10325,7 @@ F9C5CB88289453B200548EEE /* NoopPendingReadReceiptRecorder.swift */, F9C5CB8F289453B200548EEE /* OWSFakeProfileManager.h */, F9C5CB83289453B200548EEE /* OWSFakeProfileManager.m */, + 503BD28A2B44DA64009624FC /* OWSFakeProfileManager.swift */, F9C5CB8E289453B200548EEE /* OWSMockSyncManager.swift */, F9C5CB89289453B200548EEE /* TestAppContext.h */, F9C5CB95289453B200548EEE /* TestAppContext.m */, @@ -13043,6 +13049,7 @@ F9C5CE49289453B400548EEE /* OWSError.swift in Sources */, F937EDA429746DA20003AF3F /* OWSFail.swift in Sources */, F9C5CE53289453B400548EEE /* OWSFakeProfileManager.m in Sources */, + 503BD28B2B44DA64009624FC /* OWSFakeProfileManager.swift in Sources */, F9C5CDCC289453B400548EEE /* OWSFileSystem.m in Sources */, F9C5CDD7289453B400548EEE /* OWSFileSystem.swift in Sources */, 667664362A43BBCD00716B84 /* OWSFingerprint.swift in Sources */, @@ -13176,6 +13183,7 @@ 6659A0312A7C5B9700066AB7 /* PreKeyUploadBundle.swift in Sources */, D995546F2AF5668E0001E15C /* ProfileBadgesSnapshot.swift in Sources */, F9C5CE38289453B400548EEE /* ProfileFetcherJob.swift in Sources */, + 503BD2892B44D666009624FC /* ProfileManager.swift in Sources */, 50F77AA02AAA7B8A00FB70C5 /* ProfileWhitelistMerger.swift in Sources */, F9C5CE1D289453B400548EEE /* Promise+OWS.swift in Sources */, F9C5CCE6289453B300548EEE /* ProtoUtils.m in Sources */, diff --git a/Signal/Registration/RegistrationCoodinatorShims.swift b/Signal/Registration/RegistrationCoodinatorShims.swift index ebaa73c2e9..3b270443a2 100644 --- a/Signal/Registration/RegistrationCoodinatorShims.swift +++ b/Signal/Registration/RegistrationCoodinatorShims.swift @@ -284,8 +284,8 @@ public protocol _RegistrationCoordinator_ProfileManagerShim { public class _RegistrationCoordinator_ProfileManagerWrapper: _RegistrationCoordinator_ProfileManagerShim { - private let manager: ProfileManagerProtocol - public init(_ manager: ProfileManagerProtocol) { self.manager = manager } + private let manager: ProfileManager + public init(_ manager: ProfileManager) { self.manager = manager } public var hasProfileName: Bool { manager.hasProfileName } diff --git a/SignalMessaging/Storage Service/StorageServiceProto+Sync.swift b/SignalMessaging/Storage Service/StorageServiceProto+Sync.swift index 5aaed44af1..b95034c6b7 100644 --- a/SignalMessaging/Storage Service/StorageServiceProto+Sync.swift +++ b/SignalMessaging/Storage Service/StorageServiceProto+Sync.swift @@ -786,13 +786,13 @@ class StorageServiceGroupV2RecordUpdater: StorageServiceRecordUpdater { private let authedAccount: AuthedAccount private let blockingManager: BlockingManager private let groupsV2: GroupsV2Swift - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager init( authedAccount: AuthedAccount, blockingManager: BlockingManager, groupsV2: GroupsV2Swift, - profileManager: ProfileManagerProtocol + profileManager: ProfileManager ) { self.authedAccount = authedAccount self.blockingManager = blockingManager diff --git a/SignalMessaging/Usernames/Usernames+BetterIdentifierChecker.swift b/SignalMessaging/Usernames/Usernames+BetterIdentifierChecker.swift index 6aef3491ab..c82f85e610 100644 --- a/SignalMessaging/Usernames/Usernames+BetterIdentifierChecker.swift +++ b/SignalMessaging/Usernames/Usernames+BetterIdentifierChecker.swift @@ -27,7 +27,7 @@ extension Usernames { public static func assembleByQuerying( forRecipient recipient: SignalRecipient, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, contactManager: ContactsManagerProtocol, transaction: SDSAnyReadTransaction ) -> BetterIdentifierChecker { diff --git a/SignalMessaging/contacts/OWSContactsManager.m b/SignalMessaging/contacts/OWSContactsManager.m index 31519dd58b..04e2b98074 100644 --- a/SignalMessaging/contacts/OWSContactsManager.m +++ b/SignalMessaging/contacts/OWSContactsManager.m @@ -458,7 +458,7 @@ NSString *const OWSContactsManagerCollection = @"OWSContactsManagerCollection"; return savedContactNameComponents; } - return [self.profileManager nameComponentsForProfileWithAddress:address transaction:transaction]; + return [self.profileManagerObjC nameComponentsForProfileWithAddress:address transaction:transaction]; } // TODO: Remove? @@ -503,7 +503,7 @@ NSString *const OWSContactsManagerCollection = @"OWSContactsManagerCollection"; __block NSData *_Nullable data; [self.databaseStorage readWithBlock:^(SDSAnyReadTransaction *transaction) { - data = [self.profileManager profileAvatarDataForAddress:address transaction:transaction]; + data = [self.profileManagerObjC profileAvatarDataForAddress:address transaction:transaction]; }]; return data; } diff --git a/SignalMessaging/profiles/OWSProfileManager.swift b/SignalMessaging/profiles/OWSProfileManager.swift index ad5fe21e0d..3023fcabfc 100644 --- a/SignalMessaging/profiles/OWSProfileManager.swift +++ b/SignalMessaging/profiles/OWSProfileManager.swift @@ -7,6 +7,9 @@ import Foundation import LibSignalClient import SignalServiceKit +extension OWSProfileManager: ProfileManager { +} + public extension OWSProfileManager { // The main entry point for updating the local profile. It will: diff --git a/SignalServiceKit/Dependencies/Dependencies+SSK.swift b/SignalServiceKit/Dependencies/Dependencies+SSK.swift index 8982e21389..5d31be0ff2 100644 --- a/SignalServiceKit/Dependencies/Dependencies+SSK.swift +++ b/SignalServiceKit/Dependencies/Dependencies+SSK.swift @@ -141,11 +141,21 @@ public extension NSObject { .shared } - final var profileManager: ProfileManagerProtocol { + final var profileManagerObjC: ProfileManagerProtocol { SSKEnvironment.shared.profileManagerRef } - static var profileManager: ProfileManagerProtocol { + static var profileManagerObjC: ProfileManagerProtocol { + SSKEnvironment.shared.profileManagerRef + } + + @nonobjc + final var profileManager: ProfileManager { + SSKEnvironment.shared.profileManagerRef + } + + @nonobjc + static var profileManager: ProfileManager { SSKEnvironment.shared.profileManagerRef } @@ -563,11 +573,11 @@ public extension Dependencies { .shared } - var profileManager: ProfileManagerProtocol { + var profileManager: ProfileManager { SSKEnvironment.shared.profileManagerRef } - static var profileManager: ProfileManagerProtocol { + static var profileManager: ProfileManager { SSKEnvironment.shared.profileManagerRef } diff --git a/SignalServiceKit/Dependencies/DependenciesBridge.swift b/SignalServiceKit/Dependencies/DependenciesBridge.swift index c70d1abbb1..8ea0c50db1 100644 --- a/SignalServiceKit/Dependencies/DependenciesBridge.swift +++ b/SignalServiceKit/Dependencies/DependenciesBridge.swift @@ -142,7 +142,7 @@ public class DependenciesBridge { ows2FAManager: OWS2FAManager, paymentsEvents: PaymentsEvents, paymentsHelper: PaymentsHelper, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, receiptManager: OWSReceiptManager, recipientDatabaseTable: RecipientDatabaseTable, recipientFetcher: RecipientFetcher, @@ -217,7 +217,7 @@ public class DependenciesBridge { ows2FAManager: OWS2FAManager, paymentsEvents: PaymentsEvents, paymentsHelper: PaymentsHelper, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, receiptManager: OWSReceiptManager, recipientDatabaseTable: RecipientDatabaseTable, recipientFetcher: RecipientFetcher, diff --git a/SignalServiceKit/MessageBackup/MessageBackupManager+Shims.swift b/SignalServiceKit/MessageBackup/MessageBackupManager+Shims.swift index dcd6ac7f6b..26e8e6475b 100644 --- a/SignalServiceKit/MessageBackup/MessageBackupManager+Shims.swift +++ b/SignalServiceKit/MessageBackup/MessageBackupManager+Shims.swift @@ -72,9 +72,9 @@ public protocol _MessageBackup_ProfileManagerShim { public class _MessageBackup_ProfileManagerWrapper: _MessageBackup_ProfileManagerShim { - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager - public init(_ profileManager: ProfileManagerProtocol) { + public init(_ profileManager: ProfileManager) { self.profileManager = profileManager } diff --git a/SignalServiceKit/src/Account/PniHelloWorldManager.swift b/SignalServiceKit/src/Account/PniHelloWorldManager.swift index a99a127742..5db33edb9a 100644 --- a/SignalServiceKit/src/Account/PniHelloWorldManager.swift +++ b/SignalServiceKit/src/Account/PniHelloWorldManager.swift @@ -238,9 +238,9 @@ protocol _PniHelloWorldManagerImpl_ProfileManager_Shim { } class _PniHelloWorldManagerImpl_ProfileManager_Wrapper: _PniHelloWorldManagerImpl_ProfileManager_Shim { - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager - init(_ profileManager: ProfileManagerProtocol) { + init(_ profileManager: ProfileManager) { self.profileManager = profileManager } diff --git a/SignalServiceKit/src/Contacts/ProfileWhitelistMerger.swift b/SignalServiceKit/src/Contacts/ProfileWhitelistMerger.swift index 434f40d08f..9148624285 100644 --- a/SignalServiceKit/src/Contacts/ProfileWhitelistMerger.swift +++ b/SignalServiceKit/src/Contacts/ProfileWhitelistMerger.swift @@ -6,9 +6,9 @@ import Foundation class ProfileWhitelistMerger: RecipientMergeObserver { - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager - init(profileManager: ProfileManagerProtocol) { + init(profileManager: ProfileManager) { self.profileManager = profileManager } diff --git a/SignalServiceKit/src/Contacts/RecipientMerger.swift b/SignalServiceKit/src/Contacts/RecipientMerger.swift index 18fe199621..2f81dff091 100644 --- a/SignalServiceKit/src/Contacts/RecipientMerger.swift +++ b/SignalServiceKit/src/Contacts/RecipientMerger.swift @@ -131,7 +131,7 @@ class RecipientMergerImpl: RecipientMerger { groupMemberStore: GroupMemberStore, interactionStore: InteractionStore, pinnedThreadManager: PinnedThreadManager, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, recipientMergeNotifier: RecipientMergeNotifier, signalServiceAddressCache: SignalServiceAddressCache, threadAssociatedDataStore: ThreadAssociatedDataStore, diff --git a/SignalServiceKit/src/Messages/RecipientHidingManager.swift b/SignalServiceKit/src/Messages/RecipientHidingManager.swift index 6a7cf22c15..871d5435d3 100644 --- a/SignalServiceKit/src/Messages/RecipientHidingManager.swift +++ b/SignalServiceKit/src/Messages/RecipientHidingManager.swift @@ -78,7 +78,7 @@ struct HiddenRecipient: Codable, FetchableRecord, PersistableRecord { /// Manager in charge of reading from and writing to the `HiddenRecipient` table. public final class RecipientHidingManagerImpl: RecipientHidingManager { - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager private let storageServiceManager: StorageServiceManager private let tsAccountManager: TSAccountManager private let messageSenderJobQueue: MessageSenderJobQueue @@ -87,7 +87,7 @@ public final class RecipientHidingManagerImpl: RecipientHidingManager { public static let hideListDidChange = Notification.Name("hideListDidChange") public init( - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, storageServiceManager: StorageServiceManager, tsAccountManager: TSAccountManager, messageSenderJobQueue: MessageSenderJobQueue diff --git a/SignalServiceKit/src/Network/API/Requests/AccountAttributes/AccountAttributesUpdaterImpl.swift b/SignalServiceKit/src/Network/API/Requests/AccountAttributes/AccountAttributesUpdaterImpl.swift index 407aba356f..d2cce33a66 100644 --- a/SignalServiceKit/src/Network/API/Requests/AccountAttributes/AccountAttributesUpdaterImpl.swift +++ b/SignalServiceKit/src/Network/API/Requests/AccountAttributes/AccountAttributesUpdaterImpl.swift @@ -11,7 +11,7 @@ public class AccountAttributesUpdaterImpl: AccountAttributesUpdater { private let appVersion: AppVersion private let dateProvider: DateProvider private let db: DB - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager private let serviceClient: SignalServiceClient private let schedulers: Schedulers private let svrLocalStorage: SVRLocalStorage @@ -25,7 +25,7 @@ public class AccountAttributesUpdaterImpl: AccountAttributesUpdater { appVersion: AppVersion, dateProvider: @escaping DateProvider, db: DB, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, keyValueStoreFactory: KeyValueStoreFactory, serviceClient: SignalServiceClient, schedulers: Schedulers, diff --git a/SignalServiceKit/src/Protocols/ProfileManager.swift b/SignalServiceKit/src/Protocols/ProfileManager.swift new file mode 100644 index 0000000000..31c08da068 --- /dev/null +++ b/SignalServiceKit/src/Protocols/ProfileManager.swift @@ -0,0 +1,9 @@ +// +// Copyright 2024 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only +// + +import Foundation + +public protocol ProfileManager: ProfileManagerProtocol { +} diff --git a/SignalServiceKit/src/Protocols/ProtoUtils.m b/SignalServiceKit/src/Protocols/ProtoUtils.m index 835cb7aaab..cbc569973b 100644 --- a/SignalServiceKit/src/Protocols/ProtoUtils.m +++ b/SignalServiceKit/src/Protocols/ProtoUtils.m @@ -15,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN + (OWSAES256Key *)localProfileKey { - return self.profileManager.localProfileKey; + return self.profileManagerObjC.localProfileKey; } #pragma mark - @@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN // Group threads will return YES if the group is in the whitelist // Contact threads will return YES if the contact is in the whitelist. - return [self.profileManager isThreadInProfileWhitelist:thread transaction:transaction]; + return [self.profileManagerObjC isThreadInProfileWhitelist:thread transaction:transaction]; } + (void)addLocalProfileKeyIfNecessary:(TSThread *)thread diff --git a/SignalServiceKit/src/SSKEnvironment.swift b/SignalServiceKit/src/SSKEnvironment.swift index f2a23d7eb0..4b328c9ea3 100644 --- a/SignalServiceKit/src/SSKEnvironment.swift +++ b/SignalServiceKit/src/SSKEnvironment.swift @@ -35,7 +35,7 @@ public class SSKEnvironment: NSObject { public let linkPreviewManagerRef: OWSLinkPreviewManager public let pendingReceiptRecorderRef: PendingReceiptRecorder - public let profileManagerRef: ProfileManagerProtocol + public let profileManagerRef: ProfileManager public let messageReceiverRef: MessageReceiver public let blockingManagerRef: BlockingManager public let remoteConfigManagerRef: RemoteConfigManager @@ -95,7 +95,7 @@ public class SSKEnvironment: NSObject { linkPreviewManager: OWSLinkPreviewManager, messageSender: MessageSender, pendingReceiptRecorder: PendingReceiptRecorder, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, networkManager: NetworkManager, messageReceiver: MessageReceiver, blockingManager: BlockingManager, diff --git a/SignalServiceKit/src/TestUtils/OWSFakeProfileManager.swift b/SignalServiceKit/src/TestUtils/OWSFakeProfileManager.swift new file mode 100644 index 0000000000..753ddc9654 --- /dev/null +++ b/SignalServiceKit/src/TestUtils/OWSFakeProfileManager.swift @@ -0,0 +1,13 @@ +// +// Copyright 2024 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only +// + +import Foundation + +#if TESTABLE_BUILD + +extension OWSFakeProfileManager: ProfileManager { +} + +#endif diff --git a/SignalServiceKit/src/Util/OWSUserProfile.m b/SignalServiceKit/src/Util/OWSUserProfile.m index bef7da844a..3512de5c90 100644 --- a/SignalServiceKit/src/Util/OWSUserProfile.m +++ b/SignalServiceKit/src/Util/OWSUserProfile.m @@ -714,7 +714,7 @@ NSString *NSStringForUserProfileWriter(UserProfileWriter userProfileWriter) } else { OWSLogInfo(@"Re-uploading local profile to update profile credential."); [transaction addAsyncCompletionOffMain:^{ - [self.profileManager reuploadLocalProfileWithAuthedAccount:authedAccount]; + [self.profileManagerObjC reuploadLocalProfileWithAuthedAccount:authedAccount]; }]; } } @@ -792,7 +792,7 @@ NSString *NSStringForUserProfileWriter(UserProfileWriter userProfileWriter) } if (isLocalUserProfile) { - [self.profileManager localProfileWasUpdated:self]; + [self.profileManagerObjC localProfileWasUpdated:self]; [self.subscriptionManager reconcileBadgeStatesWithTransaction:transaction]; } diff --git a/SignalUI/Usernames/UsernameQuerier.swift b/SignalUI/Usernames/UsernameQuerier.swift index 29a3947499..f861134ce9 100644 --- a/SignalUI/Usernames/UsernameQuerier.swift +++ b/SignalUI/Usernames/UsernameQuerier.swift @@ -12,7 +12,7 @@ public struct UsernameQuerier { private let databaseStorage: SDSDatabaseStorage private let localUsernameManager: LocalUsernameManager private let networkManager: NetworkManager - private let profileManager: ProfileManagerProtocol + private let profileManager: ProfileManager private let recipientFetcher: RecipientFetcher private let schedulers: Schedulers private let storageServiceManager: StorageServiceManager @@ -46,7 +46,7 @@ public struct UsernameQuerier { databaseStorage: SDSDatabaseStorage, localUsernameManager: LocalUsernameManager, networkManager: NetworkManager, - profileManager: ProfileManagerProtocol, + profileManager: ProfileManager, recipientFetcher: RecipientFetcher, schedulers: Schedulers, storageServiceManager: StorageServiceManager,