Migrate to Swift 4.

pull/1/head
Matthew Chen 6 years ago
parent 916d55c55d
commit 28e26e1f75

@ -10,7 +10,8 @@ import SignalServiceKit
* Signal is actually two services - textSecure for messages and red phone (for calls). * Signal is actually two services - textSecure for messages and red phone (for calls).
* AccountManager delegates to both. * AccountManager delegates to both.
*/ */
class AccountManager: NSObject { @objc
public class AccountManager: NSObject {
let TAG = "[AccountManager]" let TAG = "[AccountManager]"
let textSecureAccountManager: TSAccountManager let textSecureAccountManager: TSAccountManager
@ -22,7 +23,8 @@ class AccountManager: NSObject {
return PushManager.shared() return PushManager.shared()
} }
required init(textSecureAccountManager: TSAccountManager, preferences: OWSPreferences) { @objc
public required init(textSecureAccountManager: TSAccountManager, preferences: OWSPreferences) {
self.networkManager = textSecureAccountManager.networkManager self.networkManager = textSecureAccountManager.networkManager
self.textSecureAccountManager = textSecureAccountManager self.textSecureAccountManager = textSecureAccountManager
self.preferences = preferences self.preferences = preferences

@ -12,10 +12,12 @@ public protocol ReturnToCallViewControllerDelegate: class {
@objc @objc
public class ReturnToCallViewController: UIViewController { public class ReturnToCallViewController: UIViewController {
@objc
public weak var delegate: ReturnToCallViewControllerDelegate? public weak var delegate: ReturnToCallViewControllerDelegate?
let returnToCallLabel = UILabel() let returnToCallLabel = UILabel()
@objc
public func startAnimating() { public func startAnimating() {
NotificationCenter.default.addObserver(self, selector: #selector(didTapStatusBar(notification:)), name: .TappedStatusBar, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(didTapStatusBar(notification:)), name: .TappedStatusBar, object: nil)
self.returnToCallLabel.layer.removeAllAnimations() self.returnToCallLabel.layer.removeAllAnimations()
@ -27,6 +29,7 @@ public class ReturnToCallViewController: UIViewController {
completion: { _ in self.returnToCallLabel.alpha = 1 }) completion: { _ in self.returnToCallLabel.alpha = 1 })
} }
@objc
public func stopAnimating() { public func stopAnimating() {
NotificationCenter.default.removeObserver(self, name: .TappedStatusBar, object: nil) NotificationCenter.default.removeObserver(self, name: .TappedStatusBar, object: nil)
self.returnToCallLabel.layer.removeAllAnimations() self.returnToCallLabel.layer.removeAllAnimations()

@ -7,16 +7,20 @@ import Foundation
@objc @objc
public class ContactShareViewModel: NSObject { public class ContactShareViewModel: NSObject {
@objc
public let dbRecord: OWSContact public let dbRecord: OWSContact
@objc
public var avatarImageData: Data? { public var avatarImageData: Data? {
didSet { didSet {
self.cachedAvatarImage = nil self.cachedAvatarImage = nil
} }
} }
var cachedAvatarImage: UIImage? private var cachedAvatarImage: UIImage?
var avatarImage: UIImage? {
@objc
public var avatarImage: UIImage? {
if self.cachedAvatarImage != nil { if self.cachedAvatarImage != nil {
return self.cachedAvatarImage return self.cachedAvatarImage
} }
@ -29,6 +33,7 @@ public class ContactShareViewModel: NSObject {
return cachedAvatarImage return cachedAvatarImage
} }
@objc
public required init(contactShareRecord: OWSContact, avatarImageData: Data?) { public required init(contactShareRecord: OWSContact, avatarImageData: Data?) {
self.dbRecord = contactShareRecord self.dbRecord = contactShareRecord
self.avatarImageData = avatarImageData self.avatarImageData = avatarImageData
@ -71,6 +76,7 @@ public class ContactShareViewModel: NSObject {
// MARK: Delegated -> dbRecord // MARK: Delegated -> dbRecord
@objc
public var name: OWSContactName { public var name: OWSContactName {
get { get {
return dbRecord.name return dbRecord.name
@ -80,6 +86,7 @@ public class ContactShareViewModel: NSObject {
} }
} }
@objc
public var addresses: [OWSContactAddress] { public var addresses: [OWSContactAddress] {
get { get {
return dbRecord.addresses return dbRecord.addresses
@ -89,6 +96,7 @@ public class ContactShareViewModel: NSObject {
} }
} }
@objc
public var emails: [OWSContactEmail] { public var emails: [OWSContactEmail] {
get { get {
return dbRecord.emails return dbRecord.emails
@ -98,6 +106,7 @@ public class ContactShareViewModel: NSObject {
} }
} }
@objc
public var phoneNumbers: [OWSContactPhoneNumber] { public var phoneNumbers: [OWSContactPhoneNumber] {
get { get {
return dbRecord.phoneNumbers return dbRecord.phoneNumbers
@ -107,30 +116,37 @@ public class ContactShareViewModel: NSObject {
} }
} }
@objc
public func systemContactsWithSignalAccountPhoneNumbers(_ contactsManager: ContactsManagerProtocol) -> [String] { public func systemContactsWithSignalAccountPhoneNumbers(_ contactsManager: ContactsManagerProtocol) -> [String] {
return dbRecord.systemContactsWithSignalAccountPhoneNumbers(contactsManager) return dbRecord.systemContactsWithSignalAccountPhoneNumbers(contactsManager)
} }
@objc
public func systemContactPhoneNumbers(_ contactsManager: ContactsManagerProtocol) -> [String] { public func systemContactPhoneNumbers(_ contactsManager: ContactsManagerProtocol) -> [String] {
return dbRecord.systemContactPhoneNumbers(contactsManager) return dbRecord.systemContactPhoneNumbers(contactsManager)
} }
@objc
public func e164PhoneNumbers() -> [String] { public func e164PhoneNumbers() -> [String] {
return dbRecord.e164PhoneNumbers() return dbRecord.e164PhoneNumbers()
} }
@objc
public var displayName: String { public var displayName: String {
return dbRecord.name.displayName return dbRecord.name.displayName
} }
@objc
public var ows_isValid: Bool { public var ows_isValid: Bool {
return dbRecord.ows_isValid() return dbRecord.ows_isValid()
} }
@objc
public var isProfileAvatar: Bool { public var isProfileAvatar: Bool {
return dbRecord.isProfileAvatar return dbRecord.isProfileAvatar
} }
@objc
public func cnContact(mergedWithExistingContact existingContact: Contact) -> CNContact? { public func cnContact(mergedWithExistingContact existingContact: Contact) -> CNContact? {
guard let newCNContact = OWSContacts.systemContact(for: self.dbRecord, imageData: self.avatarImageData) else { guard let newCNContact = OWSContacts.systemContact(for: self.dbRecord, imageData: self.avatarImageData) else {
@ -141,6 +157,7 @@ public class ContactShareViewModel: NSObject {
return existingContact.buildCNContact(mergedWithNewContact: newCNContact) return existingContact.buildCNContact(mergedWithNewContact: newCNContact)
} }
@objc
public func copy(withName name: OWSContactName) -> ContactShareViewModel { public func copy(withName name: OWSContactName) -> ContactShareViewModel {
// TODO move the `copy` logic into the view model? // TODO move the `copy` logic into the view model?
@ -149,6 +166,7 @@ public class ContactShareViewModel: NSObject {
return ContactShareViewModel(contactShareRecord: newDbRecord, avatarImageData: self.avatarImageData) return ContactShareViewModel(contactShareRecord: newDbRecord, avatarImageData: self.avatarImageData)
} }
@objc
public func newContact(withName name: OWSContactName) -> ContactShareViewModel { public func newContact(withName name: OWSContactName) -> ContactShareViewModel {
// TODO move the `newContact` logic into the view model? // TODO move the `newContact` logic into the view model?

@ -6,30 +6,35 @@ import Foundation
import UIKit import UIKit
@objc @objc
protocol NavBarLayoutDelegate: class { public protocol NavBarLayoutDelegate: class {
func navBarCallLayoutDidChange(navbar: OWSNavigationBar) func navBarCallLayoutDidChange(navbar: OWSNavigationBar)
} }
@objc @objc
class OWSNavigationBar: UINavigationBar { public class OWSNavigationBar: UINavigationBar {
weak var navBarLayoutDelegate: NavBarLayoutDelegate? @objc
public weak var navBarLayoutDelegate: NavBarLayoutDelegate?
let navbarWithoutStatusHeight: CGFloat = 44 @objc
public let navbarWithoutStatusHeight: CGFloat = 44
var callBannerHeight: CGFloat { @objc
public var callBannerHeight: CGFloat {
return OWSWindowManagerCallScreenHeight() return OWSWindowManagerCallScreenHeight()
} }
var statusBarHeight: CGFloat { @objc
public var statusBarHeight: CGFloat {
return CurrentAppContext().statusBarHeight return CurrentAppContext().statusBarHeight
} }
var fullWidth: CGFloat { @objc
public var fullWidth: CGFloat {
return UIScreen.main.bounds.size.width return UIScreen.main.bounds.size.width
} }
required init?(coder aDecoder: NSCoder) { public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
@ -54,7 +59,7 @@ class OWSNavigationBar: UINavigationBar {
self.navBarLayoutDelegate?.navBarCallLayoutDidChange(navbar: self) self.navBarLayoutDelegate?.navBarCallLayoutDidChange(navbar: self)
} }
override func sizeThatFits(_ size: CGSize) -> CGSize { public override func sizeThatFits(_ size: CGSize) -> CGSize {
guard OWSWindowManager.shared().hasCall() else { guard OWSWindowManager.shared().hasCall() else {
return super.sizeThatFits(size) return super.sizeThatFits(size)
} }
@ -69,7 +74,7 @@ class OWSNavigationBar: UINavigationBar {
} }
} }
override func layoutSubviews() { public override func layoutSubviews() {
guard OWSWindowManager.shared().hasCall() else { guard OWSWindowManager.shared().hasCall() else {
super.layoutSubviews() super.layoutSubviews()
return return

@ -4,12 +4,14 @@
import Foundation import Foundation
@objc
public extension UIDevice { public extension UIDevice {
var supportsCallKit: Bool { var supportsCallKit: Bool {
return ProcessInfo().isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0)) return ProcessInfo().isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0))
} }
var isIPhoneX: Bool { @objc
public var isIPhoneX: Bool {
switch UIScreen.main.nativeBounds.height { switch UIScreen.main.nativeBounds.height {
case 1136: case 1136:
// iPhone 5 or 5S or 5C // iPhone 5 or 5S or 5C

@ -15,6 +15,7 @@ public class ModalActivityIndicatorViewController: OWSViewController {
let canCancel: Bool let canCancel: Bool
@objc
public var wasCancelled: Bool = false public var wasCancelled: Bool = false
var activityIndicator: UIActivityIndicatorView? var activityIndicator: UIActivityIndicatorView?
@ -35,6 +36,7 @@ public class ModalActivityIndicatorViewController: OWSViewController {
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
} }
@objc
public class func present(fromViewController: UIViewController, public class func present(fromViewController: UIViewController,
canCancel: Bool, backgroundBlock : @escaping (ModalActivityIndicatorViewController) -> Void) { canCancel: Bool, backgroundBlock : @escaping (ModalActivityIndicatorViewController) -> Void) {
SwiftAssertIsOnMainThread(#function) SwiftAssertIsOnMainThread(#function)
@ -50,6 +52,7 @@ public class ModalActivityIndicatorViewController: OWSViewController {
} }
} }
@objc
public func dismiss(completion : @escaping () -> Void) { public func dismiss(completion : @escaping () -> Void) {
SwiftAssertIsOnMainThread(#function) SwiftAssertIsOnMainThread(#function)

@ -13,8 +13,8 @@ public class AudioActivity: NSObject {
return "<\(self.logTag) audioDescription: \"\(audioDescription)\">" return "<\(self.logTag) audioDescription: \"\(audioDescription)\">"
} }
public @objc
init(audioDescription: String) { public init(audioDescription: String) {
self.audioDescription = audioDescription self.audioDescription = audioDescription
} }
@ -27,7 +27,7 @@ public class AudioActivity: NSObject {
public class OWSAudioSession: NSObject { public class OWSAudioSession: NSObject {
// Force singleton access // Force singleton access
public static let shared = OWSAudioSession() @objc public static let shared = OWSAudioSession()
private override init() {} private override init() {}
private let avAudioSession = AVAudioSession.sharedInstance() private let avAudioSession = AVAudioSession.sharedInstance()
@ -35,6 +35,7 @@ public class OWSAudioSession: NSObject {
// Respects hardware mute switch, plays through external speaker, mixes with backround audio // Respects hardware mute switch, plays through external speaker, mixes with backround audio
// appropriate for foreground sound effects. // appropriate for foreground sound effects.
@objc
public func startAmbientAudioActivity(_ audioActivity: AudioActivity) { public func startAmbientAudioActivity(_ audioActivity: AudioActivity) {
Logger.debug("\(logTag) in \(#function)") Logger.debug("\(logTag) in \(#function)")
@ -56,6 +57,7 @@ public class OWSAudioSession: NSObject {
} }
// Ignores hardware mute switch, plays through external speaker // Ignores hardware mute switch, plays through external speaker
@objc
public func startPlaybackAudioActivity(_ audioActivity: AudioActivity) { public func startPlaybackAudioActivity(_ audioActivity: AudioActivity) {
Logger.debug("\(logTag) in \(#function)") Logger.debug("\(logTag) in \(#function)")
@ -71,6 +73,7 @@ public class OWSAudioSession: NSObject {
} }
} }
@objc
public func startRecordingAudioActivity(_ audioActivity: AudioActivity) -> Bool { public func startRecordingAudioActivity(_ audioActivity: AudioActivity) -> Bool {
Logger.debug("\(logTag) in \(#function)") Logger.debug("\(logTag) in \(#function)")
@ -90,6 +93,7 @@ public class OWSAudioSession: NSObject {
} }
} }
@objc
public func startAudioActivity(_ audioActivity: AudioActivity) { public func startAudioActivity(_ audioActivity: AudioActivity) {
Logger.debug("\(logTag) in \(#function) with \(audioActivity)") Logger.debug("\(logTag) in \(#function) with \(audioActivity)")
@ -99,6 +103,7 @@ public class OWSAudioSession: NSObject {
self.currentActivities.append(Weak(value: audioActivity)) self.currentActivities.append(Weak(value: audioActivity))
} }
@objc
public func endAudioActivity(_ audioActivity: AudioActivity) { public func endAudioActivity(_ audioActivity: AudioActivity) {
Logger.debug("\(logTag) in \(#function) with audioActivity: \(audioActivity)") Logger.debug("\(logTag) in \(#function) with audioActivity: \(audioActivity)")
@ -171,6 +176,7 @@ public class OWSAudioSession: NSObject {
* This must be called before any audio tracks are added to the peerConnection, else we'll start recording before all * This must be called before any audio tracks are added to the peerConnection, else we'll start recording before all
* our signaling is set up. * our signaling is set up.
*/ */
@objc
public func configureRTCAudio() { public func configureRTCAudio() {
Logger.info("\(logTag) in \(#function)") Logger.info("\(logTag) in \(#function)")
rtcAudioSession.useManualAudio = true rtcAudioSession.useManualAudio = true
@ -180,6 +186,7 @@ public class OWSAudioSession: NSObject {
* Because we useManualAudio with our RTCAudioSession, we have to start/stop the recording audio session ourselves. * Because we useManualAudio with our RTCAudioSession, we have to start/stop the recording audio session ourselves.
* See header for details on manual audio. * See header for details on manual audio.
*/ */
@objc
public var isRTCAudioEnabled: Bool { public var isRTCAudioEnabled: Bool {
get { get {
return rtcAudioSession.isAudioEnabled return rtcAudioSession.isAudioEnabled

@ -20,6 +20,7 @@ public class DeviceSleepManager: NSObject {
let TAG = "[DeviceSleepManager]" let TAG = "[DeviceSleepManager]"
@objc
public static let sharedInstance = DeviceSleepManager() public static let sharedInstance = DeviceSleepManager()
private class SleepBlock: CustomDebugStringConvertible { private class SleepBlock: CustomDebugStringConvertible {
@ -57,6 +58,7 @@ public class DeviceSleepManager: NSObject {
ensureSleepBlocking() ensureSleepBlocking()
} }
@objc
public func addBlock(blockObject: NSObject) { public func addBlock(blockObject: NSObject) {
SwiftAssertIsOnMainThread(#function) SwiftAssertIsOnMainThread(#function)
@ -65,6 +67,7 @@ public class DeviceSleepManager: NSObject {
ensureSleepBlocking() ensureSleepBlocking()
} }
@objc
public func removeBlock(blockObject: NSObject) { public func removeBlock(blockObject: NSObject) {
SwiftAssertIsOnMainThread(#function) SwiftAssertIsOnMainThread(#function)

@ -7,14 +7,17 @@ public class AnyLRUCache: NSObject {
let backingCache: LRUCache<NSObject, NSObject> let backingCache: LRUCache<NSObject, NSObject>
@objc
public init(maxSize: Int) { public init(maxSize: Int) {
backingCache = LRUCache(maxSize: maxSize) backingCache = LRUCache(maxSize: maxSize)
} }
@objc
public func get(key: NSObject) -> NSObject? { public func get(key: NSObject) -> NSObject? {
return self.backingCache.get(key: key) return self.backingCache.get(key: key)
} }
@objc
public func set(key: NSObject, value: NSObject) { public func set(key: NSObject, value: NSObject) {
self.backingCache.set(key: key, value: value) self.backingCache.set(key: key, value: value)
} }

Loading…
Cancel
Save