From f63d25a172b050cc098dda39b25c5d75b42cc3d4 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 25 May 2018 17:28:36 -0400 Subject: [PATCH] Migrate to Swift 4. --- Signal/src/UIStoryboard+OWS.swift | 3 ++- Signal/src/ViewControllers/ContactShareViewHelper.swift | 3 +++ Signal/src/ViewControllers/ContactViewController.swift | 1 + Signal/src/ViewControllers/ContactsPicker.swift | 1 + .../ConversationView/ConversationHeaderView.swift | 9 ++++++++- .../GifPicker/GifPickerViewController.swift | 2 ++ Signal/src/ViewControllers/LongTextViewController.swift | 3 ++- .../src/ViewControllers/MediaGalleryViewController.swift | 1 + .../ViewControllers/MessageDetailViewController.swift | 1 + Signal/src/views/QuotedReplyPreview.swift | 1 + SignalMessaging/ViewModels/ContactShareViewModel.swift | 1 + .../Views/DisappearingTimerConfigurationView.swift | 1 + SignalMessaging/attachments/SignalAttachment.swift | 1 + SignalMessaging/attachments/VideoPlayerView.swift | 1 + .../categories/Promise+retainUntilComplete.swift | 6 +++++- .../migrations/OWS106EnsureProfileComplete.swift | 1 + 16 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Signal/src/UIStoryboard+OWS.swift b/Signal/src/UIStoryboard+OWS.swift index 0b93a7ea9..26542a5c8 100644 --- a/Signal/src/UIStoryboard+OWS.swift +++ b/Signal/src/UIStoryboard+OWS.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // import Foundation @@ -9,6 +9,7 @@ extension UIStoryboard { case main = "Main" } + @objc class var main: UIStoryboard { return UIStoryboard(name: StoryboardName.main.rawValue, bundle: Bundle.main) } diff --git a/Signal/src/ViewControllers/ContactShareViewHelper.swift b/Signal/src/ViewControllers/ContactShareViewHelper.swift index c4c31b35b..a83511380 100644 --- a/Signal/src/ViewControllers/ContactShareViewHelper.swift +++ b/Signal/src/ViewControllers/ContactShareViewHelper.swift @@ -15,10 +15,12 @@ public protocol ContactShareViewHelperDelegate: class { @objc public class ContactShareViewHelper: NSObject, CNContactViewControllerDelegate { + @objc weak var delegate: ContactShareViewHelperDelegate? let contactsManager: OWSContactsManager + @objc public required init(contactsManager: OWSContactsManager) { SwiftAssertIsOnMainThread(#function) @@ -89,6 +91,7 @@ public class ContactShareViewHelper: NSObject, CNContactViewControllerDelegate { inviteFlow.sendSMSTo(phoneNumbers: phoneNumbers) } + @objc func showAddToContacts(contactShare: ContactShareViewModel, fromViewController: UIViewController) { Logger.info("\(logTag) \(#function)") diff --git a/Signal/src/ViewControllers/ContactViewController.swift b/Signal/src/ViewControllers/ContactViewController.swift index db418d0ca..174d33ec4 100644 --- a/Signal/src/ViewControllers/ContactViewController.swift +++ b/Signal/src/ViewControllers/ContactViewController.swift @@ -48,6 +48,7 @@ class ContactViewController: OWSViewController, ContactShareViewHelperDelegate { fatalError("Unimplemented") } + @objc required init(contactShare: ContactShareViewModel) { contactsManager = Environment.current().contactsManager self.contactShare = contactShare diff --git a/Signal/src/ViewControllers/ContactsPicker.swift b/Signal/src/ViewControllers/ContactsPicker.swift index e10b07bdc..767bdc9df 100644 --- a/Signal/src/ViewControllers/ContactsPicker.swift +++ b/Signal/src/ViewControllers/ContactsPicker.swift @@ -72,6 +72,7 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView private lazy var selectedContacts = [Contact]() // Configuration + @objc public weak var contactsPickerDelegate: ContactsPickerDelegate? private let subtitleCellType: SubtitleCellValue private let allowsMultipleSelection: Bool diff --git a/Signal/src/ViewControllers/ConversationView/ConversationHeaderView.swift b/Signal/src/ViewControllers/ConversationView/ConversationHeaderView.swift index 7d3e03fca..17d306ed1 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationHeaderView.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationHeaderView.swift @@ -12,8 +12,10 @@ public protocol ConversationHeaderViewDelegate { @objc public class ConversationHeaderView: UIStackView { + @objc public weak var delegate: ConversationHeaderViewDelegate? + @objc public var attributedTitle: NSAttributedString? { get { return self.titleLabel.attributedText @@ -23,6 +25,7 @@ public class ConversationHeaderView: UIStackView { } } + @objc public var attributedSubtitle: NSAttributedString? { get { return self.subtitleLabel.attributedText @@ -41,14 +44,18 @@ public class ConversationHeaderView: UIStackView { } } + @objc public let titlePrimaryFont: UIFont = UIFont.ows_boldFont(withSize: 17) + @objc public let titleSecondaryFont: UIFont = UIFont.ows_regularFont(withSize: 9) - + @objc public let subtitleFont: UIFont = UIFont.ows_regularFont(withSize: 12) + private let titleLabel: UILabel private let subtitleLabel: UILabel private let avatarView: AvatarImageView + @objc public required init(thread: TSThread, contactsManager: OWSContactsManager) { let avatarView = ConversationAvatarImageView(thread: thread, diameter: 36, contactsManager: contactsManager) diff --git a/Signal/src/ViewControllers/GifPicker/GifPickerViewController.swift b/Signal/src/ViewControllers/GifPicker/GifPickerViewController.swift index 937f51aff..537fc9064 100644 --- a/Signal/src/ViewControllers/GifPicker/GifPickerViewController.swift +++ b/Signal/src/ViewControllers/GifPicker/GifPickerViewController.swift @@ -33,6 +33,7 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect var lastQuery: String = "" + @objc public weak var delegate: GifPickerViewControllerDelegate? let thread: TSThread @@ -60,6 +61,7 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect fatalError("\(#function) is unimplemented.") } + @objc required init(thread: TSThread, messageSender: MessageSender) { self.thread = thread self.messageSender = messageSender diff --git a/Signal/src/ViewControllers/LongTextViewController.swift b/Signal/src/ViewControllers/LongTextViewController.swift index ff25a958a..45fb333ab 100644 --- a/Signal/src/ViewControllers/LongTextViewController.swift +++ b/Signal/src/ViewControllers/LongTextViewController.swift @@ -24,6 +24,7 @@ public class LongTextViewController: OWSViewController { fatalError("\(#function) is unimplemented.") } + @objc public required init(viewItem: ConversationViewItem) { self.viewItem = viewItem @@ -76,7 +77,7 @@ public class LongTextViewController: OWSViewController { view.addSubview(messageTextView) messageTextView.autoPinEdge(toSuperviewEdge: .leading) messageTextView.autoPinEdge(toSuperviewEdge: .trailing) - messageTextView.textContainerInset = UIEdgeInsetsMake(0, view.layoutMargins.left, 0, view.layoutMargins.right) + messageTextView.textContainerInset = UIEdgeInsets(top: 0, left: view.layoutMargins.left, bottom: 0, right: view.layoutMargins.right) messageTextView.autoPin(toTopLayoutGuideOf: self, withInset: 0) let footer = UIToolbar() diff --git a/Signal/src/ViewControllers/MediaGalleryViewController.swift b/Signal/src/ViewControllers/MediaGalleryViewController.swift index f7147f1a5..cbc84f1e2 100644 --- a/Signal/src/ViewControllers/MediaGalleryViewController.swift +++ b/Signal/src/ViewControllers/MediaGalleryViewController.swift @@ -278,6 +278,7 @@ class MediaGalleryViewController: OWSNavigationController, MediaGalleryDataSourc // TODO rename to replacingOriginRect private var originRect: CGRect? + @objc public func presentDetailView(fromViewController: UIViewController, mediaMessage: TSMessage, replacingView: UIView) { var galleryItem: MediaGalleryItem? uiDatabaseConnection.read { transaction in diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index 7558093d7..03e4d0d55 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -49,6 +49,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele fatalError("\(#function) is unimplemented.") } + @objc required init(viewItem: ConversationViewItem, message: TSMessage, mode: MessageMetadataViewMode) { self.contactsManager = Environment.current().contactsManager self.viewItem = viewItem diff --git a/Signal/src/views/QuotedReplyPreview.swift b/Signal/src/views/QuotedReplyPreview.swift index 7bd1db314..bddd21694 100644 --- a/Signal/src/views/QuotedReplyPreview.swift +++ b/Signal/src/views/QuotedReplyPreview.swift @@ -23,6 +23,7 @@ class QuotedReplyPreview: UIView { fatalError("init(coder:) has not been implemented") } + @objc init(quotedReply: OWSQuotedReplyModel) { self.quotedReply = quotedReply diff --git a/SignalMessaging/ViewModels/ContactShareViewModel.swift b/SignalMessaging/ViewModels/ContactShareViewModel.swift index a6c313919..1be27c2d8 100644 --- a/SignalMessaging/ViewModels/ContactShareViewModel.swift +++ b/SignalMessaging/ViewModels/ContactShareViewModel.swift @@ -48,6 +48,7 @@ public class ContactShareViewModel: NSObject { } } + @objc public func getAvatarImage(diameter: CGFloat, contactsManager: OWSContactsManager) -> UIImage { if let avatarImage = avatarImage { return avatarImage diff --git a/SignalMessaging/Views/DisappearingTimerConfigurationView.swift b/SignalMessaging/Views/DisappearingTimerConfigurationView.swift index 35c369b52..308d53723 100644 --- a/SignalMessaging/Views/DisappearingTimerConfigurationView.swift +++ b/SignalMessaging/Views/DisappearingTimerConfigurationView.swift @@ -16,6 +16,7 @@ public protocol DisappearingTimerConfigurationViewDelegate: class { @objc public class DisappearingTimerConfigurationView: UIView { + @objc public weak var delegate: DisappearingTimerConfigurationViewDelegate? { didSet { // gesture recognizer is only enabled when a delegate is assigned. diff --git a/SignalMessaging/attachments/SignalAttachment.swift b/SignalMessaging/attachments/SignalAttachment.swift index 8149421ff..b31dcd997 100644 --- a/SignalMessaging/attachments/SignalAttachment.swift +++ b/SignalMessaging/attachments/SignalAttachment.swift @@ -1011,6 +1011,7 @@ public class SignalAttachment: NSObject { return VideoCompressionResult(attachmentPromise: attachmentPromise, exportSession: exportSession) } + @objc public class func isInvalidVideo(dataSource: DataSource, dataUTI: String) -> Bool { guard videoUTISet.contains(dataUTI) else { // not a video diff --git a/SignalMessaging/attachments/VideoPlayerView.swift b/SignalMessaging/attachments/VideoPlayerView.swift index 044c8ebc8..187802617 100644 --- a/SignalMessaging/attachments/VideoPlayerView.swift +++ b/SignalMessaging/attachments/VideoPlayerView.swift @@ -7,6 +7,7 @@ import AVFoundation @objc public class VideoPlayerView: UIView { + @objc var player: AVPlayer? { get { return playerLayer.player diff --git a/SignalMessaging/categories/Promise+retainUntilComplete.swift b/SignalMessaging/categories/Promise+retainUntilComplete.swift index 8f45c95c6..c74d3d9d0 100644 --- a/SignalMessaging/categories/Promise+retainUntilComplete.swift +++ b/SignalMessaging/categories/Promise+retainUntilComplete.swift @@ -1,19 +1,22 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // import PromiseKit +@objc public extension AnyPromise { /** * Sometimes there isn't a straight forward candidate to retain a promise, in that case we tell the * promise to self retain, until it completes to avoid the risk it's GC'd before completion. */ + @objc func retainUntilComplete() { // Unfortunately, there is (currently) no way to surpress the // compiler warning: "Variable 'retainCycle' was written to, but never read" var retainCycle: AnyPromise? = self self.always { + assert(retainCycle != nil) retainCycle = nil } } @@ -29,6 +32,7 @@ public extension Promise { // compiler warning: "Variable 'retainCycle' was written to, but never read" var retainCycle: Promise? = self self.always { + assert(retainCycle != nil) retainCycle = nil } } diff --git a/SignalMessaging/environment/migrations/OWS106EnsureProfileComplete.swift b/SignalMessaging/environment/migrations/OWS106EnsureProfileComplete.swift index a847e604c..9fbd17ac1 100644 --- a/SignalMessaging/environment/migrations/OWS106EnsureProfileComplete.swift +++ b/SignalMessaging/environment/migrations/OWS106EnsureProfileComplete.swift @@ -14,6 +14,7 @@ public class OWS106EnsureProfileComplete: OWSDatabaseMigration { private static var sharedCompleteRegistrationFixerJob: CompleteRegistrationFixerJob? // increment a similar constant for each migration. + @objc class func migrationId() -> String { return "106" }