Share a photo from photos app
Shows the conversation picker, and sends the attachment to that conversation. There's still a lot TODO -[ ] resolve JSQ dependency -[ ] properly wait for app to load -[ ] dismiss share extension after send is complete -[ ] support non jpeg file types -[ ] Fix device sleep manager // FREEBIE
This commit is contained in:
parent
f781199e27
commit
a58f1f385c
|
@ -26,5 +26,6 @@ DerivedData
|
|||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
Index/
|
||||
|
||||
Pods/
|
||||
Pods/
|
||||
|
|
5
Podfile
5
Podfile
|
@ -17,6 +17,9 @@ def shared_pods
|
|||
|
||||
# third party pods
|
||||
pod 'AFNetworking', inhibit_warnings: true
|
||||
pod 'JSQMessagesViewController', git: 'https://github.com/WhisperSystems/JSQMessagesViewController.git', branch: 'mkirk/share-compatible', :inhibit_warnings => true
|
||||
#pod 'JSQMessagesViewController', git: 'https://github.com/WhisperSystems/JSQMessagesViewController.git', branch: 'signal-master', :inhibit_warnings => true
|
||||
#pod 'JSQMessagesViewController', path: '../JSQMessagesViewController'
|
||||
pod 'Mantle', :inhibit_warnings => true
|
||||
pod 'YapDatabase/SQLCipher', '~> 2.9.3', :inhibit_warnings => true
|
||||
pod 'PureLayout', :inhibit_warnings => true
|
||||
|
@ -28,8 +31,6 @@ end
|
|||
target 'Signal' do
|
||||
shared_pods
|
||||
pod 'ATAppUpdater', :inhibit_warnings => true
|
||||
pod 'JSQMessagesViewController', git: 'https://github.com/WhisperSystems/JSQMessagesViewController.git', branch: 'signal-master', :inhibit_warnings => true
|
||||
#pod 'JSQMessagesViewController', path: '../JSQMessagesViewController'
|
||||
|
||||
target 'SignalTests' do
|
||||
inherit! :search_paths
|
||||
|
|
10
Podfile.lock
10
Podfile.lock
|
@ -121,7 +121,7 @@ DEPENDENCIES:
|
|||
- Curve25519Kit (from `https://github.com/WhisperSystems/Curve25519Kit`, branch `mkirk/framework-friendly`)
|
||||
- GRKOpenSSLFramework (from `https://github.com/WhisperSystems/GRKOpenSSLFramework`)
|
||||
- HKDFKit (from `https://github.com/WhisperSystems/HKDFKit.git`, branch `mkirk/framework-friendly`)
|
||||
- JSQMessagesViewController (from `https://github.com/WhisperSystems/JSQMessagesViewController.git`, branch `signal-master`)
|
||||
- JSQMessagesViewController (from `https://github.com/WhisperSystems/JSQMessagesViewController.git`, branch `mkirk/share-compatible`)
|
||||
- Mantle
|
||||
- PureLayout
|
||||
- Reachability
|
||||
|
@ -143,7 +143,7 @@ EXTERNAL SOURCES:
|
|||
:branch: mkirk/framework-friendly
|
||||
:git: https://github.com/WhisperSystems/HKDFKit.git
|
||||
JSQMessagesViewController:
|
||||
:branch: signal-master
|
||||
:branch: mkirk/share-compatible
|
||||
:git: https://github.com/WhisperSystems/JSQMessagesViewController.git
|
||||
SignalServiceKit:
|
||||
:path: .
|
||||
|
@ -164,7 +164,7 @@ CHECKOUT OPTIONS:
|
|||
:commit: d2e2e50990e88537d6c4e38cc32a6f6debd83446
|
||||
:git: https://github.com/WhisperSystems/HKDFKit.git
|
||||
JSQMessagesViewController:
|
||||
:commit: 7d9e7562c67f3c7c71962bf9fe15c1695333c92f
|
||||
:commit: 33dd72b7bac85fc54a87fb8016c9a927af222153
|
||||
:git: https://github.com/WhisperSystems/JSQMessagesViewController.git
|
||||
SocketRocket:
|
||||
:commit: 28035e1a98a427853e4038ff1b70479fa8374cfa
|
||||
|
@ -186,7 +186,7 @@ SPEC CHECKSUMS:
|
|||
PureLayout: 4d550abe49a94f24c2808b9b95db9131685fe4cd
|
||||
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
|
||||
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
|
||||
SignalServiceKit: e1fa31c513e47afcb02c9c540d2931fd24d86311
|
||||
SignalServiceKit: eacb357b55f76e5475662c801038371f37d7b02d
|
||||
SocketRocket: dbb1554b8fc288ef8ef370d6285aeca7361be31e
|
||||
SQLCipher: 43d12c0eb9c57fb438749618fc3ce0065509a559
|
||||
TwistedOakCollapsingFutures: f359b90f203e9ab13dfb92c9ff41842a7fe1cd0c
|
||||
|
@ -194,6 +194,6 @@ SPEC CHECKSUMS:
|
|||
YapDatabase: cd911121580ff16675f65ad742a9eb0ab4d9e266
|
||||
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
||||
|
||||
PODFILE CHECKSUM: 5e9411d9fb24e9b9b4759d5fb2b0a539a9bc8695
|
||||
PODFILE CHECKSUM: 95e805068c7c37952aa91bb1cf4334a87030aa45
|
||||
|
||||
COCOAPODS: 1.3.1
|
||||
|
|
|
@ -8,11 +8,7 @@
|
|||
|
||||
/* Begin PBXBuildFile section */
|
||||
2AE2882E4C2B96BFFF9EE27C /* Pods_SignalShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F94C85CB0B235DA37F68ED0 /* Pods_SignalShareExtension.framework */; };
|
||||
3400C7931EAF89CD008A8584 /* SendExternalFileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7911EAF89CD008A8584 /* SendExternalFileViewController.m */; };
|
||||
3400C7961EAF99F4008A8584 /* SelectThreadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */; };
|
||||
3400C7991EAFB772008A8584 /* ThreadViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7981EAFB772008A8584 /* ThreadViewHelper.m */; };
|
||||
340B02BA1FA0D6C700F9CFEC /* ConversationViewItemTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 340B02B91FA0D6C700F9CFEC /* ConversationViewItemTest.m */; };
|
||||
340CB2241EAC155C0001CAA1 /* ContactsViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 340CB2231EAC155C0001CAA1 /* ContactsViewHelper.m */; };
|
||||
340CB2271EAC25820001CAA1 /* UpdateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340CB2261EAC25820001CAA1 /* UpdateGroupViewController.m */; };
|
||||
341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */ = {isa = PBXBuildFile; fileRef = 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */; };
|
||||
3430FE181F7751D4000EC51B /* GiphyAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430FE171F7751D4000EC51B /* GiphyAPI.swift */; };
|
||||
|
@ -22,7 +18,6 @@
|
|||
34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34330AA21E79686200DF2FB9 /* OWSProgressView.m */; };
|
||||
343A65951FC47D5E000477A1 /* DebugUISyncMessages.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65941FC47D5E000477A1 /* DebugUISyncMessages.m */; };
|
||||
343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */; };
|
||||
343D3D9B1E9283F100165CA4 /* BlockListUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 343D3D9A1E9283F100165CA4 /* BlockListUIUtils.m */; };
|
||||
34480B361FD0929200BC14EF /* ShareAppExtensionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B351FD0929200BC14EF /* ShareAppExtensionContext.m */; };
|
||||
34480B491FD0A60200BC14EF /* OWSMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B481FD0A60200BC14EF /* OWSMath.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
34480B521FD0A7A400BC14EF /* OWSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B4A1FD0A7A200BC14EF /* OWSLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -32,13 +27,12 @@
|
|||
34480B571FD0A7A400BC14EF /* OWSScrubbingLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B4F1FD0A7A300BC14EF /* OWSScrubbingLogFormatter.h */; };
|
||||
34480B591FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B511FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m */; };
|
||||
34480B5B1FD0A7E300BC14EF /* SignalMessaging-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 34480B5A1FD0A7E300BC14EF /* SignalMessaging-Prefix.pch */; };
|
||||
34480B611FD0A98800BC14EF /* UIColor+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B5D1FD0A98800BC14EF /* UIColor+OWS.h */; };
|
||||
34480B611FD0A98800BC14EF /* UIColor+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B5D1FD0A98800BC14EF /* UIColor+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
34480B621FD0A98800BC14EF /* UIColor+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B5E1FD0A98800BC14EF /* UIColor+OWS.m */; };
|
||||
34480B631FD0A98800BC14EF /* UIView+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B5F1FD0A98800BC14EF /* UIView+OWS.h */; };
|
||||
34480B631FD0A98800BC14EF /* UIView+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B5F1FD0A98800BC14EF /* UIView+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
34480B641FD0A98800BC14EF /* UIView+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B601FD0A98800BC14EF /* UIView+OWS.m */; };
|
||||
34480B671FD0AA9400BC14EF /* UIFont+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B651FD0AA9400BC14EF /* UIFont+OWS.m */; };
|
||||
34480B681FD0AA9400BC14EF /* UIFont+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B661FD0AA9400BC14EF /* UIFont+OWS.h */; };
|
||||
34533F181EA8D2070006114F /* OWSAudioAttachmentPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 34533F171EA8D2070006114F /* OWSAudioAttachmentPlayer.m */; };
|
||||
34480B681FD0AA9400BC14EF /* UIFont+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 34480B661FD0AA9400BC14EF /* UIFont+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
3461284B1FD0B94000532771 /* SAELoadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3461284A1FD0B93F00532771 /* SAELoadViewController.swift */; };
|
||||
346129341FD1A88700532771 /* OWSSwiftUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129331FD1A88700532771 /* OWSSwiftUtils.swift */; };
|
||||
346129391FD1B47300532771 /* OWSPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129371FD1B47200532771 /* OWSPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -58,7 +52,7 @@
|
|||
346129961FD1E30000532771 /* OWSDatabaseMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129941FD1E30000532771 /* OWSDatabaseMigration.m */; };
|
||||
346129991FD1E4DA00532771 /* SignalApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129971FD1E4D900532771 /* SignalApp.m */; };
|
||||
3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3461299B1FD1EA9E00532771 /* NotificationsManager.m */; };
|
||||
346129A51FD1F09100532771 /* OWSContactsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129A21FD1F09100532771 /* OWSContactsManager.h */; };
|
||||
346129A51FD1F09100532771 /* OWSContactsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129A21FD1F09100532771 /* OWSContactsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129A31FD1F09100532771 /* OWSContactsManager.m */; };
|
||||
346129A91FD1F0E000532771 /* OWSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129A81FD1F0DF00532771 /* OWSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129AB1FD1F0EE00532771 /* OWSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129AA1FD1F0EE00532771 /* OWSFormat.m */; };
|
||||
|
@ -67,11 +61,10 @@
|
|||
346129B41FD1F7E800532771 /* OWSProfileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129B11FD1F7E800532771 /* OWSProfileManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129B51FD1F7E800532771 /* OWSProfileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129B21FD1F7E800532771 /* OWSProfileManager.m */; };
|
||||
346129B61FD1F7E800532771 /* ProfileFetcherJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129B31FD1F7E800532771 /* ProfileFetcherJob.swift */; };
|
||||
346129BF1FD2068600532771 /* ThreadUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129BE1FD2068600532771 /* ThreadUtil.m */; };
|
||||
346129C71FD2072E00532771 /* NSString+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129C01FD2072C00532771 /* NSString+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129C81FD2072E00532771 /* NSAttributedString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129C11FD2072D00532771 /* NSAttributedString+OWS.m */; };
|
||||
346129C91FD2072E00532771 /* NSString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129C21FD2072D00532771 /* NSString+OWS.m */; };
|
||||
346129CA1FD2072E00532771 /* UIImage+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129C31FD2072D00532771 /* UIImage+OWS.h */; };
|
||||
346129CA1FD2072E00532771 /* UIImage+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129C31FD2072D00532771 /* UIImage+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129CB1FD2072E00532771 /* Promise+retainUntilComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346129C41FD2072D00532771 /* Promise+retainUntilComplete.swift */; };
|
||||
346129CC1FD2072E00532771 /* NSAttributedString+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129C51FD2072D00532771 /* NSAttributedString+OWS.h */; };
|
||||
346129CD1FD2072E00532771 /* UIImage+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129C61FD2072D00532771 /* UIImage+OWS.m */; };
|
||||
|
@ -151,21 +144,16 @@
|
|||
34B3F8931E8DF1710035BE1A /* SignalsNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */; };
|
||||
34B3F8941E8DF1710035BE1A /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8701E8DF1700035BE1A /* HomeViewController.m */; };
|
||||
34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89B1E8DF3270035BE1A /* BlockListViewController.m */; };
|
||||
34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */; };
|
||||
34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */; };
|
||||
34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2A1F74C12700D7438D /* DebugUIStress.m */; };
|
||||
34BECE2E1F7ABCE000D7438D /* GifPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2D1F7ABCE000D7438D /* GifPickerViewController.swift */; };
|
||||
34BECE301F7ABCF800D7438D /* GifPickerLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2F1F7ABCF800D7438D /* GifPickerLayout.swift */; };
|
||||
34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */; };
|
||||
34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */; };
|
||||
34C42D661F4734ED0072EC04 /* OWSContactOffersInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D631F4734ED0072EC04 /* OWSContactOffersInteraction.m */; };
|
||||
34C42D671F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D651F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m */; };
|
||||
34C6B0A91FA0E46F00D35993 /* test-gif.gif in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0A51FA0E46F00D35993 /* test-gif.gif */; };
|
||||
34C6B0AB1FA0E46F00D35993 /* test-mp3.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0A71FA0E46F00D35993 /* test-mp3.mp3 */; };
|
||||
34C6B0AC1FA0E46F00D35993 /* test-mp4.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0A81FA0E46F00D35993 /* test-mp4.mp4 */; };
|
||||
34C6B0AE1FA0E4AA00D35993 /* test-jpg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0AD1FA0E4AA00D35993 /* test-jpg.jpg */; };
|
||||
34CA1C271F7156F300E51C51 /* MessageDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */; };
|
||||
34CA1C291F7164F700E51C51 /* MediaMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */; };
|
||||
34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF371F0C0599004084F4 /* AppUpdateNag.m */; };
|
||||
34CCAF3B1F0C2748004084F4 /* OWSAddToContactViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */; };
|
||||
34CE88E71F2FB9A10098030F /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CE88E61F2FB9A10098030F /* ProfileViewController.m */; };
|
||||
|
@ -193,9 +181,7 @@
|
|||
34D8C0271ED3673300188D7C /* DebugUIMessages.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C0241ED3673300188D7C /* DebugUIMessages.m */; };
|
||||
34D8C0281ED3673300188D7C /* DebugUITableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C0261ED3673300188D7C /* DebugUITableViewController.m */; };
|
||||
34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */; };
|
||||
34D9134B1F62D4A500722898 /* SignalAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D913491F62D4A500722898 /* SignalAttachment.swift */; };
|
||||
34D9134D1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D9134C1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift */; };
|
||||
34D99C8C1F27B13B00D284D6 /* OWSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C8B1F27B13B00D284D6 /* OWSViewController.m */; };
|
||||
34D99C931F2937CC00D284D6 /* OWSAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */; };
|
||||
34DFCB851E8E04B500053165 /* AddToBlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DFCB841E8E04B500053165 /* AddToBlockListViewController.m */; };
|
||||
34E3E5681EC4B19400495BAC /* AudioProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E3E5671EC4B19400495BAC /* AudioProgressView.swift */; };
|
||||
|
@ -212,8 +198,42 @@
|
|||
451686AB1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451686AA1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift */; };
|
||||
4517642A1DE939FD00EDB8B9 /* ContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 451764281DE939FD00EDB8B9 /* ContactCell.xib */; };
|
||||
4517642B1DE939FD00EDB8B9 /* ContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451764291DE939FD00EDB8B9 /* ContactCell.swift */; };
|
||||
45194F8F1FD71FF500333B2C /* ThreadUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129BE1FD2068600532771 /* ThreadUtil.m */; };
|
||||
45194F901FD7200000333B2C /* ThreadUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129BD1FD2068600532771 /* ThreadUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
45194F921FD7215600333B2C /* OWSContactOffersInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C42D621F4734ED0072EC04 /* OWSContactOffersInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
45194F931FD7215C00333B2C /* OWSContactOffersInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D631F4734ED0072EC04 /* OWSContactOffersInteraction.m */; };
|
||||
45194F941FD7216000333B2C /* TSUnreadIndicatorInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C42D641F4734ED0072EC04 /* TSUnreadIndicatorInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
45194F951FD7216600333B2C /* TSUnreadIndicatorInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D651F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m */; };
|
||||
45194F961FD7226300333B2C /* SelectThreadViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
45194F9B1FD7327600333B2C /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 45194F9A1FD7327600333B2C /* Media.xcassets */; };
|
||||
451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451A13B01E13DED2000A50FD /* CallNotificationsAdapter.swift */; };
|
||||
451DE9FD1DC1A28200810E42 /* SyncPushTokensJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451DE9FC1DC1A28200810E42 /* SyncPushTokensJob.swift */; };
|
||||
451DE9FE1DC1A28200810E42 /* SyncPushTokensJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451DE9FC1DC1A28200810E42 /* SyncPushTokensJob.swift */; };
|
||||
451F8A311FD70DE9005CB9DA /* SendExternalFileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7911EAF89CD008A8584 /* SendExternalFileViewController.m */; };
|
||||
451F8A321FD70DFA005CB9DA /* SendExternalFileViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3400C7901EAF89CD008A8584 /* SendExternalFileViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A331FD71083005CB9DA /* SelectThreadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */; };
|
||||
451F8A341FD710C3005CB9DA /* ConversationSearcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451777C71FD61554001225FF /* ConversationSearcher.swift */; };
|
||||
451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45360B8C1F9521F800FA666C /* Searcher.swift */; };
|
||||
451F8A371FD71179005CB9DA /* OWSViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D99C8A1F27B13B00D284D6 /* OWSViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A381FD7117E005CB9DA /* OWSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C8B1F27B13B00D284D6 /* OWSViewController.m */; };
|
||||
451F8A391FD711D6005CB9DA /* ContactsViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 340CB2231EAC155C0001CAA1 /* ContactsViewHelper.m */; };
|
||||
451F8A3A1FD711D9005CB9DA /* ContactsViewHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 340CB2221EAC155C0001CAA1 /* ContactsViewHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A3B1FD71297005CB9DA /* UIUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B97940261832BD2400BD66CB /* UIUtil.m */; };
|
||||
451F8A3C1FD71392005CB9DA /* UIUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = B97940251832BD2400BD66CB /* UIUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A3D1FD713CA005CB9DA /* ThreadViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3400C7981EAFB772008A8584 /* ThreadViewHelper.m */; };
|
||||
451F8A3E1FD713D2005CB9DA /* ThreadViewHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3400C7971EAFB772008A8584 /* ThreadViewHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */; };
|
||||
451F8A401FD7145D005CB9DA /* OWSTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B3F89D1E8DF5490035BE1A /* OWSTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A411FD714B8005CB9DA /* ContactTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB052F18170B33006006FC /* ContactTableViewCell.m */; };
|
||||
451F8A421FD714C7005CB9DA /* ContactTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 76EB052E18170B33006006FC /* ContactTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A431FD714FE005CB9DA /* AvatarImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */; };
|
||||
451F8A441FD7156B005CB9DA /* BlockListUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 343D3D9A1E9283F100165CA4 /* BlockListUIUtils.m */; };
|
||||
451F8A451FD71570005CB9DA /* BlockListUIUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 343D3D991E9283F100165CA4 /* BlockListUIUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A461FD715BA005CB9DA /* OWSGroupAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */; };
|
||||
451F8A471FD715BA005CB9DA /* OWSAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */; };
|
||||
451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; };
|
||||
451F8A491FD715CF005CB9DA /* OWSAvatarBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 45666EC41D99483D008FE134 /* OWSAvatarBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A4A1FD715D9005CB9DA /* OWSContactAvatarBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 45855F351D9498A40084F340 /* OWSContactAvatarBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
451F8A4B1FD715E1005CB9DA /* OWSGroupAvatarBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 45666EC71D994C0D008FE134 /* OWSGroupAvatarBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
452037D11EE84975004E4CDF /* DebugUISessionState.m in Sources */ = {isa = PBXBuildFile; fileRef = 452037D01EE84975004E4CDF /* DebugUISessionState.m */; };
|
||||
4520D8D51D417D8E00123472 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4520D8D41D417D8E00123472 /* Photos.framework */; };
|
||||
4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */; };
|
||||
|
@ -233,16 +253,21 @@
|
|||
453518A21FC63E2900210559 /* SignalMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 453518921FC63DBF00210559 /* SignalMessaging.framework */; };
|
||||
45360B8D1F9521F800FA666C /* Searcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45360B8C1F9521F800FA666C /* Searcher.swift */; };
|
||||
45360B901F9527DA00FA666C /* SearcherTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45360B8F1F9527DA00FA666C /* SearcherTest.swift */; };
|
||||
45360B911F952AA900FA666C /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */; };
|
||||
4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4539B5851F79348F007141FF /* PushRegistrationManager.swift */; };
|
||||
45464DBC1DFA041F001D3FD6 /* DataChannelMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45464DBB1DFA041F001D3FD6 /* DataChannelMessage.swift */; };
|
||||
454A965A1FD6017E008D2A0E /* SignalAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D913491F62D4A500722898 /* SignalAttachment.swift */; };
|
||||
454A965B1FD601BF008D2A0E /* MediaMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */; };
|
||||
454A965D1FD602B1008D2A0E /* OWSAudioAttachmentPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 34533F161EA8D2070006114F /* OWSAudioAttachmentPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
454A965F1FD60EA3008D2A0E /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A965E1FD60EA2008D2A0E /* OWSFlatButton.swift */; };
|
||||
454A96601FD61165008D2A0E /* OWSAudioAttachmentPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 34533F171EA8D2070006114F /* OWSAudioAttachmentPlayer.m */; };
|
||||
454EBAB41F2BE14C00ACE0BB /* OWSAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */; };
|
||||
4556FA681F54AA9500AF40DD /* DebugUIProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */; };
|
||||
455A16DD1F1FEA0000F86704 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 455A16DB1F1FEA0000F86704 /* Metal.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
455A16DE1F1FEA0000F86704 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 455A16DC1F1FEA0000F86704 /* MetalKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
455AC69E1F4F8B0300134004 /* ImageCacheTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 455AC69D1F4F8B0300134004 /* ImageCacheTest.swift */; };
|
||||
45638BDC1F3DD0D400128435 /* DebugUICalling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45638BDB1F3DD0D400128435 /* DebugUICalling.swift */; };
|
||||
45638BDF1F3DDB2200128435 /* MessageSender+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45638BDE1F3DDB2200128435 /* MessageSender+Promise.swift */; };
|
||||
45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */; };
|
||||
45666EC91D994C0D008FE134 /* OWSGroupAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */; };
|
||||
45666F581D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F571D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m */; };
|
||||
456C38961DC7B882007536A7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 451DE9F11DC1585F00810E42 /* PromiseKit.framework */; };
|
||||
456F6E2F1E261D1000FD2210 /* PeerConnectionClientTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 456F6E2E1E261D1000FD2210 /* PeerConnectionClientTest.swift */; };
|
||||
|
@ -250,17 +275,8 @@
|
|||
4579431E1E7C8CE9008ED0C0 /* Pastelog.m in Sources */ = {isa = PBXBuildFile; fileRef = 4579431D1E7C8CE9008ED0C0 /* Pastelog.m */; };
|
||||
45794E861E00620000066731 /* CallUIAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45794E851E00620000066731 /* CallUIAdapter.swift */; };
|
||||
45847E871E4283C30080EAB3 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45847E861E4283C30080EAB3 /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; };
|
||||
4585C4681ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */; };
|
||||
458967111DC117CC00E9DD21 /* AccountManagerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458967101DC117CC00E9DD21 /* AccountManagerTest.swift */; };
|
||||
458D51481FCCD82500B5BC53 /* GSR4.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51401FCCD82400B5BC53 /* GSR4.crt */; };
|
||||
458D51491FCCD82500B5BC53 /* GTSR3.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51411FCCD82400B5BC53 /* GTSR3.crt */; };
|
||||
458D514A1FCCD82500B5BC53 /* GIAG2.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51421FCCD82400B5BC53 /* GIAG2.crt */; };
|
||||
458D514B1FCCD82500B5BC53 /* GSR2.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51431FCCD82500B5BC53 /* GSR2.crt */; };
|
||||
458D514C1FCCD82500B5BC53 /* GTSR1.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51441FCCD82500B5BC53 /* GTSR1.crt */; };
|
||||
458D514D1FCCD82500B5BC53 /* textsecure.cer in Resources */ = {isa = PBXBuildFile; fileRef = 458D51451FCCD82500B5BC53 /* textsecure.cer */; };
|
||||
458D514E1FCCD82500B5BC53 /* GTSR2.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51461FCCD82500B5BC53 /* GTSR2.crt */; };
|
||||
458D514F1FCCD82500B5BC53 /* GTSR4.crt in Resources */ = {isa = PBXBuildFile; fileRef = 458D51471FCCD82500B5BC53 /* GTSR4.crt */; };
|
||||
458DE9D61DEE3FD00071BB03 /* PeerConnectionClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458DE9D51DEE3FD00071BB03 /* PeerConnectionClient.swift */; };
|
||||
458DE9D91DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.m in Sources */ = {isa = PBXBuildFile; fileRef = 458DE9D81DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.m */; };
|
||||
458E38371D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 458E38361D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m */; };
|
||||
|
@ -269,7 +285,6 @@
|
|||
45A663C51F92EC760027B59E /* GroupTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A663C41F92EC760027B59E /* GroupTableViewCell.swift */; };
|
||||
45A6DAD61EBBF85500893231 /* ReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A6DAD51EBBF85500893231 /* ReminderView.swift */; };
|
||||
45AE48511E0732D6004D96C2 /* TurnServerInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AE48501E0732D6004D96C2 /* TurnServerInfo.swift */; };
|
||||
45B72DDA1FD5E70600151AF6 /* ConversationSearcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B72DD91FD5E70600151AF6 /* ConversationSearcher.swift */; };
|
||||
45BB93381E688E14001E3939 /* UIDevice+featureSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45BB93371E688E14001E3939 /* UIDevice+featureSupport.swift */; };
|
||||
45BD60821DE9547E00A8F436 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45BD60811DE9547E00A8F436 /* Contacts.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
45C0DC1B1E68FE9000E04C47 /* UIApplication+OWS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C0DC1A1E68FE9000E04C47 /* UIApplication+OWS.swift */; };
|
||||
|
@ -285,7 +300,6 @@
|
|||
45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; };
|
||||
45F170BB1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170BA1E2FC5D3003FC1F2 /* CallAudioService.swift */; };
|
||||
45F170D61E315310003FC1F2 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170D51E315310003FC1F2 /* Weak.swift */; };
|
||||
45F3AEB61DFDE7900080CE33 /* AvatarImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */; };
|
||||
45F659731E1BD99C00444429 /* CallKitCallUIAdaptee.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F659721E1BD99C00444429 /* CallKitCallUIAdaptee.swift */; };
|
||||
45F659821E1BE77000444429 /* NonCallKitCallUIAdaptee.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F659811E1BE77000444429 /* NonCallKitCallUIAdaptee.swift */; };
|
||||
45FBC5C81DF8575700E9B410 /* CallKitCallManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45FBC59A1DF8575700E9B410 /* CallKitCallManager.swift */; };
|
||||
|
@ -297,7 +311,6 @@
|
|||
76EB054018170B33006006FC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB03C318170B33006006FC /* AppDelegate.m */; };
|
||||
76EB063A18170B33006006FC /* FunctionalUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04EB18170B33006006FC /* FunctionalUtil.m */; };
|
||||
76EB063C18170B33006006FC /* NumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04ED18170B33006006FC /* NumberUtil.m */; };
|
||||
76EB068618170B34006006FC /* ContactTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB052F18170B33006006FC /* ContactTableViewCell.m */; };
|
||||
954AEE6A1DF33E01002E5410 /* ContactsPickerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AEE681DF33D32002E5410 /* ContactsPickerTest.swift */; };
|
||||
A10FDF79184FB4BB007FF963 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */; };
|
||||
A11CD70D17FA230600A2D1B1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */; };
|
||||
|
@ -340,6 +353,12 @@
|
|||
B660F6DA1C29868000687D6E /* ExceptionsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6AB1C29868000687D6E /* ExceptionsTest.m */; };
|
||||
B660F6DB1C29868000687D6E /* FunctionalUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6AD1C29868000687D6E /* FunctionalUtilTest.m */; };
|
||||
B660F6E01C29868000687D6E /* UtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B660F6B41C29868000687D6E /* UtilTest.m */; };
|
||||
B660F7561C29988E00687D6E /* PushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9ECFB198B31BA00C620D3 /* PushManager.m */; };
|
||||
B660F7721C29988E00687D6E /* AppStoreRating.m in Sources */ = {isa = PBXBuildFile; fileRef = B6DA6B061B8A2F9A00CA6F98 /* AppStoreRating.m */; };
|
||||
B660F77F1C29988E00687D6E /* DateUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B90418E5183E9DD40038554A /* DateUtil.m */; };
|
||||
B660F7811C29988E00687D6E /* FunctionalUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04EB18170B33006006FC /* FunctionalUtil.m */; };
|
||||
B660F7831C29988E00687D6E /* NumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04ED18170B33006006FC /* NumberUtil.m */; };
|
||||
B660F78C1C29988E00687D6E /* UIDevice+TSHardwareVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC81A971A44558300DFEC7D /* UIDevice+TSHardwareVersion.m */; };
|
||||
B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B66DBF4919D5BBC8006EA940 /* Images.xcassets */; };
|
||||
B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B67EBF5C19194AC60084CCFD /* Settings.bundle */; };
|
||||
B69CD25119773E79005CE69A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B69CD25019773E79005CE69A /* XCTest.framework */; };
|
||||
|
@ -349,7 +368,6 @@
|
|||
B6F509971AA53F760068F56A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; };
|
||||
B6FE7EB71ADD62FA00A6D22F /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */; };
|
||||
B90418E6183E9DD40038554A /* DateUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B90418E5183E9DD40038554A /* DateUtil.m */; };
|
||||
B97940271832BD2400BD66CB /* UIUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B97940261832BD2400BD66CB /* UIUtil.m */; };
|
||||
B9EB5ABD1884C002007CBB57 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9EB5ABC1884C002007CBB57 /* MessageUI.framework */; };
|
||||
BFF3FB9730634F37D25903F4 /* Pods_Signal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D17BB5C25D615AB49813100C /* Pods_Signal.framework */; };
|
||||
CC875800737563D6891B741D /* Pods_SignalTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748A5CAEDD7C919FC64C6807 /* Pods_SignalTests.framework */; };
|
||||
|
@ -629,7 +647,6 @@
|
|||
34BECE2A1F74C12700D7438D /* DebugUIStress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIStress.m; sourceTree = "<group>"; };
|
||||
34BECE2D1F7ABCE000D7438D /* GifPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GifPickerViewController.swift; sourceTree = "<group>"; };
|
||||
34BECE2F1F7ABCF800D7438D /* GifPickerLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GifPickerLayout.swift; sourceTree = "<group>"; };
|
||||
34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSFlatButton.swift; sourceTree = "<group>"; };
|
||||
34C42D591F45F7A80072EC04 /* OWSNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSNavigationController.h; sourceTree = "<group>"; };
|
||||
34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSNavigationController.m; sourceTree = "<group>"; };
|
||||
34C42D621F4734ED0072EC04 /* OWSContactOffersInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactOffersInteraction.h; sourceTree = "<group>"; };
|
||||
|
@ -723,6 +740,8 @@
|
|||
451686AA1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiDeviceProfileKeyUpdateJob.swift; sourceTree = "<group>"; };
|
||||
451764281DE939FD00EDB8B9 /* ContactCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactCell.xib; sourceTree = "<group>"; };
|
||||
451764291DE939FD00EDB8B9 /* ContactCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactCell.swift; sourceTree = "<group>"; };
|
||||
451777C71FD61554001225FF /* ConversationSearcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConversationSearcher.swift; sourceTree = "<group>"; };
|
||||
45194F9A1FD7327600333B2C /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
|
||||
451A13B01E13DED2000A50FD /* CallNotificationsAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = CallNotificationsAdapter.swift; path = ../UserInterface/Notifications/CallNotificationsAdapter.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
451DE9F11DC1585F00810E42 /* PromiseKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PromiseKit.framework; path = Carthage/Build/iOS/PromiseKit.framework; sourceTree = "<group>"; };
|
||||
451DE9FC1DC1A28200810E42 /* SyncPushTokensJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SyncPushTokensJob.swift; path = Models/SyncPushTokensJob.swift; sourceTree = "<group>"; };
|
||||
|
@ -749,6 +768,7 @@
|
|||
4539B5851F79348F007141FF /* PushRegistrationManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PushRegistrationManager.swift; sourceTree = "<group>"; };
|
||||
453CC0361D08E1A60040EBA3 /* sn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sn; path = translations/sn.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
45464DBB1DFA041F001D3FD6 /* DataChannelMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataChannelMessage.swift; sourceTree = "<group>"; };
|
||||
454A965E1FD60EA2008D2A0E /* OWSFlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OWSFlatButton.swift; path = SignalMessaging/Views/OWSFlatButton.swift; sourceTree = SOURCE_ROOT; };
|
||||
454B35071D08EED80026D658 /* mk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mk; path = translations/mk.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugUIProfile.swift; sourceTree = "<group>"; };
|
||||
455A16DB1F1FEA0000F86704 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
|
||||
|
@ -774,14 +794,6 @@
|
|||
4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafetyNumberConfirmationAlert.swift; sourceTree = "<group>"; };
|
||||
4589670F1DC117CC00E9DD21 /* SignalTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SignalTests-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
458967101DC117CC00E9DD21 /* AccountManagerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AccountManagerTest.swift; path = Models/AccountManagerTest.swift; sourceTree = "<group>"; };
|
||||
458D51401FCCD82400B5BC53 /* GSR4.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GSR4.crt; sourceTree = "<group>"; };
|
||||
458D51411FCCD82400B5BC53 /* GTSR3.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GTSR3.crt; sourceTree = "<group>"; };
|
||||
458D51421FCCD82400B5BC53 /* GIAG2.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GIAG2.crt; sourceTree = "<group>"; };
|
||||
458D51431FCCD82500B5BC53 /* GSR2.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GSR2.crt; sourceTree = "<group>"; };
|
||||
458D51441FCCD82500B5BC53 /* GTSR1.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GTSR1.crt; sourceTree = "<group>"; };
|
||||
458D51451FCCD82500B5BC53 /* textsecure.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = textsecure.cer; sourceTree = "<group>"; };
|
||||
458D51461FCCD82500B5BC53 /* GTSR2.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GTSR2.crt; sourceTree = "<group>"; };
|
||||
458D51471FCCD82500B5BC53 /* GTSR4.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = GTSR4.crt; sourceTree = "<group>"; };
|
||||
458DE9D51DEE3FD00071BB03 /* PeerConnectionClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerConnectionClient.swift; sourceTree = "<group>"; };
|
||||
458DE9D71DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSWebRTCDataProtos.pb.h; sourceTree = "<group>"; };
|
||||
458DE9D81DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSWebRTCDataProtos.pb.m; sourceTree = "<group>"; };
|
||||
|
@ -796,7 +808,6 @@
|
|||
45A6DAD51EBBF85500893231 /* ReminderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReminderView.swift; sourceTree = "<group>"; };
|
||||
45AE48501E0732D6004D96C2 /* TurnServerInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TurnServerInfo.swift; sourceTree = "<group>"; };
|
||||
45B201741DAECBFD00C461E0 /* Signal-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Signal-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
45B72DD91FD5E70600151AF6 /* ConversationSearcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationSearcher.swift; sourceTree = "<group>"; };
|
||||
45BB93371E688E14001E3939 /* UIDevice+featureSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIDevice+featureSupport.swift"; sourceTree = "<group>"; };
|
||||
45BD60811DE9547E00A8F436 /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; };
|
||||
45C0DC1A1E68FE9000E04C47 /* UIApplication+OWS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIApplication+OWS.swift"; sourceTree = "<group>"; };
|
||||
|
@ -1064,11 +1075,20 @@
|
|||
34480B471FD0A60200BC14EF /* utils */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
343D3D991E9283F100165CA4 /* BlockListUIUtils.h */,
|
||||
343D3D9A1E9283F100165CA4 /* BlockListUIUtils.m */,
|
||||
451777C71FD61554001225FF /* ConversationSearcher.swift */,
|
||||
34480B4D1FD0A7A300BC14EF /* DebugLogger.h */,
|
||||
34480B4E1FD0A7A300BC14EF /* DebugLogger.m */,
|
||||
346129AC1FD1F34E00532771 /* ImageCache.swift */,
|
||||
45666EC41D99483D008FE134 /* OWSAvatarBuilder.h */,
|
||||
45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */,
|
||||
45855F351D9498A40084F340 /* OWSContactAvatarBuilder.h */,
|
||||
45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */,
|
||||
346129A81FD1F0DF00532771 /* OWSFormat.h */,
|
||||
346129AA1FD1F0EE00532771 /* OWSFormat.m */,
|
||||
45666EC71D994C0D008FE134 /* OWSGroupAvatarBuilder.h */,
|
||||
45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */,
|
||||
34480B4A1FD0A7A200BC14EF /* OWSLogger.h */,
|
||||
34480B4B1FD0A7A300BC14EF /* OWSLogger.m */,
|
||||
34480B481FD0A60200BC14EF /* OWSMath.h */,
|
||||
|
@ -1078,6 +1098,11 @@
|
|||
34480B4F1FD0A7A300BC14EF /* OWSScrubbingLogFormatter.h */,
|
||||
34480B511FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m */,
|
||||
346129331FD1A88700532771 /* OWSSwiftUtils.swift */,
|
||||
45360B8C1F9521F800FA666C /* Searcher.swift */,
|
||||
346129BD1FD2068600532771 /* ThreadUtil.h */,
|
||||
346129BE1FD2068600532771 /* ThreadUtil.m */,
|
||||
B97940251832BD2400BD66CB /* UIUtil.h */,
|
||||
B97940261832BD2400BD66CB /* UIUtil.m */,
|
||||
346129751FD1E0B500532771 /* WeakTimer.swift */,
|
||||
);
|
||||
path = utils;
|
||||
|
@ -1172,6 +1197,8 @@
|
|||
346129A11FD1F09100532771 /* contacts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
||||
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
||||
346129A21FD1F09100532771 /* OWSContactsManager.h */,
|
||||
346129A31FD1F09100532771 /* OWSContactsManager.m */,
|
||||
34612A041FD7238500532771 /* OWSContactsSyncing.h */,
|
||||
|
@ -1194,8 +1221,16 @@
|
|||
346129CE1FD207F200532771 /* views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */,
|
||||
76EB052E18170B33006006FC /* ContactTableViewCell.h */,
|
||||
76EB052F18170B33006006FC /* ContactTableViewCell.m */,
|
||||
340CB2221EAC155C0001CAA1 /* ContactsViewHelper.h */,
|
||||
340CB2231EAC155C0001CAA1 /* ContactsViewHelper.m */,
|
||||
346129D11FD2085A00532771 /* CommonStrings.swift */,
|
||||
346129CF1FD207F200532771 /* OWSAlerts.swift */,
|
||||
454A965E1FD60EA2008D2A0E /* OWSFlatButton.swift */,
|
||||
3400C7971EAFB772008A8584 /* ThreadViewHelper.h */,
|
||||
3400C7981EAFB772008A8584 /* ThreadViewHelper.m */,
|
||||
);
|
||||
path = views;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1226,8 +1261,6 @@
|
|||
34B3F83A1E8DF1700035BE1A /* AttachmentSharing.m */,
|
||||
34D5CCA71EAE3D30005515DB /* AvatarViewHelper.h */,
|
||||
34D5CCA81EAE3D30005515DB /* AvatarViewHelper.m */,
|
||||
343D3D991E9283F100165CA4 /* BlockListUIUtils.h */,
|
||||
343D3D9A1E9283F100165CA4 /* BlockListUIUtils.m */,
|
||||
34B3F89A1E8DF3270035BE1A /* BlockListViewController.h */,
|
||||
34B3F89B1E8DF3270035BE1A /* BlockListViewController.m */,
|
||||
34B3F83B1E8DF1700035BE1A /* CallViewController.swift */,
|
||||
|
@ -1235,8 +1268,6 @@
|
|||
34B3F83D1E8DF1700035BE1A /* CodeVerificationViewController.m */,
|
||||
34B3F83E1E8DF1700035BE1A /* ContactsPicker.swift */,
|
||||
34B3F83F1E8DF1700035BE1A /* ContactsPicker.xib */,
|
||||
340CB2221EAC155C0001CAA1 /* ContactsViewHelper.h */,
|
||||
340CB2231EAC155C0001CAA1 /* ContactsViewHelper.m */,
|
||||
3448BFC01EDF0EA7005B2D69 /* ConversationView */,
|
||||
34B3F8401E8DF1700035BE1A /* CountryCodeViewController.h */,
|
||||
34B3F8411E8DF1700035BE1A /* CountryCodeViewController.m */,
|
||||
|
@ -1257,7 +1288,6 @@
|
|||
34B3F8491E8DF1700035BE1A /* InboxTableViewCell.h */,
|
||||
34B3F84A1E8DF1700035BE1A /* InboxTableViewCell.m */,
|
||||
34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */,
|
||||
34CA1C281F7164F700E51C51 /* MediaMessageView.swift */,
|
||||
34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */,
|
||||
34D9134C1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift */,
|
||||
34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */,
|
||||
|
@ -1272,8 +1302,6 @@
|
|||
34B3F8591E8DF1700035BE1A /* NotificationSettingsViewController.m */,
|
||||
34CCAF391F0C2748004084F4 /* OWSAddToContactViewController.h */,
|
||||
34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */,
|
||||
34533F161EA8D2070006114F /* OWSAudioAttachmentPlayer.h */,
|
||||
34533F171EA8D2070006114F /* OWSAudioAttachmentPlayer.m */,
|
||||
34B3F85B1E8DF1700035BE1A /* OWSConversationSettingsViewController.h */,
|
||||
34B3F85C1E8DF1700035BE1A /* OWSConversationSettingsViewController.m */,
|
||||
34D5CCAB1EAE7136005515DB /* OWSConversationSettingsViewDelegate.h */,
|
||||
|
@ -1287,10 +1315,6 @@
|
|||
34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */,
|
||||
34B3F8621E8DF1700035BE1A /* OWSQRCodeScanningViewController.h */,
|
||||
34B3F8631E8DF1700035BE1A /* OWSQRCodeScanningViewController.m */,
|
||||
34B3F89D1E8DF5490035BE1A /* OWSTableViewController.h */,
|
||||
34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */,
|
||||
34D99C8A1F27B13B00D284D6 /* OWSViewController.h */,
|
||||
34D99C8B1F27B13B00D284D6 /* OWSViewController.m */,
|
||||
34B3F8641E8DF1700035BE1A /* PrivacySettingsTableViewController.h */,
|
||||
34B3F8651E8DF1700035BE1A /* PrivacySettingsTableViewController.m */,
|
||||
34CE88E51F2FB9A10098030F /* ProfileViewController.h */,
|
||||
|
@ -1300,16 +1324,10 @@
|
|||
4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */,
|
||||
34D5CCAF1EAE7E7F005515DB /* SelectRecipientViewController.h */,
|
||||
34D5CCB01EAE7E7F005515DB /* SelectRecipientViewController.m */,
|
||||
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
||||
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
||||
3400C7901EAF89CD008A8584 /* SendExternalFileViewController.h */,
|
||||
3400C7911EAF89CD008A8584 /* SendExternalFileViewController.m */,
|
||||
34B3F86A1E8DF1700035BE1A /* ShowGroupMembersViewController.h */,
|
||||
34B3F86B1E8DF1700035BE1A /* ShowGroupMembersViewController.m */,
|
||||
34B3F86D1E8DF1700035BE1A /* SignalsNavigationController.h */,
|
||||
34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */,
|
||||
3400C7971EAFB772008A8584 /* ThreadViewHelper.h */,
|
||||
3400C7981EAFB772008A8584 /* ThreadViewHelper.m */,
|
||||
340CB2251EAC25820001CAA1 /* UpdateGroupViewController.h */,
|
||||
340CB2261EAC25820001CAA1 /* UpdateGroupViewController.m */,
|
||||
34D1F0BE1F8EC1760066283D /* Utils */,
|
||||
|
@ -1440,6 +1458,36 @@
|
|||
name = Notifications;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
45194F911FD7214600333B2C /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34C42D621F4734ED0072EC04 /* OWSContactOffersInteraction.h */,
|
||||
34C42D631F4734ED0072EC04 /* OWSContactOffersInteraction.m */,
|
||||
34C42D641F4734ED0072EC04 /* TSUnreadIndicatorInteraction.h */,
|
||||
34C42D651F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
45194F9C1FD7368D00333B2C /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45194F9A1FD7327600333B2C /* Media.xcassets */,
|
||||
);
|
||||
path = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
451F8A361FD7115D005CB9DA /* ViewControllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34B3F89D1E8DF5490035BE1A /* OWSTableViewController.h */,
|
||||
34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */,
|
||||
34D99C8A1F27B13B00D284D6 /* OWSViewController.h */,
|
||||
34D99C8B1F27B13B00D284D6 /* OWSViewController.m */,
|
||||
);
|
||||
path = ViewControllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
453518691FC635DD00210559 /* SignalShareExtension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1461,6 +1509,10 @@
|
|||
453518931FC63DBF00210559 /* SignalMessaging */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45194F9C1FD7368D00333B2C /* Resources */,
|
||||
45194F911FD7214600333B2C /* Models */,
|
||||
451F8A361FD7115D005CB9DA /* ViewControllers */,
|
||||
454A96571FD600B4008D2A0E /* attachments */,
|
||||
34480B5C1FD0A98800BC14EF /* categories */,
|
||||
346129A11FD1F09100532771 /* contacts */,
|
||||
3461293F1FD1D74B00532771 /* environment */,
|
||||
|
@ -1487,6 +1539,19 @@
|
|||
name = Signaling;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
454A96571FD600B4008D2A0E /* attachments */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3400C7901EAF89CD008A8584 /* SendExternalFileViewController.h */,
|
||||
3400C7911EAF89CD008A8584 /* SendExternalFileViewController.m */,
|
||||
34533F161EA8D2070006114F /* OWSAudioAttachmentPlayer.h */,
|
||||
34533F171EA8D2070006114F /* OWSAudioAttachmentPlayer.m */,
|
||||
34D913491F62D4A500722898 /* SignalAttachment.swift */,
|
||||
34CA1C281F7164F700E51C51 /* MediaMessageView.swift */,
|
||||
);
|
||||
path = attachments;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
45794E841E0061CF00066731 /* UserInterface */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1504,19 +1569,8 @@
|
|||
children = (
|
||||
45CD81EE1DC030E7004C9430 /* AccountManager.swift */,
|
||||
45DF5DF11DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift */,
|
||||
45666EC41D99483D008FE134 /* OWSAvatarBuilder.h */,
|
||||
45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */,
|
||||
45855F351D9498A40084F340 /* OWSContactAvatarBuilder.h */,
|
||||
45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */,
|
||||
34C42D621F4734ED0072EC04 /* OWSContactOffersInteraction.h */,
|
||||
34C42D631F4734ED0072EC04 /* OWSContactOffersInteraction.m */,
|
||||
458E38351D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.h */,
|
||||
458E38361D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m */,
|
||||
45666EC71D994C0D008FE134 /* OWSGroupAvatarBuilder.h */,
|
||||
45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */,
|
||||
34D913491F62D4A500722898 /* SignalAttachment.swift */,
|
||||
34C42D641F4734ED0072EC04 /* TSUnreadIndicatorInteraction.h */,
|
||||
34C42D651F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1640,8 +1694,8 @@
|
|||
76EB04C818170B33006006FC /* util */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6DA6B051B8A2F9A00CA6F98 /* AppStoreRating.h */,
|
||||
B6DA6B061B8A2F9A00CA6F98 /* AppStoreRating.m */,
|
||||
B6DA6B051B8A2F9A00CA6F98 /* AppStoreRating.h */,
|
||||
34CCAF361F0C0599004084F4 /* AppUpdateNag.h */,
|
||||
34CCAF371F0C0599004084F4 /* AppUpdateNag.m */,
|
||||
B90418E4183E9DD40038554A /* DateUtil.h */,
|
||||
|
@ -1658,17 +1712,11 @@
|
|||
4579431C1E7C8CE9008ED0C0 /* Pastelog.h */,
|
||||
4579431D1E7C8CE9008ED0C0 /* Pastelog.m */,
|
||||
450DF2041E0D74AC003D14BE /* Platform.swift */,
|
||||
45360B8C1F9521F800FA666C /* Searcher.swift */,
|
||||
4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */,
|
||||
346129BD1FD2068600532771 /* ThreadUtil.h */,
|
||||
346129BE1FD2068600532771 /* ThreadUtil.m */,
|
||||
FCFA64B11A24F29E0007FB87 /* UI Categories */,
|
||||
FCC81A961A44558300DFEC7D /* UIDevice+TSHardwareVersion.h */,
|
||||
FCC81A971A44558300DFEC7D /* UIDevice+TSHardwareVersion.m */,
|
||||
B97940251832BD2400BD66CB /* UIUtil.h */,
|
||||
B97940261832BD2400BD66CB /* UIUtil.m */,
|
||||
45F170D51E315310003FC1F2 /* Weak.swift */,
|
||||
45B72DD91FD5E70600151AF6 /* ConversationSearcher.swift */,
|
||||
);
|
||||
path = util;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1679,17 +1727,13 @@
|
|||
45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */,
|
||||
452EA09D1EA7ABE00078744B /* AttachmentPointerView.swift */,
|
||||
34E3E5671EC4B19400495BAC /* AudioProgressView.swift */,
|
||||
45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */,
|
||||
451764291DE939FD00EDB8B9 /* ContactCell.swift */,
|
||||
45A663C41F92EC760027B59E /* GroupTableViewCell.swift */,
|
||||
451764281DE939FD00EDB8B9 /* ContactCell.xib */,
|
||||
76EB052E18170B33006006FC /* ContactTableViewCell.h */,
|
||||
76EB052F18170B33006006FC /* ContactTableViewCell.m */,
|
||||
34F308A01ECB469700BB7697 /* OWSBezierPathView.h */,
|
||||
34F308A11ECB469700BB7697 /* OWSBezierPathView.m */,
|
||||
459311FA1D75C948008DD4F0 /* OWSDeviceTableViewCell.h */,
|
||||
459311FB1D75C948008DD4F0 /* OWSDeviceTableViewCell.m */,
|
||||
34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */,
|
||||
34330AA11E79686200DF2FB9 /* OWSProgressView.h */,
|
||||
34330AA21E79686200DF2FB9 /* OWSProgressView.m */,
|
||||
45A6DAD51EBBF85500893231 /* ReminderView.swift */,
|
||||
|
@ -1836,21 +1880,6 @@
|
|||
name = Translations;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B6C6AE521A305ED1006BAF8F /* Certificates */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
458D51421FCCD82400B5BC53 /* GIAG2.crt */,
|
||||
458D51431FCCD82500B5BC53 /* GSR2.crt */,
|
||||
458D51401FCCD82400B5BC53 /* GSR4.crt */,
|
||||
458D51441FCCD82500B5BC53 /* GTSR1.crt */,
|
||||
458D51461FCCD82500B5BC53 /* GTSR2.crt */,
|
||||
458D51411FCCD82400B5BC53 /* GTSR3.crt */,
|
||||
458D51471FCCD82500B5BC53 /* GTSR4.crt */,
|
||||
458D51451FCCD82500B5BC53 /* textsecure.cer */,
|
||||
);
|
||||
path = Certificates;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D221A07E169C9E5E00537ABF = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1935,7 +1964,6 @@
|
|||
D221A094169C9E5E00537ABF /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6C6AE521A305ED1006BAF8F /* Certificates */,
|
||||
B6B6C3C419193F5B00C0B76B /* Translations */,
|
||||
E18AB40618A05754001A532A /* AudioFiles */,
|
||||
D221A099169C9E5E00537ABF /* main.m */,
|
||||
|
@ -1979,6 +2007,7 @@
|
|||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
451F8A3A1FD711D9005CB9DA /* ContactsViewHelper.h in Headers */,
|
||||
34480B491FD0A60200BC14EF /* OWSMath.h in Headers */,
|
||||
346129E71FD5C0C600532771 /* OWSDatabaseMigrationRunner.h in Headers */,
|
||||
34480B521FD0A7A400BC14EF /* OWSLogger.h in Headers */,
|
||||
|
@ -1990,12 +2019,17 @@
|
|||
346129711FD1D74C00532771 /* SignalKeyingStorage.h in Headers */,
|
||||
34612A011FD5F31400532771 /* OWS104CreateRecipientIdentities.h in Headers */,
|
||||
346129C71FD2072E00532771 /* NSString+OWS.h in Headers */,
|
||||
451F8A3C1FD71392005CB9DA /* UIUtil.h in Headers */,
|
||||
346129D61FD20ADC00532771 /* UIViewController+OWS.h in Headers */,
|
||||
451F8A401FD7145D005CB9DA /* OWSTableViewController.h in Headers */,
|
||||
451F8A321FD70DFA005CB9DA /* SendExternalFileViewController.h in Headers */,
|
||||
3461296F1FD1D74C00532771 /* Release.h in Headers */,
|
||||
34612A061FD7238600532771 /* OWSContactsSyncing.h in Headers */,
|
||||
34480B571FD0A7A400BC14EF /* OWSScrubbingLogFormatter.h in Headers */,
|
||||
346129FC1FD5F31400532771 /* OWS101ExistingUsersBlockOnIdentityChange.h in Headers */,
|
||||
451F8A491FD715CF005CB9DA /* OWSAvatarBuilder.h in Headers */,
|
||||
346129951FD1E30000532771 /* OWSDatabaseMigration.h in Headers */,
|
||||
45194F961FD7226300333B2C /* SelectThreadViewController.h in Headers */,
|
||||
346129B41FD1F7E800532771 /* OWSProfileManager.h in Headers */,
|
||||
346129FA1FD5F31400532771 /* OWS100RemoveTSRecipientsMigration.h in Headers */,
|
||||
346129E21FD5C0BE00532771 /* VersionMigrations.h in Headers */,
|
||||
|
@ -2003,11 +2037,21 @@
|
|||
453518961FC63DBF00210559 /* SignalMessaging.h in Headers */,
|
||||
3461295A1FD1D74C00532771 /* Environment.h in Headers */,
|
||||
34480B631FD0A98800BC14EF /* UIView+OWS.h in Headers */,
|
||||
451F8A4B1FD715E1005CB9DA /* OWSGroupAvatarBuilder.h in Headers */,
|
||||
451F8A371FD71179005CB9DA /* OWSViewController.h in Headers */,
|
||||
454A965D1FD602B1008D2A0E /* OWSAudioAttachmentPlayer.h in Headers */,
|
||||
451F8A3E1FD713D2005CB9DA /* ThreadViewHelper.h in Headers */,
|
||||
346129391FD1B47300532771 /* OWSPreferences.h in Headers */,
|
||||
346129DE1FD5C02A00532771 /* LockInteractionController.h in Headers */,
|
||||
451F8A451FD71570005CB9DA /* BlockListUIUtils.h in Headers */,
|
||||
451F8A4A1FD715D9005CB9DA /* OWSContactAvatarBuilder.h in Headers */,
|
||||
34480B5B1FD0A7E300BC14EF /* SignalMessaging-Prefix.pch in Headers */,
|
||||
45194F921FD7215600333B2C /* OWSContactOffersInteraction.h in Headers */,
|
||||
346129A51FD1F09100532771 /* OWSContactsManager.h in Headers */,
|
||||
451F8A421FD714C7005CB9DA /* ContactTableViewCell.h in Headers */,
|
||||
34480B681FD0AA9400BC14EF /* UIFont+OWS.h in Headers */,
|
||||
45194F941FD7216000333B2C /* TSUnreadIndicatorInteraction.h in Headers */,
|
||||
45194F901FD7200000333B2C /* ThreadUtil.h in Headers */,
|
||||
346129CC1FD2072E00532771 /* NSAttributedString+OWS.h in Headers */,
|
||||
346129FD1FD5F31400532771 /* OWS102MoveLoggingPreferenceToUserDefaults.h in Headers */,
|
||||
);
|
||||
|
@ -2274,6 +2318,7 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
45194F9B1FD7327600333B2C /* Media.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -2283,11 +2328,9 @@
|
|||
files = (
|
||||
AD41D7B61A6F6F0600241130 /* play_button@2x.png in Resources */,
|
||||
AD83FF3F1A73426500B5C81A /* audio_pause_button_blue.png in Resources */,
|
||||
458D514E1FCCD82500B5BC53 /* GTSR2.crt in Resources */,
|
||||
34330A5A1E7875FB00DF2FB9 /* fontawesome-webfont.ttf in Resources */,
|
||||
A5509ECA1A69AB8B00ABA4BC /* Main.storyboard in Resources */,
|
||||
AD83FF421A73426500B5C81A /* audio_play_button.png in Resources */,
|
||||
458D51491FCCD82500B5BC53 /* GTSR3.crt in Resources */,
|
||||
34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */,
|
||||
B633C5C41A1D190B0059AC12 /* mute_on@2x.png in Resources */,
|
||||
B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */,
|
||||
|
@ -2298,17 +2341,14 @@
|
|||
FC5CDF391A3393DD00B47253 /* error_white@2x.png in Resources */,
|
||||
B633C5D21A1D190B0059AC12 /* savephoto@2x.png in Resources */,
|
||||
B10C9B611A7049EC00ECA2BF /* play_icon.png in Resources */,
|
||||
458D514D1FCCD82500B5BC53 /* textsecure.cer in Resources */,
|
||||
AD83FF401A73426500B5C81A /* audio_pause_button_blue@2x.png in Resources */,
|
||||
B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */,
|
||||
4517642A1DE939FD00EDB8B9 /* ContactCell.xib in Resources */,
|
||||
AD83FF431A73426500B5C81A /* audio_play_button@2x.png in Resources */,
|
||||
458D51481FCCD82500B5BC53 /* GSR4.crt in Resources */,
|
||||
45CB2FA81CB7146C00E1B343 /* Launch Screen.storyboard in Resources */,
|
||||
34B3F8781E8DF1700035BE1A /* ContactsPicker.xib in Resources */,
|
||||
B633C5C31A1D190B0059AC12 /* mute_off@2x.png in Resources */,
|
||||
AD83FF411A73426500B5C81A /* audio_play_button_blue@2x.png in Resources */,
|
||||
458D514B1FCCD82500B5BC53 /* GSR2.crt in Resources */,
|
||||
FC5CDF3A1A3393DD00B47253 /* warning_white@2x.png in Resources */,
|
||||
E1370BE018A0686600826894 /* busy.mp3 in Resources */,
|
||||
E1370BE218A0686C00826894 /* failure.mp3 in Resources */,
|
||||
|
@ -2319,13 +2359,10 @@
|
|||
B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */,
|
||||
E1370BE418A0686C00826894 /* outring.mp3 in Resources */,
|
||||
B10C9B601A7049EC00ECA2BF /* pause_icon@2x.png in Resources */,
|
||||
458D514C1FCCD82500B5BC53 /* GTSR1.crt in Resources */,
|
||||
E1370BE518A0686C00826894 /* r.caf in Resources */,
|
||||
FC9120411A39EFB70074545C /* qr@2x.png in Resources */,
|
||||
458D514A1FCCD82500B5BC53 /* GIAG2.crt in Resources */,
|
||||
E1370BE618A0686C00826894 /* sonarping.mp3 in Resources */,
|
||||
B10C9B5F1A7049EC00ECA2BF /* pause_icon.png in Resources */,
|
||||
458D514F1FCCD82500B5BC53 /* GTSR4.crt in Resources */,
|
||||
AD83FF471A73428300B5C81A /* audio_play_button_blue.png in Resources */,
|
||||
34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */,
|
||||
AD83FF451A73426500B5C81A /* audio_pause_button@2x.png in Resources */,
|
||||
|
@ -2651,7 +2688,9 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
45194F951FD7216600333B2C /* TSUnreadIndicatorInteraction.m in Sources */,
|
||||
346129F71FD5F31400532771 /* OWS105AttachmentFilePaths.m in Sources */,
|
||||
45194F931FD7215C00333B2C /* OWSContactOffersInteraction.m in Sources */,
|
||||
346129761FD1E0B500532771 /* WeakTimer.swift in Sources */,
|
||||
346129F81FD5F31400532771 /* OWS100RemoveTSRecipientsMigration.m in Sources */,
|
||||
346129B51FD1F7E800532771 /* OWSProfileManager.m in Sources */,
|
||||
|
@ -2663,31 +2702,51 @@
|
|||
34480B671FD0AA9400BC14EF /* UIFont+OWS.m in Sources */,
|
||||
346129E61FD5C0C600532771 /* OWSDatabaseMigrationRunner.m in Sources */,
|
||||
346129AB1FD1F0EE00532771 /* OWSFormat.m in Sources */,
|
||||
451F8A461FD715BA005CB9DA /* OWSGroupAvatarBuilder.m in Sources */,
|
||||
346129961FD1E30000532771 /* OWSDatabaseMigration.m in Sources */,
|
||||
346129CD1FD2072E00532771 /* UIImage+OWS.m in Sources */,
|
||||
346129FB1FD5F31400532771 /* OWS101ExistingUsersBlockOnIdentityChange.m in Sources */,
|
||||
451F8A3D1FD713CA005CB9DA /* ThreadViewHelper.m in Sources */,
|
||||
346129AD1FD1F34E00532771 /* ImageCache.swift in Sources */,
|
||||
451F8A341FD710C3005CB9DA /* ConversationSearcher.swift in Sources */,
|
||||
346129341FD1A88700532771 /* OWSSwiftUtils.swift in Sources */,
|
||||
346129FE1FD5F31400532771 /* OWS106EnsureProfileComplete.swift in Sources */,
|
||||
346129F91FD5F31400532771 /* OWS104CreateRecipientIdentities.m in Sources */,
|
||||
346129D01FD207F300532771 /* OWSAlerts.swift in Sources */,
|
||||
454A965F1FD60EA3008D2A0E /* OWSFlatButton.swift in Sources */,
|
||||
346129B61FD1F7E800532771 /* ProfileFetcherJob.swift in Sources */,
|
||||
346129F51FD5F31400532771 /* OWS102MoveLoggingPreferenceToUserDefaults.m in Sources */,
|
||||
45194F8F1FD71FF500333B2C /* ThreadUtil.m in Sources */,
|
||||
451F8A3B1FD71297005CB9DA /* UIUtil.m in Sources */,
|
||||
451F8A331FD71083005CB9DA /* SelectThreadViewController.m in Sources */,
|
||||
454A965A1FD6017E008D2A0E /* SignalAttachment.swift in Sources */,
|
||||
454A965B1FD601BF008D2A0E /* MediaMessageView.swift in Sources */,
|
||||
3461295B1FD1D74C00532771 /* Environment.m in Sources */,
|
||||
346129D51FD20ADC00532771 /* UIViewController+OWS.m in Sources */,
|
||||
451F8A431FD714FE005CB9DA /* AvatarImageView.swift in Sources */,
|
||||
346129C91FD2072E00532771 /* NSString+OWS.m in Sources */,
|
||||
346129CB1FD2072E00532771 /* Promise+retainUntilComplete.swift in Sources */,
|
||||
346129FF1FD5F31400532771 /* OWS103EnableVideoCalling.m in Sources */,
|
||||
346129E31FD5C0BE00532771 /* VersionMigrations.m in Sources */,
|
||||
451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */,
|
||||
451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */,
|
||||
451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */,
|
||||
346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */,
|
||||
346129D21FD2085A00532771 /* CommonStrings.swift in Sources */,
|
||||
34612A071FD7238600532771 /* OWSContactsSyncing.m in Sources */,
|
||||
346129DF1FD5C02A00532771 /* LockInteractionController.m in Sources */,
|
||||
451F8A471FD715BA005CB9DA /* OWSAvatarBuilder.m in Sources */,
|
||||
454A96601FD61165008D2A0E /* OWSAudioAttachmentPlayer.m in Sources */,
|
||||
34480B591FD0A7A400BC14EF /* OWSScrubbingLogFormatter.m in Sources */,
|
||||
451F8A441FD7156B005CB9DA /* BlockListUIUtils.m in Sources */,
|
||||
451F8A381FD7117E005CB9DA /* OWSViewController.m in Sources */,
|
||||
346129721FD1D74C00532771 /* SignalKeyingStorage.m in Sources */,
|
||||
34480B561FD0A7A400BC14EF /* DebugLogger.m in Sources */,
|
||||
3461293C1FD1D46A00532771 /* OWSMath.m in Sources */,
|
||||
451F8A391FD711D6005CB9DA /* ContactsViewHelper.m in Sources */,
|
||||
346129AF1FD1F5D900532771 /* SystemContactsFetcher.swift in Sources */,
|
||||
451F8A311FD70DE9005CB9DA /* SendExternalFileViewController.m in Sources */,
|
||||
451F8A411FD714B8005CB9DA /* ContactTableViewCell.m in Sources */,
|
||||
346129C81FD2072E00532771 /* NSAttributedString+OWS.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -2705,7 +2764,6 @@
|
|||
45C9DEB81DF4E35A0065CA84 /* WebRTCCallMessageHandler.swift in Sources */,
|
||||
34D1F0501F7D45A60066283D /* GifPickerCell.swift in Sources */,
|
||||
34D99C931F2937CC00D284D6 /* OWSAnalytics.swift in Sources */,
|
||||
34D9134B1F62D4A500722898 /* SignalAttachment.swift in Sources */,
|
||||
34B3F88E1E8DF1700035BE1A /* PrivacySettingsTableViewController.m in Sources */,
|
||||
341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */,
|
||||
34E3EF0D1EFC235B007F6822 /* DebugUIDiskUsage.m in Sources */,
|
||||
|
@ -2714,11 +2772,8 @@
|
|||
451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */,
|
||||
450DF2091E0DD2C6003D14BE /* UserNotificationsAdaptee.swift in Sources */,
|
||||
34D1F0821F8678AA0066283D /* ConversationHeaderView.m in Sources */,
|
||||
340CB2241EAC155C0001CAA1 /* ContactsViewHelper.m in Sources */,
|
||||
45B72DDA1FD5E70600151AF6 /* ConversationSearcher.swift in Sources */,
|
||||
34D1F0AB1F867BFC0066283D /* OWSContactOffersCell.m in Sources */,
|
||||
343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */,
|
||||
B97940271832BD2400BD66CB /* UIUtil.m in Sources */,
|
||||
34B3F8791E8DF1700035BE1A /* CountryCodeViewController.m in Sources */,
|
||||
34D1F0A91F867BFC0066283D /* ConversationViewCell.m in Sources */,
|
||||
4505C2BF1E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */,
|
||||
|
@ -2730,17 +2785,13 @@
|
|||
450D19131F85236600970622 /* RemoteVideoView.m in Sources */,
|
||||
B6B9ECFC198B31BA00C620D3 /* PushManager.m in Sources */,
|
||||
45DF5DF21DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */,
|
||||
34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */,
|
||||
458DE9D91DEE7B360071BB03 /* OWSWebRTCDataProtos.pb.m in Sources */,
|
||||
76EB063C18170B33006006FC /* NumberUtil.m in Sources */,
|
||||
34CA1C291F7164F700E51C51 /* MediaMessageView.swift in Sources */,
|
||||
3400C7961EAF99F4008A8584 /* SelectThreadViewController.m in Sources */,
|
||||
34D5CCB11EAE7E7F005515DB /* SelectRecipientViewController.m in Sources */,
|
||||
34B3F88F1E8DF1710035BE1A /* RegistrationViewController.m in Sources */,
|
||||
3430FE181F7751D4000EC51B /* GiphyAPI.swift in Sources */,
|
||||
34B3F8901E8DF1710035BE1A /* AppSettingsViewController.m in Sources */,
|
||||
34FD93701E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m in Sources */,
|
||||
343D3D9B1E9283F100165CA4 /* BlockListUIUtils.m in Sources */,
|
||||
34B3F8931E8DF1710035BE1A /* SignalsNavigationController.m in Sources */,
|
||||
34D1F0AC1F867BFC0066283D /* OWSExpirationTimerView.m in Sources */,
|
||||
76EB063A18170B33006006FC /* FunctionalUtil.m in Sources */,
|
||||
|
@ -2756,9 +2807,7 @@
|
|||
452037D11EE84975004E4CDF /* DebugUISessionState.m in Sources */,
|
||||
D221A09A169C9E5E00537ABF /* main.m in Sources */,
|
||||
34B3F87B1E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift in Sources */,
|
||||
34533F181EA8D2070006114F /* OWSAudioAttachmentPlayer.m in Sources */,
|
||||
452EA09E1EA7ABE00078744B /* AttachmentPointerView.swift in Sources */,
|
||||
45666EC91D994C0D008FE134 /* OWSGroupAvatarBuilder.m in Sources */,
|
||||
3471B1DA1EB7C63600F6AEC8 /* NewNonContactConversationViewController.m in Sources */,
|
||||
34B3F87C1E8DF1700035BE1A /* FingerprintViewController.m in Sources */,
|
||||
4523149C1F7D7F81003A428C /* OWSMessagesBubbleImageFactory.swift in Sources */,
|
||||
|
@ -2776,13 +2825,10 @@
|
|||
452ECA4D1E087E7200E2F016 /* MessageFetcherJob.swift in Sources */,
|
||||
4556FA681F54AA9500AF40DD /* DebugUIProfile.swift in Sources */,
|
||||
34DFCB851E8E04B500053165 /* AddToBlockListViewController.m in Sources */,
|
||||
45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */,
|
||||
45A6DAD61EBBF85500893231 /* ReminderView.swift in Sources */,
|
||||
45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */,
|
||||
45E615161E8C590B0018AD52 /* DisplayableText.swift in Sources */,
|
||||
34B3F88A1E8DF1700035BE1A /* OWSLinkDeviceViewController.m in Sources */,
|
||||
34D1F0881F8678AA0066283D /* ConversationViewLayout.m in Sources */,
|
||||
76EB068618170B34006006FC /* ContactTableViewCell.m in Sources */,
|
||||
3497DBEF1ECE2E4700DB2605 /* DomainFrontingCountryViewController.m in Sources */,
|
||||
452314A01F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift in Sources */,
|
||||
34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */,
|
||||
|
@ -2807,7 +2853,6 @@
|
|||
34B3F8771E8DF1700035BE1A /* ContactsPicker.swift in Sources */,
|
||||
45C0DC1B1E68FE9000E04C47 /* UIApplication+OWS.swift in Sources */,
|
||||
45638BDF1F3DDB2200128435 /* MessageSender+Promise.swift in Sources */,
|
||||
45F3AEB61DFDE7900080CE33 /* AvatarImageView.swift in Sources */,
|
||||
45FBC5C81DF8575700E9B410 /* CallKitCallManager.swift in Sources */,
|
||||
34B3F8911E8DF1710035BE1A /* ShowGroupMembersViewController.m in Sources */,
|
||||
4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */,
|
||||
|
@ -2816,7 +2861,6 @@
|
|||
452C468F1E427E200087B011 /* OutboundCallInitiator.swift in Sources */,
|
||||
45F170BB1E2FC5D3003FC1F2 /* CallAudioService.swift in Sources */,
|
||||
34B3F8711E8DF1700035BE1A /* AboutTableViewController.m in Sources */,
|
||||
45360B8D1F9521F800FA666C /* Searcher.swift in Sources */,
|
||||
34B3F88D1E8DF1700035BE1A /* OWSQRCodeScanningViewController.m in Sources */,
|
||||
34BECE2E1F7ABCE000D7438D /* GifPickerViewController.swift in Sources */,
|
||||
34CCAF3B1F0C2748004084F4 /* OWSAddToContactViewController.m in Sources */,
|
||||
|
@ -2825,19 +2869,14 @@
|
|||
45BB93381E688E14001E3939 /* UIDevice+featureSupport.swift in Sources */,
|
||||
458DE9D61DEE3FD00071BB03 /* PeerConnectionClient.swift in Sources */,
|
||||
451DE9FD1DC1A28200810E42 /* SyncPushTokensJob.swift in Sources */,
|
||||
34D99C8C1F27B13B00D284D6 /* OWSViewController.m in Sources */,
|
||||
34D1F0841F8678AA0066283D /* ConversationInputToolbar.m in Sources */,
|
||||
340CB2271EAC25820001CAA1 /* UpdateGroupViewController.m in Sources */,
|
||||
34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */,
|
||||
3400C7931EAF89CD008A8584 /* SendExternalFileViewController.m in Sources */,
|
||||
FCC81A981A44558300DFEC7D /* UIDevice+TSHardwareVersion.m in Sources */,
|
||||
3400C7991EAFB772008A8584 /* ThreadViewHelper.m in Sources */,
|
||||
76EB054018170B33006006FC /* AppDelegate.m in Sources */,
|
||||
34D1F0831F8678AA0066283D /* ConversationInputTextView.m in Sources */,
|
||||
34D1F0B11F867BFC0066283D /* OWSUnreadIndicatorCell.m in Sources */,
|
||||
34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */,
|
||||
34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */,
|
||||
346129BF1FD2068600532771 /* ThreadUtil.m in Sources */,
|
||||
34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */,
|
||||
B609597C1C2C0FC6004E8797 /* iRate.m in Sources */,
|
||||
4574A5D61DD6704700C6B692 /* CallService.swift in Sources */,
|
||||
|
@ -2846,11 +2885,9 @@
|
|||
45F170D61E315310003FC1F2 /* Weak.swift in Sources */,
|
||||
4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */,
|
||||
34B3F8891E8DF1700035BE1A /* OWSConversationSettingsViewController.m in Sources */,
|
||||
34C42D671F4734ED0072EC04 /* TSUnreadIndicatorInteraction.m in Sources */,
|
||||
34B3F87E1E8DF1700035BE1A /* InboxTableViewCell.m in Sources */,
|
||||
34B3F88B1E8DF1700035BE1A /* OWSLinkedDevicesTableViewController.m in Sources */,
|
||||
4579431E1E7C8CE9008ED0C0 /* Pastelog.m in Sources */,
|
||||
34C42D661F4734ED0072EC04 /* OWSContactOffersInteraction.m in Sources */,
|
||||
34B3F8941E8DF1710035BE1A /* HomeViewController.m in Sources */,
|
||||
34E8BF381EE9E2FD00F5F4CA /* FingerprintViewScanController.m in Sources */,
|
||||
346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */,
|
||||
|
@ -2874,6 +2911,14 @@
|
|||
458E383A1D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m in Sources */,
|
||||
452D1EE81DCA90D100A57EC4 /* MesssagesBubblesSizeCalculatorTest.swift in Sources */,
|
||||
45360B901F9527DA00FA666C /* SearcherTest.swift in Sources */,
|
||||
B660F7561C29988E00687D6E /* PushManager.m in Sources */,
|
||||
45360B911F952AA900FA666C /* MarqueeLabel.swift in Sources */,
|
||||
45FBC5D21DF8592E00E9B410 /* SignalCall.swift in Sources */,
|
||||
451A13B21E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */,
|
||||
45DF5DF31DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */,
|
||||
456AC8341E3A775E00A3C7FC /* Weak.swift in Sources */,
|
||||
454EBAB41F2BE14C00ACE0BB /* OWSAnalytics.swift in Sources */,
|
||||
B660F7721C29988E00687D6E /* AppStoreRating.m in Sources */,
|
||||
954AEE6A1DF33E01002E5410 /* ContactsPickerTest.swift in Sources */,
|
||||
45666F581D9B2880008FE134 /* OWSScrubbingLogFormatterTest.m in Sources */,
|
||||
B660F6E01C29868000687D6E /* UtilTest.m in Sources */,
|
||||
|
|
|
@ -372,7 +372,7 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect
|
|||
owsFail("\(strongSelf.TAG) couldn't load asset.")
|
||||
return
|
||||
}
|
||||
let attachment = SignalAttachment(dataSource: dataSource, dataUTI: asset.rendition.utiType)
|
||||
let attachment = SignalAttachment.imageAttachment(dataSource: dataSource, dataUTI: asset.rendition.utiType)
|
||||
|
||||
strongSelf.delegate?.gifPickerDidSelect(attachment: attachment)
|
||||
|
||||
|
|
|
@ -434,7 +434,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate {
|
|||
|
||||
let contentType = attachment.contentType
|
||||
if let dataUTI = MIMETypeUtil.utiType(forMIMEType: contentType) {
|
||||
let attachment = SignalAttachment(dataSource: dataSource, dataUTI: dataUTI)
|
||||
let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: dataUTI)
|
||||
let mediaMessageView = MediaMessageView(attachment: attachment, mode: .small)
|
||||
mediaMessageView.backgroundColor = UIColor.white
|
||||
self.mediaMessageView = mediaMessageView
|
||||
|
|
|
@ -28,6 +28,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[[UIApplication sharedApplication] userInterfaceLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft;
|
||||
}
|
||||
|
||||
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle
|
||||
{
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:statusBarStyle];
|
||||
}
|
||||
|
||||
- (UIApplicationState)mainApplicationState
|
||||
{
|
||||
return [UIApplication sharedApplication].applicationState;
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
21
SignalMessaging/Resources/Media.xcassets/file-thin-black-filled-large.imageset/Contents.json
vendored
Normal file
21
SignalMessaging/Resources/Media.xcassets/file-thin-black-filled-large.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "file-thin-black-w-shadow-large.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
|
@ -14,10 +14,17 @@ FOUNDATION_EXPORT const unsigned char SignalMessagingVersionString[];
|
|||
#import <SignalMessaging/DebugLogger.h>
|
||||
#import <SignalMessaging/Environment.h>
|
||||
#import <SignalMessaging/NSString+OWS.h>
|
||||
#import <SignalMessaging/OWSAudioAttachmentPlayer.h>
|
||||
#import <SignalMessaging/OWSContactsManager.h>
|
||||
#import <SignalMessaging/OWSDatabaseMigration.h>
|
||||
#import <SignalMessaging/OWSFormat.h>
|
||||
#import <SignalMessaging/OWSLogger.h>
|
||||
#import <SignalMessaging/OWSMath.h>
|
||||
#import <SignalMessaging/OWSProfileManager.h>
|
||||
#import <SignalMessaging/Release.h>
|
||||
#import <SignalMessaging/SendExternalFileViewController.h>
|
||||
#import <SignalMessaging/UIColor+OWS.h>
|
||||
#import <SignalMessaging/UIFont+OWS.h>
|
||||
#import <SignalMessaging/UIImage+OWS.h>
|
||||
#import <SignalMessaging/UIView+OWS.h>
|
||||
#import <SignalMessaging/UIViewController+OWS.h>
|
||||
|
|
|
@ -31,7 +31,7 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
|
|||
- (void)addSection:(OWSTableSection *)section
|
||||
{
|
||||
OWSAssert(section);
|
||||
|
||||
|
||||
[_sections addObject:section];
|
||||
}
|
||||
|
||||
|
@ -100,7 +100,7 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
|
|||
+ (OWSTableItem *)itemWithTitle:(NSString *)title actionBlock:(nullable OWSTableActionBlock)actionBlock
|
||||
{
|
||||
OWSAssert(title.length > 0);
|
||||
|
||||
|
||||
OWSTableItem *item = [OWSTableItem new];
|
||||
item.itemType = OWSTableItemTypeAction;
|
||||
item.actionBlock = actionBlock;
|
||||
|
@ -330,7 +330,7 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
|
|||
|
||||
#pragma mark -
|
||||
|
||||
NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
||||
NSString *const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
||||
|
||||
@implementation OWSTableViewController
|
||||
|
||||
|
@ -379,7 +379,7 @@ NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
|||
- (void)loadView
|
||||
{
|
||||
[super loadView];
|
||||
|
||||
|
||||
OWSAssert(self.contents);
|
||||
|
||||
if (self.contents.title.length > 0) {
|
||||
|
@ -422,21 +422,21 @@ NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
|||
- (OWSTableSection *)sectionForIndex:(NSInteger)sectionIndex
|
||||
{
|
||||
OWSAssert(self.contents);
|
||||
OWSAssert(sectionIndex >= 0 && sectionIndex < (NSInteger) self.contents.sections.count);
|
||||
|
||||
OWSTableSection *section = self.contents.sections[(NSUInteger) sectionIndex];
|
||||
OWSAssert(sectionIndex >= 0 && sectionIndex < (NSInteger)self.contents.sections.count);
|
||||
|
||||
OWSTableSection *section = self.contents.sections[(NSUInteger)sectionIndex];
|
||||
return section;
|
||||
}
|
||||
|
||||
- (OWSTableItem *)itemForIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
OWSAssert(self.contents);
|
||||
OWSAssert(indexPath.section >= 0 && indexPath.section < (NSInteger) self.contents.sections.count);
|
||||
|
||||
OWSTableSection *section = self.contents.sections[(NSUInteger) indexPath.section];
|
||||
OWSAssert(indexPath.item >= 0 && indexPath.item < (NSInteger) section.items.count);
|
||||
OWSTableItem *item = section.items[(NSUInteger) indexPath.item];
|
||||
|
||||
OWSAssert(indexPath.section >= 0 && indexPath.section < (NSInteger)self.contents.sections.count);
|
||||
|
||||
OWSTableSection *section = self.contents.sections[(NSUInteger)indexPath.section];
|
||||
OWSAssert(indexPath.item >= 0 && indexPath.item < (NSInteger)section.items.count);
|
||||
OWSTableItem *item = section.items[(NSUInteger)indexPath.item];
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
@ -455,14 +455,14 @@ NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
|||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
||||
{
|
||||
OWSAssert(self.contents);
|
||||
return (NSInteger) self.contents.sections.count;
|
||||
return (NSInteger)self.contents.sections.count;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex
|
||||
{
|
||||
OWSTableSection *section = [self sectionForIndex:sectionIndex];
|
||||
OWSAssert(section.items);
|
||||
return (NSInteger) section.items.count;
|
||||
return (NSInteger)section.items.count;
|
||||
}
|
||||
|
||||
- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionIndex
|
||||
|
@ -488,9 +488,9 @@ NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
|||
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kOWSTableCellIdentifier];
|
||||
OWSAssert(cell);
|
||||
|
||||
|
||||
cell.textLabel.text = item.title;
|
||||
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
|
@ -598,15 +598,14 @@ NSString * const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
|
|||
- (void)presentFromViewController:(UIViewController *)fromViewController
|
||||
{
|
||||
OWSAssert(fromViewController);
|
||||
|
||||
|
||||
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self];
|
||||
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop
|
||||
target:self
|
||||
action:@selector(donePressed:)];
|
||||
|
||||
[fromViewController presentViewController:navigationController
|
||||
animated:YES
|
||||
completion:nil];
|
||||
self.navigationItem.leftBarButtonItem =
|
||||
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop
|
||||
target:self
|
||||
action:@selector(donePressed:)];
|
||||
|
||||
[fromViewController presentViewController:navigationController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)donePressed:(id)sender
|
|
@ -4,9 +4,10 @@
|
|||
|
||||
import UIKit
|
||||
|
||||
class AvatarImageView: UIImageView {
|
||||
@objc
|
||||
public class AvatarImageView: UIImageView {
|
||||
|
||||
init() {
|
||||
public init() {
|
||||
super.init(frame: CGRect.zero)
|
||||
self.configureView()
|
||||
}
|
||||
|
@ -16,7 +17,7 @@ class AvatarImageView: UIImageView {
|
|||
self.configureView()
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
required public init?(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder)
|
||||
self.configureView()
|
||||
}
|
||||
|
@ -34,7 +35,7 @@ class AvatarImageView: UIImageView {
|
|||
self.contentMode = .scaleToFill
|
||||
}
|
||||
|
||||
override func layoutSubviews() {
|
||||
override public func layoutSubviews() {
|
||||
self.layer.borderColor = UIColor.black.cgColor.copy(alpha: 0.15)
|
||||
self.layer.cornerRadius = self.frame.size.width / 2
|
||||
}
|
|
@ -2,7 +2,6 @@
|
|||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "OWSContactsManager.h"
|
||||
|
||||
/**
|
|
@ -6,11 +6,12 @@
|
|||
#import "Environment.h"
|
||||
#import "OWSContactAvatarBuilder.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import "UIUtil.h"
|
||||
#import "UIView+OWS.h"
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/SignalAccount.h>
|
||||
#import <SignalServiceKit/TSContactThread.h>
|
||||
#import <SignalServiceKit/TSGroupThread.h>
|
||||
#import <SignalServiceKit/TSThread.h>
|
||||
|
||||
|
@ -117,12 +118,10 @@ const CGFloat kContactTableViewCellAvatarTextMargin = 12;
|
|||
|
||||
- (void)configureWithSignalAccount:(SignalAccount *)signalAccount contactsManager:(OWSContactsManager *)contactsManager
|
||||
{
|
||||
[self configureWithRecipientId:signalAccount.recipientId
|
||||
contactsManager:contactsManager];
|
||||
[self configureWithRecipientId:signalAccount.recipientId contactsManager:contactsManager];
|
||||
}
|
||||
|
||||
- (void)configureWithRecipientId:(NSString *)recipientId
|
||||
contactsManager:(OWSContactsManager *)contactsManager
|
||||
- (void)configureWithRecipientId:(NSString *)recipientId contactsManager:(OWSContactsManager *)contactsManager
|
||||
{
|
||||
self.recipientId = recipientId;
|
||||
self.contactsManager = contactsManager;
|
||||
|
@ -162,11 +161,11 @@ const CGFloat kContactTableViewCellAvatarTextMargin = 12;
|
|||
threadName = [MessageStrings newGroupDefaultTitle];
|
||||
}
|
||||
|
||||
NSAttributedString *attributedText = [[NSAttributedString alloc]
|
||||
initWithString:threadName
|
||||
attributes:@{
|
||||
NSForegroundColorAttributeName : [UIColor blackColor],
|
||||
}];
|
||||
NSAttributedString *attributedText =
|
||||
[[NSAttributedString alloc] initWithString:threadName
|
||||
attributes:@{
|
||||
NSForegroundColorAttributeName : [UIColor blackColor],
|
||||
}];
|
||||
self.nameLabel.attributedText = attributedText;
|
||||
|
||||
if ([thread isKindOfClass:[TSContactThread class]]) {
|
|
@ -5,8 +5,10 @@
|
|||
#import "ContactsViewHelper.h"
|
||||
#import "Environment.h"
|
||||
#import "NSString+OWS.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "UIUtil.h"
|
||||
#import <SignalMessaging/OWSProfileManager.h>
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/AppContext.h>
|
||||
#import <SignalServiceKit/Contact.h>
|
||||
#import <SignalServiceKit/OWSBlockingManager.h>
|
||||
#import <SignalServiceKit/PhoneNumber.h>
|
||||
|
@ -284,7 +286,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@"Button text which opens the settings app")
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction *_Nonnull action) {
|
||||
[[UIApplication sharedApplication] openSystemSettings];
|
||||
[CurrentAppContext() openSystemSettings];
|
||||
}]];
|
||||
|
||||
[viewController presentViewController:alertController animated:YES completion:nil];
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
import Foundation
|
||||
import SignalServiceKit
|
||||
import SignalMessaging
|
||||
|
||||
@objc class OWSFlatButton: UIView {
|
||||
@objc
|
||||
public class OWSFlatButton: UIView {
|
||||
let TAG = "[OWSFlatButton]"
|
||||
|
||||
private let button: UIButton
|
||||
|
@ -16,13 +16,14 @@ import SignalMessaging
|
|||
private var upColor: UIColor?
|
||||
private var downColor: UIColor?
|
||||
|
||||
override var backgroundColor: UIColor? {
|
||||
override public var backgroundColor: UIColor? {
|
||||
willSet {
|
||||
owsFail("Use setBackgroundColors(upColor:) instead.")
|
||||
}
|
||||
}
|
||||
|
||||
init() {
|
||||
@objc
|
||||
public init() {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
button = UIButton(type:.custom)
|
||||
|
@ -33,7 +34,7 @@ import SignalMessaging
|
|||
}
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
required public init?(coder aDecoder: NSCoder) {
|
||||
fatalError("\(#function) is unimplemented.")
|
||||
}
|
||||
|
||||
|
@ -43,6 +44,7 @@ import SignalMessaging
|
|||
button.autoPinToSuperviewEdges()
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func button(title: String,
|
||||
font: UIFont,
|
||||
titleColor: UIColor,
|
||||
|
@ -62,6 +64,7 @@ import SignalMessaging
|
|||
return button
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func button(title: String,
|
||||
titleColor: UIColor,
|
||||
backgroundColor: UIColor,
|
||||
|
@ -79,6 +82,7 @@ import SignalMessaging
|
|||
selector:selector)
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func button(title: String,
|
||||
font: UIFont,
|
||||
titleColor: UIColor,
|
||||
|
@ -95,6 +99,7 @@ import SignalMessaging
|
|||
return button
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func fontForHeight(_ height: CGFloat) -> UIFont {
|
||||
// Cap the "button height" at 40pt or button text can look
|
||||
// excessively large.
|
||||
|
@ -104,6 +109,7 @@ import SignalMessaging
|
|||
|
||||
// MARK: Methods
|
||||
|
||||
@objc
|
||||
public func setTitle(title: String, font: UIFont,
|
||||
titleColor: UIColor ) {
|
||||
button.setTitle(title, for: .normal)
|
||||
|
@ -111,22 +117,26 @@ import SignalMessaging
|
|||
button.titleLabel!.font = font
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setBackgroundColors(upColor: UIColor,
|
||||
downColor: UIColor ) {
|
||||
button.setBackgroundImage(UIImage(color:upColor), for: .normal)
|
||||
button.setBackgroundImage(UIImage(color:downColor), for: .highlighted)
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setBackgroundColors(upColor: UIColor ) {
|
||||
setBackgroundColors(upColor: upColor,
|
||||
downColor: upColor.withAlphaComponent(0.7) )
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setSize(width: CGFloat, height: CGFloat) {
|
||||
button.autoSetDimension(.width, toSize:width)
|
||||
button.autoSetDimension(.height, toSize:height)
|
||||
}
|
||||
|
||||
@objc
|
||||
public func useDefaultCornerRadius() {
|
||||
// To my eye, this radius tends to look right regardless of button size
|
||||
// (within reason) or device size.
|
||||
|
@ -134,15 +144,18 @@ import SignalMessaging
|
|||
button.clipsToBounds = true
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setEnabled(_ isEnabled: Bool) {
|
||||
button.isEnabled = isEnabled
|
||||
}
|
||||
|
||||
@objc
|
||||
public func addTarget(target:Any,
|
||||
selector: Selector) {
|
||||
button.addTarget(target, action:selector, for:.touchUpInside)
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setPressedBlock(_ pressedBlock: @escaping () -> Void) {
|
||||
guard self.pressedBlock == nil else {
|
||||
owsFail("Button already has pressed block.")
|
||||
|
@ -151,6 +164,7 @@ import SignalMessaging
|
|||
self.pressedBlock = pressedBlock
|
||||
}
|
||||
|
||||
@objc
|
||||
internal func buttonPressed() {
|
||||
pressedBlock?()
|
||||
}
|
|
@ -8,26 +8,35 @@ import YYImage
|
|||
import SignalServiceKit
|
||||
|
||||
@objc
|
||||
enum MediaMessageViewMode: UInt {
|
||||
public enum MediaMessageViewMode: UInt {
|
||||
case large
|
||||
case small
|
||||
}
|
||||
|
||||
class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
||||
@objc
|
||||
public class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
||||
|
||||
let TAG = "[MediaMessageView]"
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
let mode: MediaMessageViewMode
|
||||
@objc
|
||||
public let mode: MediaMessageViewMode
|
||||
|
||||
let attachment: SignalAttachment
|
||||
@objc
|
||||
public let attachment: SignalAttachment
|
||||
|
||||
var videoPlayer: MPMoviePlayerController?
|
||||
@objc
|
||||
public var videoPlayer: MPMoviePlayerController?
|
||||
|
||||
var audioPlayer: OWSAudioAttachmentPlayer?
|
||||
var audioPlayButton: UIButton?
|
||||
var playbackState = AudioPlaybackState.stopped {
|
||||
@objc
|
||||
public var audioPlayer: OWSAudioAttachmentPlayer?
|
||||
|
||||
@objc
|
||||
public var audioPlayButton: UIButton?
|
||||
|
||||
@objc
|
||||
public var playbackState = AudioPlaybackState.stopped {
|
||||
didSet {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
|
@ -35,19 +44,24 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
var audioProgressSeconds: CGFloat = 0
|
||||
var audioDurationSeconds: CGFloat = 0
|
||||
@objc
|
||||
public var audioProgressSeconds: CGFloat = 0
|
||||
|
||||
var contentView: UIView?
|
||||
@objc
|
||||
public var audioDurationSeconds: CGFloat = 0
|
||||
|
||||
@objc
|
||||
public var contentView: UIView?
|
||||
|
||||
// MARK: Initializers
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
required public init?(coder aDecoder: NSCoder) {
|
||||
fatalError("\(#function) is unimplemented.")
|
||||
}
|
||||
|
||||
required init(attachment: SignalAttachment, mode: MediaMessageViewMode) {
|
||||
@objc
|
||||
public required init(attachment: SignalAttachment, mode: MediaMessageViewMode) {
|
||||
assert(!attachment.hasError)
|
||||
self.mode = mode
|
||||
self.attachment = attachment
|
||||
|
@ -62,12 +76,14 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
|
||||
// MARK: View Lifecycle
|
||||
|
||||
func viewWillAppear(_ animated: Bool) {
|
||||
ViewControllerUtils.setAudioIgnoresHardwareMuteSwitch(true)
|
||||
@objc
|
||||
public func viewWillAppear(_ animated: Bool) {
|
||||
OWSAudioAttachmentPlayer.setAudioIgnoresHardwareMuteSwitch(true)
|
||||
}
|
||||
|
||||
func viewWillDisappear(_ animated: Bool) {
|
||||
ViewControllerUtils.setAudioIgnoresHardwareMuteSwitch(false)
|
||||
@objc
|
||||
public func viewWillDisappear(_ animated: Bool) {
|
||||
OWSAudioAttachmentPlayer.setAudioIgnoresHardwareMuteSwitch(false)
|
||||
}
|
||||
|
||||
// MARK: - Create Views
|
||||
|
@ -275,7 +291,8 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
|
||||
private func createHeroImageView(imageName: String) -> UIView {
|
||||
let imageSize = createHeroViewSize()
|
||||
let image = UIImage(named: imageName)
|
||||
|
||||
let image = UIImage(named: imageName, inBundleForClass: type(of:self))
|
||||
assert(image != nil)
|
||||
let imageView = UIImageView(image: image)
|
||||
imageView.layer.minificationFilter = kCAFilterTrilinear
|
||||
|
@ -353,6 +370,7 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
|
||||
// MARK: - Event Handlers
|
||||
|
||||
@objc
|
||||
func audioPlayButtonPressed(sender: UIButton) {
|
||||
audioPlayer?.togglePlayState()
|
||||
}
|
||||
|
@ -396,6 +414,7 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
|
||||
// MARK: - Full Screen Image
|
||||
|
||||
@objc
|
||||
func imageTapped(sender: UIGestureRecognizer) {
|
||||
guard sender.state == .recognized else {
|
||||
return
|
||||
|
@ -406,14 +425,17 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
guard let fromViewController = CurrentAppContext().frontmostViewController() else {
|
||||
return
|
||||
}
|
||||
let window = UIApplication.shared.keyWindow
|
||||
let convertedRect = fromView.convert(fromView.bounds, to:window)
|
||||
let viewController = FullImageViewController(attachment:attachment, from:convertedRect)
|
||||
viewController.present(from:fromViewController)
|
||||
|
||||
// let window = UIApplication.shared.keyWindow
|
||||
// let convertedRect = fromView.convert(fromView.bounds, to:window)
|
||||
// let viewController = FullImageViewController(attachment:attachment, from:convertedRect)
|
||||
// viewController.present(from:fromViewController)
|
||||
Logger.error("\(TAG) FIXME. image tapped.")
|
||||
}
|
||||
|
||||
// MARK: - Video Playback
|
||||
|
||||
@objc
|
||||
func videoTapped(sender: UIGestureRecognizer) {
|
||||
guard sender.state == .recognized else {
|
||||
return
|
||||
|
@ -440,7 +462,7 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
videoPlayer.view.frame = self.bounds
|
||||
self.videoPlayer = videoPlayer
|
||||
videoPlayer.view.autoPinToSuperviewEdges()
|
||||
ViewControllerUtils.setAudioIgnoresHardwareMuteSwitch(true)
|
||||
OWSAudioAttachmentPlayer.setAudioIgnoresHardwareMuteSwitch(true)
|
||||
videoPlayer.setFullscreen(true, animated:false)
|
||||
}
|
||||
|
||||
|
@ -456,6 +478,14 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate {
|
|||
videoPlayer?.stop()
|
||||
videoPlayer?.view.removeFromSuperview()
|
||||
videoPlayer = nil
|
||||
ViewControllerUtils.setAudioIgnoresHardwareMuteSwitch(false)
|
||||
OWSAudioAttachmentPlayer.setAudioIgnoresHardwareMuteSwitch(false)
|
||||
}
|
||||
}
|
||||
|
||||
extension UIImage {
|
||||
public convenience init?(named: String, inBundleForClass someClass: AnyClass) {
|
||||
// let image = UIImage(named: imageName, inBundleForClass: type(of:self))
|
||||
let bundle = Bundle(for: someClass)
|
||||
self.init(named: named, in: bundle, compatibleWith: nil)
|
||||
}
|
||||
}
|
|
@ -25,6 +25,8 @@ typedef NS_ENUM(NSInteger, AudioPlaybackState) {
|
|||
|
||||
@interface OWSAudioAttachmentPlayer : NSObject
|
||||
|
||||
+ (void)setAudioIgnoresHardwareMuteSwitch:(BOOL)shouldIgnore;
|
||||
|
||||
@property (nonatomic, readonly, weak) id<OWSAudioAttachmentPlayerDelegate> delegate;
|
||||
|
||||
// This property can be used to associate instances of the player with view
|
|
@ -3,10 +3,9 @@
|
|||
//
|
||||
|
||||
#import "OWSAudioAttachmentPlayer.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "TSAttachmentStream.h"
|
||||
#import "ViewControllerUtils.h"
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/NSTimer+OWS.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
@ -23,6 +22,17 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
@implementation OWSAudioAttachmentPlayer
|
||||
|
||||
+ (void)setAudioIgnoresHardwareMuteSwitch:(BOOL)shouldIgnore
|
||||
{
|
||||
NSError *error = nil;
|
||||
BOOL success = [[AVAudioSession sharedInstance]
|
||||
setCategory:(shouldIgnore ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryPlayAndRecord)error:&error];
|
||||
OWSAssert(!error);
|
||||
if (!success || error) {
|
||||
DDLogError(@"%@ Error in setAudioIgnoresHardwareMuteSwitch: %d", self.logTag, shouldIgnore);
|
||||
}
|
||||
}
|
||||
|
||||
- (instancetype)initWithMediaUrl:(NSURL *)mediaUrl delegate:(id<OWSAudioAttachmentPlayerDelegate>)delegate
|
||||
{
|
||||
self = [super init];
|
||||
|
@ -48,7 +58,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
|
||||
[DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
// FIXME SHARINGEXTENSION
|
||||
// [DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
|
||||
[self stop];
|
||||
}
|
||||
|
@ -66,7 +77,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSAssert(self.mediaUrl);
|
||||
OWSAssert([self.delegate audioPlaybackState] != AudioPlaybackState_Playing);
|
||||
|
||||
[ViewControllerUtils setAudioIgnoresHardwareMuteSwitch:YES];
|
||||
[[self class] setAudioIgnoresHardwareMuteSwitch:YES];
|
||||
|
||||
[self.audioPlayerPoller invalidate];
|
||||
|
||||
|
@ -101,7 +112,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
repeats:YES];
|
||||
|
||||
// Prevent device from sleeping while playing audio.
|
||||
[DeviceSleepManager.sharedInstance addBlockWithBlockObject:self];
|
||||
// FIXME SHARINGEXTENSION
|
||||
// [DeviceSleepManager.sharedInstance addBlockWithBlockObject:self];
|
||||
}
|
||||
|
||||
- (void)pause
|
||||
|
@ -113,7 +125,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[self.audioPlayerPoller invalidate];
|
||||
[self.delegate setAudioProgress:[self.audioPlayer currentTime] duration:[self.audioPlayer duration]];
|
||||
|
||||
[DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
// FIXME SHARINGEXTENSION
|
||||
// [DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
}
|
||||
|
||||
- (void)stop
|
||||
|
@ -125,7 +138,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[self.audioPlayerPoller invalidate];
|
||||
[self.delegate setAudioProgress:0 duration:0];
|
||||
|
||||
[DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
// FIXME SHARINGEXTENSION
|
||||
// [DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self];
|
||||
}
|
||||
|
||||
- (void)togglePlayState
|
|
@ -5,11 +5,12 @@
|
|||
#import "SendExternalFileViewController.h"
|
||||
#import "Environment.h"
|
||||
#import "NSString+OWS.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "SignalApp.h"
|
||||
#import "ThreadUtil.h"
|
||||
#import "UIColor+OWS.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import "UIView+OWS.h"
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/TSThread.h>
|
||||
|
||||
|
@ -53,22 +54,34 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
BOOL didShowSNAlert =
|
||||
[SafetyNumberConfirmationAlert presentAlertIfNecessaryWithRecipientIds:thread.recipientIdentifiers
|
||||
confirmationText:[SafetyNumberStrings confirmSendButton]
|
||||
contactsManager:self.contactsManager
|
||||
completion:^(BOOL didConfirm) {
|
||||
if (didConfirm) {
|
||||
[weakSelf threadWasSelected:thread];
|
||||
}
|
||||
}];
|
||||
if (didShowSNAlert) {
|
||||
return;
|
||||
}
|
||||
// FIXME SHARINGEXTENSION
|
||||
// Handling safety number changes brings in a lot of machinery.
|
||||
// How do we want to handle this?
|
||||
// e.g. fingerprint scanning, etc. in the SAE or just redirect the user to the main app?
|
||||
// BOOL didShowSNAlert =
|
||||
// [SafetyNumberConfirmationAlert presentAlertIfNecessaryWithRecipientIds:thread.recipientIdentifiers
|
||||
// confirmationText:[SafetyNumberStrings
|
||||
// confirmSendButton]
|
||||
// contactsManager:self.contactsManager
|
||||
// completion:^(BOOL didConfirm) {
|
||||
// if (didConfirm) {
|
||||
// [weakSelf threadWasSelected:thread];
|
||||
// }
|
||||
// }];
|
||||
// if (didShowSNAlert) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
[ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:thread];
|
||||
[ThreadUtil sendMessageWithAttachment:self.attachment inThread:thread messageSender:self.messageSender];
|
||||
[SignalApp.sharedApp presentConversationForThread:thread];
|
||||
|
||||
// FIXME SHARINGEXTENSION
|
||||
// Show loading screen and dismiss when complete
|
||||
|
||||
// TODO Show share annotation UI (add caption, preview, cancel)
|
||||
//
|
||||
// This implemenation was for the "import with signal" functionality:
|
||||
// [SignalApp.sharedApp presentConversationForThread:thread];
|
||||
}
|
||||
|
||||
- (BOOL)canSelectBlockedContact
|
||||
|
@ -100,7 +113,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[fileView autoHCenterInSuperview];
|
||||
[fileView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:titleLabel withOffset:titleVSpacing];
|
||||
|
||||
UIImage *image = [UIImage imageNamed:@"file-thin-black-filled-large"];
|
||||
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
|
||||
UIImage *image =
|
||||
[UIImage imageNamed:@"file-thin-black-filled-large" inBundle:bundle compatibleWithTraitCollection:nil];
|
||||
OWSAssert(image);
|
||||
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
|
||||
imageView.layer.minificationFilter = kCAFilterTrilinear;
|
|
@ -5,7 +5,7 @@
|
|||
import Foundation
|
||||
import MobileCoreServices
|
||||
import SignalServiceKit
|
||||
import SignalMessaging
|
||||
import AVFoundation
|
||||
|
||||
enum SignalAttachmentError: Error {
|
||||
case missingData
|
||||
|
@ -74,27 +74,38 @@ enum TSImageQuality {
|
|||
// [SignalAttachment hasError] will be true for non-valid attachments.
|
||||
//
|
||||
// TODO: Perhaps do conversion off the main thread?
|
||||
class SignalAttachment: NSObject {
|
||||
@objc
|
||||
public class SignalAttachment: NSObject {
|
||||
|
||||
static let TAG = "[SignalAttachment]"
|
||||
let TAG = "[SignalAttachment]"
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
@objc
|
||||
let dataSource: DataSource
|
||||
|
||||
@objc
|
||||
public var data: Data {
|
||||
return dataSource.data()
|
||||
}
|
||||
|
||||
@objc
|
||||
public var dataLength: UInt {
|
||||
return dataSource.dataLength()
|
||||
}
|
||||
|
||||
@objc
|
||||
public var dataUrl: URL? {
|
||||
return dataSource.dataUrl()
|
||||
}
|
||||
|
||||
@objc
|
||||
public var sourceFilename: String? {
|
||||
return dataSource.sourceFilename
|
||||
}
|
||||
|
||||
@objc
|
||||
public var isValidImage: Bool {
|
||||
return dataSource.isValidImage()
|
||||
}
|
||||
|
@ -102,7 +113,8 @@ class SignalAttachment: NSObject {
|
|||
// Attachment types are identified using UTIs.
|
||||
//
|
||||
// See: https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html
|
||||
let dataUTI: String
|
||||
@objc
|
||||
public let dataUTI: String
|
||||
|
||||
var error: SignalAttachmentError? {
|
||||
didSet {
|
||||
|
@ -119,6 +131,7 @@ class SignalAttachment: NSObject {
|
|||
private var cachedImage: UIImage?
|
||||
private var cachedVideoPreview: UIImage?
|
||||
|
||||
@objc
|
||||
private(set) public var isVoiceMessage = false
|
||||
|
||||
// MARK: Constants
|
||||
|
@ -138,7 +151,8 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// This method should not be called directly; use the factory
|
||||
// methods instead.
|
||||
internal required init(dataSource: DataSource, dataUTI: String) {
|
||||
@objc
|
||||
internal init(dataSource: DataSource, dataUTI: String) {
|
||||
self.dataSource = dataSource
|
||||
self.dataUTI = dataUTI
|
||||
super.init()
|
||||
|
@ -146,11 +160,13 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// MARK: Methods
|
||||
|
||||
var hasError: Bool {
|
||||
@objc
|
||||
public var hasError: Bool {
|
||||
return error != nil
|
||||
}
|
||||
|
||||
var errorName: String? {
|
||||
@objc
|
||||
public var errorName: String? {
|
||||
guard let error = error else {
|
||||
// This method should only be called if there is an error.
|
||||
owsFail("Missing error")
|
||||
|
@ -160,7 +176,8 @@ class SignalAttachment: NSObject {
|
|||
return "\(error)"
|
||||
}
|
||||
|
||||
var localizedErrorDescription: String? {
|
||||
@objc
|
||||
public var localizedErrorDescription: String? {
|
||||
guard let error = self.error else {
|
||||
// This method should only be called if there is an error.
|
||||
owsFail("Missing error")
|
||||
|
@ -170,10 +187,12 @@ class SignalAttachment: NSObject {
|
|||
return "\(error.errorDescription)"
|
||||
}
|
||||
|
||||
class var missingDataErrorMessage: String {
|
||||
@objc
|
||||
public class var missingDataErrorMessage: String {
|
||||
return SignalAttachmentError.missingData.errorDescription
|
||||
}
|
||||
|
||||
@objc
|
||||
public func image() -> UIImage? {
|
||||
if let cachedImage = cachedImage {
|
||||
return cachedImage
|
||||
|
@ -185,6 +204,7 @@ class SignalAttachment: NSObject {
|
|||
return image
|
||||
}
|
||||
|
||||
@objc
|
||||
public func videoPreview() -> UIImage? {
|
||||
if let cachedVideoPreview = cachedVideoPreview {
|
||||
return cachedVideoPreview
|
||||
|
@ -212,7 +232,8 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// Returns the MIME type for this attachment or nil if no MIME type
|
||||
// can be identified.
|
||||
var mimeType: String {
|
||||
@objc
|
||||
public var mimeType: String {
|
||||
if isVoiceMessage {
|
||||
// Legacy iOS clients don't handle "audio/mp4" files correctly;
|
||||
// they are written to disk as .mp4 instead of .m4a which breaks
|
||||
|
@ -249,7 +270,8 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// Use the filename if known. If not, e.g. if the attachment was copy/pasted, we'll generate a filename
|
||||
// like: "signal-2017-04-24-095918.zip"
|
||||
var filenameOrDefault: String {
|
||||
@objc
|
||||
public var filenameOrDefault: String {
|
||||
if let filename = sourceFilename {
|
||||
return filename
|
||||
} else {
|
||||
|
@ -270,7 +292,8 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// Returns the file extension for this attachment or nil if no file extension
|
||||
// can be identified.
|
||||
var fileExtension: String? {
|
||||
@objc
|
||||
public var fileExtension: String? {
|
||||
if let filename = sourceFilename {
|
||||
let fileExtension = (filename as NSString).pathExtension
|
||||
if fileExtension.count > 0 {
|
||||
|
@ -333,26 +356,32 @@ class SignalAttachment: NSObject {
|
|||
return audioUTISet.union(videoUTISet).union(animatedImageUTISet).union(inputImageUTISet)
|
||||
}
|
||||
|
||||
@objc
|
||||
public var isImage: Bool {
|
||||
return SignalAttachment.outputImageUTISet.contains(dataUTI)
|
||||
}
|
||||
|
||||
@objc
|
||||
public var isAnimatedImage: Bool {
|
||||
return SignalAttachment.animatedImageUTISet.contains(dataUTI)
|
||||
}
|
||||
|
||||
@objc
|
||||
public var isVideo: Bool {
|
||||
return SignalAttachment.videoUTISet.contains(dataUTI)
|
||||
}
|
||||
|
||||
@objc
|
||||
public var isAudio: Bool {
|
||||
return SignalAttachment.audioUTISet.contains(dataUTI)
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func pasteboardHasPossibleAttachment() -> Bool {
|
||||
return UIPasteboard.general.numberOfItems > 0
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func pasteboardHasText() -> Bool {
|
||||
if UIPasteboard.general.numberOfItems < 1 {
|
||||
return false
|
||||
|
@ -401,6 +430,7 @@ class SignalAttachment: NSObject {
|
|||
//
|
||||
// NOTE: The attachment returned by this method may not be valid.
|
||||
// Check the attachment's error property.
|
||||
@objc
|
||||
public class func attachmentFromPasteboard() -> SignalAttachment? {
|
||||
guard UIPasteboard.general.numberOfItems >= 1 else {
|
||||
return nil
|
||||
|
@ -476,7 +506,8 @@ class SignalAttachment: NSObject {
|
|||
//
|
||||
// NOTE: The attachment returned by this method may not be valid.
|
||||
// Check the attachment's error property.
|
||||
private class func imageAttachment(dataSource: DataSource?, dataUTI: String) -> SignalAttachment {
|
||||
@objc
|
||||
public class func imageAttachment(dataSource: DataSource?, dataUTI: String) -> SignalAttachment {
|
||||
assert(dataUTI.count > 0)
|
||||
|
||||
assert(dataSource != nil)
|
||||
|
@ -576,6 +607,7 @@ class SignalAttachment: NSObject {
|
|||
//
|
||||
// NOTE: The attachment returned by this method may nil or not be valid.
|
||||
// Check the attachment's error property.
|
||||
@objc
|
||||
public class func imageAttachment(image: UIImage?, dataUTI: String, filename: String?) -> SignalAttachment {
|
||||
assert(dataUTI.count > 0)
|
||||
|
||||
|
@ -744,6 +776,7 @@ class SignalAttachment: NSObject {
|
|||
|
||||
// MARK: Voice Messages
|
||||
|
||||
@objc
|
||||
public class func voiceMessageAttachment(dataSource: DataSource?, dataUTI: String) -> SignalAttachment {
|
||||
let attachment = audioAttachment(dataSource : dataSource, dataUTI : dataUTI)
|
||||
attachment.isVoiceMessage = true
|
||||
|
@ -756,6 +789,7 @@ class SignalAttachment: NSObject {
|
|||
//
|
||||
// NOTE: The attachment returned by this method may not be valid.
|
||||
// Check the attachment's error property.
|
||||
@objc
|
||||
public class func attachment(dataSource: DataSource?, dataUTI: String) -> SignalAttachment {
|
||||
if inputImageUTISet.contains(dataUTI) {
|
||||
return imageAttachment(dataSource : dataSource, dataUTI : dataUTI)
|
||||
|
@ -768,6 +802,7 @@ class SignalAttachment: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
public class func empty() -> SignalAttachment {
|
||||
return SignalAttachment.attachment(dataSource : DataSourceValue.emptyDataSource(),
|
||||
dataUTI: kUTTypeContent as String)
|
|
@ -2,7 +2,7 @@
|
|||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface UIImage (normalizeImage)
|
||||
|
||||
|
@ -16,3 +16,5 @@
|
|||
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
#import "NSString+OWS.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "OWSTableViewController.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "ThreadViewHelper.h"
|
||||
#import "UIColor+OWS.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import "UIView+OWS.h"
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/PhoneNumber.h>
|
||||
#import <SignalServiceKit/SignalAccount.h>
|
||||
#import <SignalServiceKit/TSAccountManager.h>
|
|
@ -5,7 +5,7 @@
|
|||
#import "BlockListUIUtils.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "PhoneNumber.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/Contact.h>
|
||||
#import <SignalServiceKit/OWSBlockingManager.h>
|
||||
#import <SignalServiceKit/SignalAccount.h>
|
||||
|
@ -86,7 +86,7 @@ typedef void (^BlockAlertCompletionBlock)(UIAlertAction *action);
|
|||
UIAlertController *actionSheetController =
|
||||
[UIAlertController alertControllerWithTitle:title
|
||||
message:NSLocalizedString(@"BLOCK_BEHAVIOR_EXPLANATION",
|
||||
@"An explanation of the consequences of blocking another user.")
|
||||
@"An explanation of the consequences of blocking another user.")
|
||||
preferredStyle:UIAlertControllerStyleActionSheet];
|
||||
|
||||
UIAlertAction *unblockAction = [UIAlertAction
|
|
@ -3,12 +3,14 @@
|
|||
//
|
||||
|
||||
#import "OWSAvatarBuilder.h"
|
||||
#import "JSQMessagesAvatarImageFactory.h"
|
||||
#import "OWSContactAvatarBuilder.h"
|
||||
#import "OWSGroupAvatarBuilder.h"
|
||||
#import "TSContactThread.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import "UIColor+OWS.h"
|
||||
// SHARINGEXTENSION FIXME
|
||||
// intern or reimplement this so that SignalMessaging doesn't depend on JSQ
|
||||
#import <JSQMessagesViewController/JSQMessagesAvatarImageFactory.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
@ -21,7 +23,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSAvatarBuilder *avatarBuilder;
|
||||
if ([thread isKindOfClass:[TSContactThread class]]) {
|
||||
TSContactThread *contactThread = (TSContactThread *)thread;
|
||||
avatarBuilder = [[OWSContactAvatarBuilder alloc] initWithSignalId:contactThread.contactIdentifier diameter:diameter contactsManager:contactsManager];
|
||||
avatarBuilder = [[OWSContactAvatarBuilder alloc] initWithSignalId:contactThread.contactIdentifier
|
||||
diameter:diameter
|
||||
contactsManager:contactsManager];
|
||||
} else if ([thread isKindOfClass:[TSGroupThread class]]) {
|
||||
avatarBuilder = [[OWSGroupAvatarBuilder alloc] initWithThread:(TSGroupThread *)thread];
|
||||
} else {
|
|
@ -4,12 +4,14 @@
|
|||
|
||||
#import "OWSContactAvatarBuilder.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "TSContactThread.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import "TSThread.h"
|
||||
#import "UIColor+OWS.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
// SHARINGEXTENSION FIXME
|
||||
// intern or reimplement this so that SignalMessaging doesn't depend on JSQ
|
||||
#import <JSQMessagesViewController/JSQMessagesAvatarImageFactory.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
@ -36,12 +38,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
_signalId = contactId;
|
||||
_contactName = name;
|
||||
_diameter = diameter;
|
||||
_contactsManager = contactsManager;
|
||||
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -99,7 +101,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[initials appendString:[firstLetter uppercaseString]];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NSRange stringRange = { 0, MIN([initials length], (NSUInteger)3) }; // Rendering max 3 letters.
|
||||
initials = [[initials substringWithRange:stringRange] mutableCopy];
|
||||
}
|
||||
|
@ -108,7 +110,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// We don't have a name for this contact, so we can't make an "initials" image
|
||||
[initials appendString:@"#"];
|
||||
}
|
||||
|
||||
|
||||
CGFloat fontSize = (CGFloat)self.diameter / 2.8;
|
||||
UIColor *backgroundColor = [UIColor backgroundColorForContact:self.signalId];
|
||||
UIImage *image = [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials
|
|
@ -1,5 +1,6 @@
|
|||
// Created by Michael Kirk on 9/26/16.
|
||||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSAvatarBuilder.h"
|
||||
|
|
@ -5,9 +5,9 @@
|
|||
#import "ThreadUtil.h"
|
||||
#import "OWSContactOffersInteraction.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "TSUnreadIndicatorInteraction.h"
|
||||
#import <SignalMessaging/OWSProfileManager.h>
|
||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||
#import <SignalServiceKit/NSDate+OWS.h>
|
||||
#import <SignalServiceKit/OWSAddToContactsOfferMessage.h>
|
||||
#import <SignalServiceKit/OWSAddToProfileWhitelistOfferMessage.h>
|
||||
|
@ -15,6 +15,9 @@
|
|||
#import <SignalServiceKit/OWSDisappearingMessagesConfiguration.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/OWSUnknownContactBlockOfferMessage.h>
|
||||
#import <SignalServiceKit/TSAccountManager.h>
|
||||
#import <SignalServiceKit/TSCall.h>
|
||||
#import <SignalServiceKit/TSContactThread.h>
|
||||
#import <SignalServiceKit/TSDatabaseView.h>
|
||||
#import <SignalServiceKit/TSIncomingMessage.h>
|
||||
#import <SignalServiceKit/TSInvalidIdentityKeyErrorMessage.h>
|
|
@ -2,10 +2,10 @@
|
|||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SignalServiceKit/MIMETypeUtil.h>
|
||||
#import "UIColor+OWS.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import "UIImage+OWS.h"
|
||||
#import <SignalServiceKit/MIMETypeUtil.h>
|
||||
|
||||
typedef void (^completionBlock)(void);
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
//
|
||||
|
||||
#import "UIUtil.h"
|
||||
#import <SignalServiceKit/AppContext.h>
|
||||
|
||||
#define CONTACT_PICTURE_VIEW_BORDER_WIDTH 0.5f
|
||||
|
||||
|
@ -16,14 +17,16 @@
|
|||
imageView.layer.masksToBounds = YES;
|
||||
}
|
||||
|
||||
+ (void)removeRoundedBorderToImageView:(UIImageView *__strong *)imageView {
|
||||
+ (void)removeRoundedBorderToImageView:(UIImageView *__strong *)imageView
|
||||
{
|
||||
[[*imageView layer] setBorderWidth:0];
|
||||
[[*imageView layer] setCornerRadius:0];
|
||||
}
|
||||
|
||||
+ (completionBlock)modalCompletionBlock {
|
||||
+ (completionBlock)modalCompletionBlock
|
||||
{
|
||||
completionBlock block = ^void() {
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
[CurrentAppContext() setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
};
|
||||
|
||||
return block;
|
||||
|
@ -31,18 +34,18 @@
|
|||
|
||||
+ (void)applyDefaultSystemAppearence
|
||||
{
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
|
||||
[CurrentAppContext() setStatusBarStyle:UIStatusBarStyleDefault];
|
||||
[[UINavigationBar appearance] setBarStyle:UIBarStyleDefault];
|
||||
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
|
||||
[[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
|
||||
[[UINavigationBar appearance] setTitleTextAttributes:@{
|
||||
NSForegroundColorAttributeName : [UIColor blackColor],
|
||||
}];
|
||||
NSForegroundColorAttributeName : [UIColor blackColor],
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)applySignalAppearence
|
||||
{
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
[CurrentAppContext() setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
[[UINavigationBar appearance] setBarTintColor:[UIColor ows_materialBlueColor]];
|
||||
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
|
||||
|
||||
|
@ -54,8 +57,8 @@
|
|||
|
||||
// If we set NSShadowAttributeName, the NSForegroundColorAttributeName value is ignored.
|
||||
[[UINavigationBar appearance] setTitleTextAttributes:@{
|
||||
NSForegroundColorAttributeName : [UIColor whiteColor],
|
||||
}];
|
||||
NSForegroundColorAttributeName : [UIColor whiteColor],
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
|
@ -36,6 +36,8 @@ An Objective-C library for communicating with the Signal messaging service.
|
|||
s.prefix_header_file = 'SignalServiceKit/src/TSPrefix.h'
|
||||
s.xcconfig = { 'OTHER_CFLAGS' => '$(inherited) -DSQLITE_HAS_CODEC' }
|
||||
|
||||
s.resources = ["SignalServiceKit/Resources/Certificates/*"]
|
||||
|
||||
s.dependency 'Curve25519Kit'
|
||||
s.dependency 'CocoaLumberjack'
|
||||
s.dependency 'AFNetworking'
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
//
|
||||
|
||||
#import "TSYapDatabaseObject.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
|
|
@ -242,8 +242,9 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
|
|||
AssertIsOnMainThread();
|
||||
|
||||
// Should only be sent once per operation
|
||||
OWSAssert(_backgroundTaskIdentifier == UIBackgroundTaskInvalid);
|
||||
OWSAssert(backgroundTaskIdentifier != UIBackgroundTaskInvalid);
|
||||
// FIXME SHARINGEXTENSION
|
||||
// OWSAssert(_backgroundTaskIdentifier == UIBackgroundTaskInvalid);
|
||||
// OWSAssert(backgroundTaskIdentifier != UIBackgroundTaskInvalid);
|
||||
|
||||
_backgroundTaskIdentifier = backgroundTaskIdentifier;
|
||||
}
|
||||
|
|
|
@ -265,7 +265,8 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange =
|
|||
return nil;
|
||||
}
|
||||
|
||||
NSString *path = [NSBundle.mainBundle pathForResource:name ofType:@"crt"];
|
||||
NSBundle *bundle = [NSBundle bundleForClass:self.class];
|
||||
NSString *path = [bundle pathForResource:name ofType:@"crt"];
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
|
||||
OWSFail(@"%@ Missing certificate for name: %@", self.logTag, name);
|
||||
*error = OWSErrorMakeAssertionError();
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
//
|
||||
// Created by Fred on 01/09/15.
|
||||
// Copyright © 2015 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSHTTPSecurityPolicy.h"
|
||||
|
@ -40,7 +39,9 @@
|
|||
}
|
||||
|
||||
- (SecCertificateRef)certificateForService:(NSString *)service {
|
||||
NSString *path = [NSBundle.mainBundle pathForResource:service ofType:@"cer"];
|
||||
|
||||
NSBundle *bundle = [NSBundle bundleForClass:self.class];
|
||||
NSString *path = [bundle pathForResource:service ofType:@"cer"];
|
||||
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
|
||||
@throw [NSException
|
||||
|
|
|
@ -30,6 +30,7 @@ typedef void (^BackgroundTaskExpirationHandler)(void);
|
|||
- (void)setMainAppBadgeNumber:(NSInteger)value;
|
||||
|
||||
- (BOOL)isRTL;
|
||||
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle;
|
||||
|
||||
// Returns the VC that should be used to present alerts, modals, etc.
|
||||
- (nullable UIViewController *)frontmostViewController;
|
||||
|
|
|
@ -9,6 +9,7 @@ import PureLayout
|
|||
// All Observer methods will be invoked from the main thread.
|
||||
protocol SAELoadViewDelegate: class {
|
||||
func shareExtensionWasCancelled()
|
||||
func shareExtensionIsReady()
|
||||
}
|
||||
|
||||
class SAELoadViewController: UIViewController {
|
||||
|
@ -65,6 +66,14 @@ class SAELoadViewController: UIViewController {
|
|||
activityIndicator.startAnimating()
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
// FIXME not until ready, and ideally before view appears to avoid any "loading flicker"
|
||||
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
|
||||
Logger.error("Simulating readiness...")
|
||||
self.delegate?.shareExtensionIsReady()
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
super.viewDidDisappear(animated)
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import UIKit
|
|||
import SignalMessaging
|
||||
import PureLayout
|
||||
import SignalServiceKit
|
||||
import PromiseKit
|
||||
|
||||
@objc
|
||||
public class ShareViewController: UINavigationController, SAELoadViewDelegate, SAEFailedViewDelegate {
|
||||
|
@ -347,4 +348,70 @@ public class ShareViewController: UINavigationController, SAELoadViewDelegate, S
|
|||
public func shareExtensionWasCancelled() {
|
||||
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
|
||||
}
|
||||
|
||||
public func shareExtensionIsReady() {
|
||||
self.presentConversationPicker()
|
||||
}
|
||||
|
||||
// MARK: Helpers
|
||||
|
||||
private func presentConversationPicker() {
|
||||
let conversationPicker = SendExternalFileViewController()
|
||||
buildAttachment().then { attachment -> Void in
|
||||
conversationPicker.attachment = attachment
|
||||
self.pushViewController(conversationPicker, animated: false)
|
||||
Logger.info("presented conversation picker with attachment")
|
||||
}.catch { error in
|
||||
owsFail("\(self.logTag) building attachment failed with error: \(error)")
|
||||
}.retainUntilComplete()
|
||||
}
|
||||
|
||||
enum ShareViewControllerError: Error {
|
||||
case assertionError(description: String)
|
||||
}
|
||||
|
||||
private func buildAttachment() -> Promise<SignalAttachment> {
|
||||
guard let inputItem: NSExtensionItem = self.extensionContext?.inputItems.first as? NSExtensionItem else {
|
||||
let error = ShareViewControllerError.assertionError(description: "no input item")
|
||||
return Promise(error: error)
|
||||
}
|
||||
|
||||
// TODO Multiple attachments. In that case I'm unclear if we'll
|
||||
// be given multile inputItems or a signle inputItem with multiple attachments.
|
||||
guard let itemProvider: NSItemProvider = inputItem.attachments?.first as? NSItemProvider else {
|
||||
let error = ShareViewControllerError.assertionError(description: "No item provider in input item attachments")
|
||||
return Promise(error: error)
|
||||
}
|
||||
Logger.info("\(self.logTag) attachment: \(itemProvider)")
|
||||
|
||||
guard itemProvider.hasItemConformingToTypeIdentifier(kUTTypeJPEG as String) else {
|
||||
let error = ShareViewControllerError.assertionError(description: "only supporting jpegs for now")
|
||||
return Promise(error: error)
|
||||
}
|
||||
|
||||
let (promise, fulfill, reject) = Promise<UIImage>.pending()
|
||||
|
||||
// TODO accept other data types
|
||||
// TODO whitelist attachment types
|
||||
// TODO coerce when necessary and possible
|
||||
itemProvider.loadPreviewImage(options: nil,
|
||||
completionHandler: { (previewImage, error) in
|
||||
guard error == nil else {
|
||||
reject(error!)
|
||||
return
|
||||
}
|
||||
|
||||
guard let image = previewImage as? UIImage else {
|
||||
let unexpectedTypeError = ShareViewControllerError.assertionError(description: "unexpected item type: \(String(describing: previewImage))")
|
||||
reject(unexpectedTypeError)
|
||||
return
|
||||
}
|
||||
|
||||
fulfill(image)
|
||||
})
|
||||
|
||||
return promise.then { (image: UIImage) in
|
||||
return SignalAttachment.imageAttachment(image: image, dataUTI: kUTTypeJPEG as String, filename: "from-share-extension-2345")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
== NSLocaleLanguageDirectionRightToLeft;
|
||||
}
|
||||
|
||||
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle
|
||||
{
|
||||
DDLogInfo(@"Ignoring request to set status bar style since we're in an app extension");
|
||||
}
|
||||
|
||||
- (UIApplicationState)mainApplicationState
|
||||
{
|
||||
OWSFail(@"%@ called %s.", self.logTag, __PRETTY_FUNCTION__);
|
||||
|
|
Loading…
Reference in New Issue