From e48ea52924d5b13bd4ab23625c3da87a41e6117b Mon Sep 17 00:00:00 2001 From: dtsbourg Date: Fri, 21 Nov 2014 14:38:37 +0100 Subject: [PATCH] ContactDetail: Fix crash on parsedPhoneNumbers --- .gitignore | 2 +- Podfile.lock | 6 +- Signal.xcodeproj/project.pbxproj | 394 ++---------------- .../xcshareddata/Signal.xccheckout | 18 +- .../LaunchImage.launchimage/Contents.json | 7 +- .../LaunchImage.launchimage/Default-6.png | Bin 0 -> 24289 bytes Signal/Images/archive_icon.png | Bin 3094 -> 0 bytes Signal/Images/archive_icon@2x.png | Bin 505 -> 0 bytes Signal/Images/checkbox_checkmark.png | Bin 3512 -> 0 bytes Signal/Images/checkbox_checkmark@2x.png | Bin 599 -> 0 bytes Signal/Images/checkbox_empty.png | Bin 2909 -> 0 bytes Signal/Images/checkbox_empty@2x.png | Bin 339 -> 0 bytes Signal/Images/contacts.png | Bin 888 -> 0 bytes Signal/Images/contacts_arrow.png | Bin 5631 -> 0 bytes Signal/Images/contacts_arrow@2x.png | Bin 3809 -> 0 bytes Signal/Images/defaultConctact_light@2x.png | Bin 0 -> 16894 bytes Signal/Images/dismiss_notification_icon.png | Bin 3287 -> 0 bytes .../Images/dismiss_notification_icon@2x.png | Bin 718 -> 0 bytes Signal/Images/drop_down_arrow_icon.png | Bin 2908 -> 0 bytes Signal/Images/drop_down_arrow_icon@2x.png | Bin 2908 -> 0 bytes Signal/Images/expanded_cell_icon.png | Bin 2872 -> 0 bytes Signal/Images/expanded_cell_icon@2x.png | Bin 226 -> 0 bytes Signal/Images/favourite.png | Bin 6566 -> 0 bytes Signal/Images/favourite_false_icon.png | Bin 3168 -> 0 bytes Signal/Images/favourite_false_icon@2x.png | Bin 697 -> 0 bytes Signal/Images/favourite_true_icon.png | Bin 3188 -> 0 bytes Signal/Images/favourite_true_icon@2x.png | Bin 692 -> 0 bytes Signal/Images/forward_button.png | Bin 3068 -> 0 bytes Signal/Images/forward_button@2x.png | Bin 462 -> 0 bytes Signal/Images/group_photo@2x.png | Bin 0 -> 8346 bytes Signal/Images/home_icon.png | Bin 5332 -> 0 bytes Signal/Images/icon_contacts.png | Bin 8870 -> 0 bytes Signal/Images/icon_favourites.png | Bin 6780 -> 0 bytes Signal/Images/icon_keypad.png | Bin 6662 -> 0 bytes Signal/Images/icon_recents.png | Bin 6764 -> 0 bytes Signal/Images/in_call_phone_icon.png | Bin 3001 -> 0 bytes Signal/Images/in_call_phone_icon@2x.png | Bin 335 -> 0 bytes Signal/Images/in_call_phrase_icon.png | Bin 3420 -> 0 bytes Signal/Images/in_call_phrase_icon@2x.png | Bin 906 -> 0 bytes Signal/Images/incoming_call_icon.png | Bin 3215 -> 0 bytes Signal/Images/incoming_call_icon@2x.png | Bin 557 -> 0 bytes Signal/Images/info@2x.png | Bin 13743 -> 0 bytes Signal/Images/menu_icon.png | Bin 2957 -> 0 bytes Signal/Images/menu_icon@2x.png | Bin 256 -> 0 bytes Signal/Images/message_icon.png | Bin 5522 -> 0 bytes Signal/Images/mute_icon.png | Bin 2889 -> 0 bytes Signal/Images/mute_icon@2x.png | Bin 171 -> 0 bytes Signal/Images/mute_icon_selected.png | Bin 2889 -> 0 bytes Signal/Images/mute_icon_selected@2x.png | Bin 2877 -> 0 bytes Signal/Images/notification_detail_icon.png | Bin 2890 -> 0 bytes Signal/Images/notification_detail_icon@2x.png | Bin 299 -> 0 bytes Signal/Images/notification_mini_icon.png | Bin 3742 -> 0 bytes Signal/Images/notification_mini_icon@2x.png | Bin 1692 -> 0 bytes Signal/Images/outgoing_call_icon.png | Bin 3243 -> 0 bytes Signal/Images/outgoing_call_icon@2x.png | Bin 3326 -> 0 bytes Signal/Images/phone_icon.png | Bin 2346 -> 0 bytes Signal/Images/phone_icon@2x.png | Bin 3879 -> 0 bytes Signal/Images/search_cancel.png | Bin 3239 -> 0 bytes Signal/Images/search_cancel@2x.png | Bin 3360 -> 0 bytes Signal/Images/search_icon.png | Bin 3250 -> 0 bytes Signal/Images/search_icon@2x.png | Bin 668 -> 0 bytes Signal/Images/send_code_icon.png | Bin 2914 -> 0 bytes Signal/Images/send_code_icon@2x.png | Bin 2984 -> 0 bytes Signal/Images/settings.png | Bin 1140 -> 0 bytes Signal/Images/settings_tab@2x.png | Bin 0 -> 4344 bytes Signal/Images/signals.png | Bin 781 -> 0 bytes Signal/Images/signals_tab@2x.png | Bin 0 -> 2915 bytes Signal/Images/speaker_icon.png | Bin 3208 -> 0 bytes Signal/Images/speaker_icon@2x.png | Bin 837 -> 0 bytes Signal/Images/speaker_icon_selected.png | Bin 3189 -> 0 bytes Signal/Images/speaker_icon_selected@2x.png | Bin 3057 -> 0 bytes Signal/Images/spinner_connecting.png | Bin 3686 -> 0 bytes Signal/Images/spinner_connecting@2x.png | Bin 3851 -> 0 bytes Signal/Images/spinner_connecting_flash.png | Bin 3721 -> 0 bytes Signal/Images/spinner_connecting_flash@2x.png | Bin 590 -> 0 bytes Signal/Images/spinner_error.png | Bin 3704 -> 0 bytes Signal/Images/spinner_error@2x.png | Bin 521 -> 0 bytes Signal/Images/spinner_ringing.png | Bin 3721 -> 0 bytes Signal/Images/spinner_ringing@2x.png | Bin 3941 -> 0 bytes Signal/Images/tab_icon_contacts.png | Bin 3241 -> 0 bytes Signal/Images/tab_icon_contacts@2x.png | Bin 473 -> 0 bytes Signal/Images/tab_icon_favourites.png | Bin 3208 -> 0 bytes Signal/Images/tab_icon_favourites@2x.png | Bin 626 -> 0 bytes Signal/Images/tab_icon_inbox.png | Bin 3459 -> 0 bytes Signal/Images/tab_icon_inbox@2x.png | Bin 868 -> 0 bytes Signal/Images/tab_icon_keypad.png | Bin 3226 -> 0 bytes Signal/Images/tab_icon_keypad@2x.png | Bin 678 -> 0 bytes Signal/Images/tab_icon_menu.png | Bin 3213 -> 0 bytes Signal/Images/tab_icon_menu@2x.png | Bin 578 -> 0 bytes Signal/Images/trash_icon.png | Bin 3119 -> 0 bytes Signal/Images/trash_icon@2x.png | Bin 424 -> 0 bytes Signal/Images/volume_high.png | Bin 3121 -> 0 bytes Signal/Images/volume_high@2x.png | Bin 467 -> 0 bytes Signal/Images/volume_low.png | Bin 2896 -> 0 bytes Signal/Images/volume_low@2x.png | Bin 194 -> 0 bytes Signal/Images/whisper_notification_icon.png | Bin 3137 -> 0 bytes .../Images/whisper_notification_icon@2x.png | Bin 403 -> 0 bytes Signal/Signal-Info.plist | 2 +- Signal/src/AppDelegate.m | 69 +-- Signal/src/Storyboard/Storyboard.storyboard | 286 ++++++------- Signal/src/call/RecentCallManager.m | 2 +- Signal/src/contact/Contact.h | 22 +- Signal/src/contact/Contact.m | 21 + Signal/src/contact/ContactsManager.h | 14 +- Signal/src/contact/ContactsManager.m | 136 +++--- .../network/http/RPServerRequestsManager.m | 1 - .../PhoneNumberDirectoryFilterManager.m | 88 +++- .../src/textsecure/Account/TSAccountManager.h | 7 +- .../src/textsecure/Account/TSAccountManager.m | 71 +++- .../src/textsecure/Account/TSPreKeyManager.m | 2 +- Signal/src/textsecure/Contacts/TSContact.h | 42 -- Signal/src/textsecure/Contacts/TSContact.m | 31 -- Signal/src/textsecure/Contacts/TSRecipient.m | 38 +- Signal/src/textsecure/Contacts/TSThread.m | 15 +- .../Contacts/Threads/TSContactThread.h | 2 +- .../Contacts/Threads/TSContactThread.m | 19 +- Signal/src/textsecure/Messages/TSCall.h | 1 - .../src/textsecure/Messages/TSErrorMessage.h | 2 +- .../textsecure/Messages/TSMessagesManager.m | 162 ++++--- .../Requests/TSContactsIntersectionRequest.h | 2 + .../API/Requests/TSRegisterWithTokenRequest.m | 5 +- .../textsecure/Network/API/TSNetworkManager.m | 2 +- .../Network/WebSockets/TSSocketManager.m | 9 +- .../TSStorageManager+SignedPreKeyStore.m | 2 +- .../src/textsecure/Storage/TSDatabaseView.h | 8 + .../src/textsecure/Storage/TSDatabaseView.m | 11 +- .../Storage/TSStorageManager+keyingMaterial.m | 2 +- .../src/textsecure/Storage/TSStorageManager.h | 7 +- .../src/textsecure/Storage/TSStorageManager.m | 72 +++- .../textsecure/Storage/TSYapDatabaseObject.m | 6 +- Signal/src/textsecure/Util/Cryptography.m | 34 +- .../ActionContactDetailCell.m | 11 +- .../CodeVerificationViewController.m | 73 +++- .../src/view controllers/ContactDetailCell.h | 3 + .../ContactDetailTableViewController.m | 170 +++++--- .../ContactsTableViewController.m | 5 +- Signal/src/view controllers/DemoDataModel.m | 57 +-- .../view controllers/DialerViewController.m | 9 +- .../FingerprintViewController.m | 22 +- .../FullImageViewController.m | 4 +- .../view controllers/InCallViewController.h | 5 + .../view controllers/InCallViewController.m | 35 +- .../src/view controllers/InboxTableViewCell.h | 3 +- .../src/view controllers/InboxTableViewCell.m | 13 +- .../view controllers/InboxTableViewCell.xib | 8 +- .../MessageComposeTableViewController.m | 10 +- .../view controllers/MessagesViewController.h | 7 +- .../view controllers/MessagesViewController.m | 48 ++- .../view controllers/NewGroupViewController.m | 30 +- .../view controllers/SettingsTableViewCell.h | 3 - .../view controllers/SettingsTableViewCell.m | 12 +- .../SettingsTableViewController.m | 18 +- .../SignalsNavigationController.m | 8 + .../UITests/SignalsViewController.h | 10 +- .../UITests/SignalsViewController.m | 201 +++++++-- .../xibs/DialerViewController.xib | 62 +-- .../xibs/InCallViewController.xib | 45 +- Signal/src/views/ContactTableViewCell.h | 3 + Signal/src/views/ContactTableViewCell.m | 16 +- Signal/src/views/DialerButtonView.m | 11 +- Signal/test/textsecure/CryptographyTests.mm | 11 +- .../test/textsecure/TSMessageStorageTests.m | 12 +- 162 files changed, 1291 insertions(+), 1254 deletions(-) create mode 100644 Signal/Images.xcassets/LaunchImage.launchimage/Default-6.png delete mode 100644 Signal/Images/archive_icon.png delete mode 100644 Signal/Images/archive_icon@2x.png delete mode 100644 Signal/Images/checkbox_checkmark.png delete mode 100644 Signal/Images/checkbox_checkmark@2x.png delete mode 100644 Signal/Images/checkbox_empty.png delete mode 100644 Signal/Images/checkbox_empty@2x.png delete mode 100644 Signal/Images/contacts.png delete mode 100644 Signal/Images/contacts_arrow.png delete mode 100644 Signal/Images/contacts_arrow@2x.png create mode 100644 Signal/Images/defaultConctact_light@2x.png delete mode 100644 Signal/Images/dismiss_notification_icon.png delete mode 100644 Signal/Images/dismiss_notification_icon@2x.png delete mode 100644 Signal/Images/drop_down_arrow_icon.png delete mode 100644 Signal/Images/drop_down_arrow_icon@2x.png delete mode 100644 Signal/Images/expanded_cell_icon.png delete mode 100644 Signal/Images/expanded_cell_icon@2x.png delete mode 100644 Signal/Images/favourite.png delete mode 100644 Signal/Images/favourite_false_icon.png delete mode 100644 Signal/Images/favourite_false_icon@2x.png delete mode 100644 Signal/Images/favourite_true_icon.png delete mode 100644 Signal/Images/favourite_true_icon@2x.png delete mode 100644 Signal/Images/forward_button.png delete mode 100644 Signal/Images/forward_button@2x.png create mode 100644 Signal/Images/group_photo@2x.png delete mode 100644 Signal/Images/home_icon.png delete mode 100644 Signal/Images/icon_contacts.png delete mode 100644 Signal/Images/icon_favourites.png delete mode 100644 Signal/Images/icon_keypad.png delete mode 100644 Signal/Images/icon_recents.png delete mode 100644 Signal/Images/in_call_phone_icon.png delete mode 100644 Signal/Images/in_call_phone_icon@2x.png delete mode 100644 Signal/Images/in_call_phrase_icon.png delete mode 100644 Signal/Images/in_call_phrase_icon@2x.png delete mode 100644 Signal/Images/incoming_call_icon.png delete mode 100644 Signal/Images/incoming_call_icon@2x.png delete mode 100644 Signal/Images/info@2x.png delete mode 100644 Signal/Images/menu_icon.png delete mode 100644 Signal/Images/menu_icon@2x.png delete mode 100644 Signal/Images/message_icon.png delete mode 100644 Signal/Images/mute_icon.png delete mode 100644 Signal/Images/mute_icon@2x.png delete mode 100644 Signal/Images/mute_icon_selected.png delete mode 100644 Signal/Images/mute_icon_selected@2x.png delete mode 100644 Signal/Images/notification_detail_icon.png delete mode 100644 Signal/Images/notification_detail_icon@2x.png delete mode 100644 Signal/Images/notification_mini_icon.png delete mode 100644 Signal/Images/notification_mini_icon@2x.png delete mode 100644 Signal/Images/outgoing_call_icon.png delete mode 100755 Signal/Images/outgoing_call_icon@2x.png delete mode 100644 Signal/Images/phone_icon.png delete mode 100644 Signal/Images/phone_icon@2x.png delete mode 100644 Signal/Images/search_cancel.png delete mode 100644 Signal/Images/search_cancel@2x.png delete mode 100644 Signal/Images/search_icon.png delete mode 100644 Signal/Images/search_icon@2x.png delete mode 100644 Signal/Images/send_code_icon.png delete mode 100644 Signal/Images/send_code_icon@2x.png delete mode 100644 Signal/Images/settings.png create mode 100644 Signal/Images/settings_tab@2x.png delete mode 100644 Signal/Images/signals.png create mode 100644 Signal/Images/signals_tab@2x.png delete mode 100644 Signal/Images/speaker_icon.png delete mode 100644 Signal/Images/speaker_icon@2x.png delete mode 100644 Signal/Images/speaker_icon_selected.png delete mode 100644 Signal/Images/speaker_icon_selected@2x.png delete mode 100644 Signal/Images/spinner_connecting.png delete mode 100644 Signal/Images/spinner_connecting@2x.png delete mode 100644 Signal/Images/spinner_connecting_flash.png delete mode 100644 Signal/Images/spinner_connecting_flash@2x.png delete mode 100644 Signal/Images/spinner_error.png delete mode 100644 Signal/Images/spinner_error@2x.png delete mode 100644 Signal/Images/spinner_ringing.png delete mode 100644 Signal/Images/spinner_ringing@2x.png delete mode 100644 Signal/Images/tab_icon_contacts.png delete mode 100644 Signal/Images/tab_icon_contacts@2x.png delete mode 100644 Signal/Images/tab_icon_favourites.png delete mode 100644 Signal/Images/tab_icon_favourites@2x.png delete mode 100644 Signal/Images/tab_icon_inbox.png delete mode 100644 Signal/Images/tab_icon_inbox@2x.png delete mode 100644 Signal/Images/tab_icon_keypad.png delete mode 100644 Signal/Images/tab_icon_keypad@2x.png delete mode 100644 Signal/Images/tab_icon_menu.png delete mode 100644 Signal/Images/tab_icon_menu@2x.png delete mode 100644 Signal/Images/trash_icon.png delete mode 100644 Signal/Images/trash_icon@2x.png delete mode 100644 Signal/Images/volume_high.png delete mode 100644 Signal/Images/volume_high@2x.png delete mode 100644 Signal/Images/volume_low.png delete mode 100644 Signal/Images/volume_low@2x.png delete mode 100644 Signal/Images/whisper_notification_icon.png delete mode 100644 Signal/Images/whisper_notification_icon@2x.png mode change 100644 => 100755 Signal/src/Storyboard/Storyboard.storyboard delete mode 100644 Signal/src/textsecure/Contacts/TSContact.h delete mode 100644 Signal/src/textsecure/Contacts/TSContact.m diff --git a/.gitignore b/.gitignore index 06f2cadc9..7d8c64ff0 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ build/* # Exclude user-specific XCode 3 and 4 files xcuserdata - +*.xccheckout diff --git a/Podfile.lock b/Podfile.lock index 5d32aeda3..a89667b3d 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -32,7 +32,7 @@ PODS: - CocoaLumberjack/Core - DJWActionSheet (1.0.4) - HKDFKit (0.0.3) - - JSQMessagesViewController (6.0-beta6): + - JSQMessagesViewController (6.0.0): - JSQSystemSoundPlayer (~> 2.0.0) - JSQSystemSoundPlayer (2.0.0) - libPhoneNumber-iOS (0.7.3) @@ -83,7 +83,7 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: JSQMessagesViewController: - :commit: 21d877492e948f27fde4115573a809798cc78210 + :commit: 597670e44663c9fa70b6a2deec2b19147c763048 :git: https://github.com/dtsbourg/JSQMessagesViewController SocketRocket: :commit: d0585af165 @@ -96,7 +96,7 @@ SPEC CHECKSUMS: CocoaLumberjack: 205769c032b5fef85b92472046bcc8b7e7c8a817 DJWActionSheet: d88b302d7c29523e1e9fb9b62cfac46f59bb90d9 HKDFKit: 5998cf1bbb611e7ecc6bd3eaaef8c7a7da7be949 - JSQMessagesViewController: 960a09d11978bea52d1a676e97980838f8d98652 + JSQMessagesViewController: 49f449221a8f1da43403e6468ae2015fa0114a9e JSQSystemSoundPlayer: c98443b1cbb3b45db09d0d3d6c2355cf78294981 libPhoneNumber-iOS: 98fc07d70c8fdb5e6a8e3442c37e97353065c20e Mantle: d7c5ac734579ec751c58fecbf56189853056c58c diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 7835dd012..297d9df8d 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -286,127 +286,40 @@ B60C16651988999D00E97A6C /* VersionMigrations.m in Sources */ = {isa = PBXBuildFile; fileRef = B60C16641988999D00E97A6C /* VersionMigrations.m */; }; B60EDE041A05A01700D73516 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B60EDE031A05A01700D73516 /* AudioToolbox.framework */; }; B633C5801A1D190B0059AC12 /* archive@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C4FE1A1D190B0059AC12 /* archive@2x.png */; }; - B633C5811A1D190B0059AC12 /* archive_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C4FF1A1D190B0059AC12 /* archive_icon.png */; }; - B633C5821A1D190B0059AC12 /* archive_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5001A1D190B0059AC12 /* archive_icon@2x.png */; }; B633C5831A1D190B0059AC12 /* backspace.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5011A1D190B0059AC12 /* backspace.png */; }; B633C5841A1D190B0059AC12 /* backspace@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5021A1D190B0059AC12 /* backspace@2x.png */; }; B633C5851A1D190B0059AC12 /* blue-archive@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5031A1D190B0059AC12 /* blue-archive@2x.png */; }; B633C5861A1D190B0059AC12 /* call@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5041A1D190B0059AC12 /* call@2x.png */; }; B633C5871A1D190B0059AC12 /* call_dark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5051A1D190B0059AC12 /* call_dark@2x.png */; }; - B633C5881A1D190B0059AC12 /* checkbox_checkmark.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5061A1D190B0059AC12 /* checkbox_checkmark.png */; }; - B633C5891A1D190B0059AC12 /* checkbox_checkmark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5071A1D190B0059AC12 /* checkbox_checkmark@2x.png */; }; - B633C58A1A1D190B0059AC12 /* checkbox_empty.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5081A1D190B0059AC12 /* checkbox_empty.png */; }; - B633C58B1A1D190B0059AC12 /* checkbox_empty@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5091A1D190B0059AC12 /* checkbox_empty@2x.png */; }; B633C58C1A1D190B0059AC12 /* checkmark.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50A1A1D190B0059AC12 /* checkmark.png */; }; B633C58D1A1D190B0059AC12 /* contact_default_feed.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50B1A1D190B0059AC12 /* contact_default_feed.png */; }; - B633C58E1A1D190B0059AC12 /* contacts.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50C1A1D190B0059AC12 /* contacts.png */; }; B633C58F1A1D190B0059AC12 /* contacts@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50D1A1D190B0059AC12 /* contacts@2x.png */; }; - B633C5901A1D190B0059AC12 /* contacts_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50E1A1D190B0059AC12 /* contacts_arrow.png */; }; - B633C5911A1D190B0059AC12 /* contacts_arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50F1A1D190B0059AC12 /* contacts_arrow@2x.png */; }; B633C5921A1D190B0059AC12 /* contacts_tab@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5101A1D190B0059AC12 /* contacts_tab@2x.png */; }; B633C5961A1D190B0059AC12 /* DefaultContactImage.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5141A1D190B0059AC12 /* DefaultContactImage.png */; }; B633C5971A1D190B0059AC12 /* delete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5151A1D190B0059AC12 /* delete@2x.png */; }; B633C5981A1D190B0059AC12 /* delete_history@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5161A1D190B0059AC12 /* delete_history@2x.png */; }; - B633C5991A1D190B0059AC12 /* dismiss_notification_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5171A1D190B0059AC12 /* dismiss_notification_icon.png */; }; - B633C59A1A1D190B0059AC12 /* dismiss_notification_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5181A1D190B0059AC12 /* dismiss_notification_icon@2x.png */; }; - B633C59B1A1D190B0059AC12 /* drop_down_arrow_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5191A1D190B0059AC12 /* drop_down_arrow_icon.png */; }; - B633C59C1A1D190B0059AC12 /* drop_down_arrow_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51A1A1D190B0059AC12 /* drop_down_arrow_icon@2x.png */; }; B633C59D1A1D190B0059AC12 /* endcall@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51B1A1D190B0059AC12 /* endcall@2x.png */; }; - B633C59E1A1D190B0059AC12 /* expanded_cell_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51C1A1D190B0059AC12 /* expanded_cell_icon.png */; }; - B633C59F1A1D190B0059AC12 /* expanded_cell_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51D1A1D190B0059AC12 /* expanded_cell_icon@2x.png */; }; - B633C5A01A1D190B0059AC12 /* favourite.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51E1A1D190B0059AC12 /* favourite.png */; }; - B633C5A11A1D190B0059AC12 /* favourite_false_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C51F1A1D190B0059AC12 /* favourite_false_icon.png */; }; - B633C5A21A1D190B0059AC12 /* favourite_false_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5201A1D190B0059AC12 /* favourite_false_icon@2x.png */; }; - B633C5A31A1D190B0059AC12 /* favourite_true_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5211A1D190B0059AC12 /* favourite_true_icon.png */; }; - B633C5A41A1D190B0059AC12 /* favourite_true_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5221A1D190B0059AC12 /* favourite_true_icon@2x.png */; }; - B633C5A51A1D190B0059AC12 /* forward_button.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5231A1D190B0059AC12 /* forward_button.png */; }; - B633C5A61A1D190B0059AC12 /* forward_button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5241A1D190B0059AC12 /* forward_button@2x.png */; }; - B633C5A71A1D190B0059AC12 /* home_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5251A1D190B0059AC12 /* home_icon.png */; }; - B633C5A81A1D190B0059AC12 /* icon_contacts.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5261A1D190B0059AC12 /* icon_contacts.png */; }; - B633C5A91A1D190B0059AC12 /* icon_favourites.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5271A1D190B0059AC12 /* icon_favourites.png */; }; - B633C5AA1A1D190B0059AC12 /* icon_keypad.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5281A1D190B0059AC12 /* icon_keypad.png */; }; - B633C5AB1A1D190B0059AC12 /* icon_recents.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5291A1D190B0059AC12 /* icon_recents.png */; }; - B633C5AC1A1D190B0059AC12 /* in_call_phone_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52A1A1D190B0059AC12 /* in_call_phone_icon.png */; }; - B633C5AD1A1D190B0059AC12 /* in_call_phone_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52B1A1D190B0059AC12 /* in_call_phone_icon@2x.png */; }; - B633C5AE1A1D190B0059AC12 /* in_call_phrase_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52C1A1D190B0059AC12 /* in_call_phrase_icon.png */; }; - B633C5AF1A1D190B0059AC12 /* in_call_phrase_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52D1A1D190B0059AC12 /* in_call_phrase_icon@2x.png */; }; - B633C5B01A1D190B0059AC12 /* incoming_call_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52E1A1D190B0059AC12 /* incoming_call_icon.png */; }; - B633C5B11A1D190B0059AC12 /* incoming_call_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C52F1A1D190B0059AC12 /* incoming_call_icon@2x.png */; }; - B633C5B21A1D190B0059AC12 /* info@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5301A1D190B0059AC12 /* info@2x.png */; }; B633C5B41A1D190B0059AC12 /* keypad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5321A1D190B0059AC12 /* keypad@2x.png */; }; B633C5B51A1D190B0059AC12 /* lock@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5331A1D190B0059AC12 /* lock@2x.png */; }; B633C5B61A1D190B0059AC12 /* lock_white@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5341A1D190B0059AC12 /* lock_white@2x.png */; }; B633C5B71A1D190B0059AC12 /* logo_intro@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5351A1D190B0059AC12 /* logo_intro@2x.png */; }; - B633C5B91A1D190B0059AC12 /* menu_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5371A1D190B0059AC12 /* menu_icon.png */; }; - B633C5BA1A1D190B0059AC12 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5381A1D190B0059AC12 /* menu_icon@2x.png */; }; B633C5BB1A1D190B0059AC12 /* message_bubble.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5391A1D190B0059AC12 /* message_bubble.png */; }; B633C5BC1A1D190B0059AC12 /* message_bubble@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53A1A1D190B0059AC12 /* message_bubble@2x.png */; }; - B633C5BD1A1D190B0059AC12 /* message_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53B1A1D190B0059AC12 /* message_icon.png */; }; B633C5BE1A1D190B0059AC12 /* missed.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53C1A1D190B0059AC12 /* missed.png */; }; - B633C5BF1A1D190B0059AC12 /* mute_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53D1A1D190B0059AC12 /* mute_icon.png */; }; - B633C5C01A1D190B0059AC12 /* mute_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53E1A1D190B0059AC12 /* mute_icon@2x.png */; }; - B633C5C11A1D190B0059AC12 /* mute_icon_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C53F1A1D190B0059AC12 /* mute_icon_selected.png */; }; - B633C5C21A1D190B0059AC12 /* mute_icon_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5401A1D190B0059AC12 /* mute_icon_selected@2x.png */; }; B633C5C31A1D190B0059AC12 /* mute_off@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5411A1D190B0059AC12 /* mute_off@2x.png */; }; B633C5C41A1D190B0059AC12 /* mute_on@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5421A1D190B0059AC12 /* mute_on@2x.png */; }; - B633C5C51A1D190B0059AC12 /* notification_detail_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5431A1D190B0059AC12 /* notification_detail_icon.png */; }; - B633C5C61A1D190B0059AC12 /* notification_detail_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5441A1D190B0059AC12 /* notification_detail_icon@2x.png */; }; - B633C5C71A1D190B0059AC12 /* notification_mini_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5451A1D190B0059AC12 /* notification_mini_icon.png */; }; - B633C5C81A1D190B0059AC12 /* notification_mini_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5461A1D190B0059AC12 /* notification_mini_icon@2x.png */; }; - B633C5C91A1D190B0059AC12 /* outgoing_call_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5471A1D190B0059AC12 /* outgoing_call_icon.png */; }; - B633C5CA1A1D190B0059AC12 /* outgoing_call_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5481A1D190B0059AC12 /* outgoing_call_icon@2x.png */; }; - B633C5CB1A1D190B0059AC12 /* phone_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5491A1D190B0059AC12 /* phone_icon.png */; }; - B633C5CC1A1D190B0059AC12 /* phone_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54A1A1D190B0059AC12 /* phone_icon@2x.png */; }; B633C5CD1A1D190B0059AC12 /* photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54B1A1D190B0059AC12 /* photo@2x.png */; }; B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54C1A1D190B0059AC12 /* quit@2x.png */; }; B633C5CF1A1D190B0059AC12 /* received.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54D1A1D190B0059AC12 /* received.png */; }; B633C5D01A1D190B0059AC12 /* red-delete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54E1A1D190B0059AC12 /* red-delete@2x.png */; }; B633C5D11A1D190B0059AC12 /* reply.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C54F1A1D190B0059AC12 /* reply.png */; }; B633C5D21A1D190B0059AC12 /* savephoto@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5501A1D190B0059AC12 /* savephoto@2x.png */; }; - B633C5D31A1D190B0059AC12 /* search_cancel.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5511A1D190B0059AC12 /* search_cancel.png */; }; - B633C5D41A1D190B0059AC12 /* search_cancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5521A1D190B0059AC12 /* search_cancel@2x.png */; }; - B633C5D51A1D190B0059AC12 /* search_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5531A1D190B0059AC12 /* search_icon.png */; }; - B633C5D61A1D190B0059AC12 /* search_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5541A1D190B0059AC12 /* search_icon@2x.png */; }; - B633C5D71A1D190B0059AC12 /* send_code_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5551A1D190B0059AC12 /* send_code_icon.png */; }; - B633C5D81A1D190B0059AC12 /* send_code_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5561A1D190B0059AC12 /* send_code_icon@2x.png */; }; - B633C5D91A1D190B0059AC12 /* settings.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5571A1D190B0059AC12 /* settings.png */; }; B633C5DA1A1D190B0059AC12 /* settings_dark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5581A1D190B0059AC12 /* settings_dark@2x.png */; }; B633C5DB1A1D190B0059AC12 /* share@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5591A1D190B0059AC12 /* share@2x.png */; }; B633C5DC1A1D190B0059AC12 /* shred@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C55A1A1D190B0059AC12 /* shred@2x.png */; }; B633C5DF1A1D190B0059AC12 /* signal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C55E1A1D190B0059AC12 /* signal@2x.png */; }; - B633C5E01A1D190B0059AC12 /* signals.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C55F1A1D190B0059AC12 /* signals.png */; }; - B633C5E11A1D190B0059AC12 /* speaker_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5601A1D190B0059AC12 /* speaker_icon.png */; }; - B633C5E21A1D190B0059AC12 /* speaker_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5611A1D190B0059AC12 /* speaker_icon@2x.png */; }; - B633C5E31A1D190B0059AC12 /* speaker_icon_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5621A1D190B0059AC12 /* speaker_icon_selected.png */; }; - B633C5E41A1D190B0059AC12 /* speaker_icon_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5631A1D190B0059AC12 /* speaker_icon_selected@2x.png */; }; B633C5E51A1D190B0059AC12 /* speaker_off@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5641A1D190B0059AC12 /* speaker_off@2x.png */; }; B633C5E61A1D190B0059AC12 /* speaker_on@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5651A1D190B0059AC12 /* speaker_on@2x.png */; }; - B633C5E71A1D190B0059AC12 /* spinner_connecting.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5661A1D190B0059AC12 /* spinner_connecting.png */; }; - B633C5E81A1D190B0059AC12 /* spinner_connecting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5671A1D190B0059AC12 /* spinner_connecting@2x.png */; }; - B633C5E91A1D190B0059AC12 /* spinner_connecting_flash.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5681A1D190B0059AC12 /* spinner_connecting_flash.png */; }; - B633C5EA1A1D190B0059AC12 /* spinner_connecting_flash@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5691A1D190B0059AC12 /* spinner_connecting_flash@2x.png */; }; - B633C5EB1A1D190B0059AC12 /* spinner_error.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56A1A1D190B0059AC12 /* spinner_error.png */; }; - B633C5EC1A1D190B0059AC12 /* spinner_error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56B1A1D190B0059AC12 /* spinner_error@2x.png */; }; - B633C5ED1A1D190B0059AC12 /* spinner_ringing.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56C1A1D190B0059AC12 /* spinner_ringing.png */; }; - B633C5EE1A1D190B0059AC12 /* spinner_ringing@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56D1A1D190B0059AC12 /* spinner_ringing@2x.png */; }; - B633C5EF1A1D190B0059AC12 /* tab_icon_contacts.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56E1A1D190B0059AC12 /* tab_icon_contacts.png */; }; - B633C5F01A1D190B0059AC12 /* tab_icon_contacts@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C56F1A1D190B0059AC12 /* tab_icon_contacts@2x.png */; }; - B633C5F11A1D190B0059AC12 /* tab_icon_favourites.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5701A1D190B0059AC12 /* tab_icon_favourites.png */; }; - B633C5F21A1D190B0059AC12 /* tab_icon_favourites@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5711A1D190B0059AC12 /* tab_icon_favourites@2x.png */; }; - B633C5F31A1D190B0059AC12 /* tab_icon_inbox.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5721A1D190B0059AC12 /* tab_icon_inbox.png */; }; - B633C5F41A1D190B0059AC12 /* tab_icon_inbox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5731A1D190B0059AC12 /* tab_icon_inbox@2x.png */; }; - B633C5F51A1D190B0059AC12 /* tab_icon_keypad.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5741A1D190B0059AC12 /* tab_icon_keypad.png */; }; - B633C5F61A1D190B0059AC12 /* tab_icon_keypad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5751A1D190B0059AC12 /* tab_icon_keypad@2x.png */; }; - B633C5F71A1D190B0059AC12 /* tab_icon_menu.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5761A1D190B0059AC12 /* tab_icon_menu.png */; }; - B633C5F81A1D190B0059AC12 /* tab_icon_menu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5771A1D190B0059AC12 /* tab_icon_menu@2x.png */; }; - B633C5F91A1D190B0059AC12 /* trash_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5781A1D190B0059AC12 /* trash_icon.png */; }; - B633C5FA1A1D190B0059AC12 /* trash_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5791A1D190B0059AC12 /* trash_icon@2x.png */; }; - B633C5FB1A1D190B0059AC12 /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57A1A1D190B0059AC12 /* volume_high.png */; }; - B633C5FC1A1D190B0059AC12 /* volume_high@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57B1A1D190B0059AC12 /* volume_high@2x.png */; }; - B633C5FD1A1D190B0059AC12 /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57C1A1D190B0059AC12 /* volume_low.png */; }; - B633C5FE1A1D190B0059AC12 /* volume_low@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57D1A1D190B0059AC12 /* volume_low@2x.png */; }; - B633C5FF1A1D190B0059AC12 /* whisper_notification_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57E1A1D190B0059AC12 /* whisper_notification_icon.png */; }; - B633C6001A1D190B0059AC12 /* whisper_notification_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C57F1A1D190B0059AC12 /* whisper_notification_icon@2x.png */; }; B63761E319E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E219E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m */; }; B63761EC19E1FBE8005735D1 /* HttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E519E1FBE8005735D1 /* HttpRequest.m */; }; B63761ED19E1FBE8005735D1 /* HttpRequestOrResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B63761E719E1FBE8005735D1 /* HttpRequestOrResponse.m */; }; @@ -447,7 +360,6 @@ B6B096631A1D25ED008BFAA6 /* TSPreKeyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095F11A1D25ED008BFAA6 /* TSPreKeyManager.m */; }; B6B096641A1D25ED008BFAA6 /* TSContactThread.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095F51A1D25ED008BFAA6 /* TSContactThread.m */; }; B6B096651A1D25ED008BFAA6 /* TSGroupThread.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095F71A1D25ED008BFAA6 /* TSGroupThread.m */; }; - B6B096661A1D25ED008BFAA6 /* TSContact.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095F91A1D25ED008BFAA6 /* TSContact.m */; }; B6B096671A1D25ED008BFAA6 /* TSGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095FB1A1D25ED008BFAA6 /* TSGroup.m */; }; B6B096681A1D25ED008BFAA6 /* TSRecipient.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095FD1A1D25ED008BFAA6 /* TSRecipient.m */; }; B6B096691A1D25ED008BFAA6 /* TSThread.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095FF1A1D25ED008BFAA6 /* TSThread.m */; }; @@ -570,6 +482,10 @@ E197B62718BBF63B00F073E5 /* SoundBoard.m in Sources */ = {isa = PBXBuildFile; fileRef = E197B62618BBF63B00F073E5 /* SoundBoard.m */; }; E1CD329618BCFF9900B1A496 /* SoundInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CD329518BCFF9900B1A496 /* SoundInstance.m */; }; F995AC2FFD6D4442B012604A /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8313AE91B4954215858A5662 /* libPods.a */; }; + FC15B7BF1A1F80F200F59801 /* defaultConctact_light@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC15B7BE1A1F80F200F59801 /* defaultConctact_light@2x.png */; }; + FC1F90C01A22342B004F8253 /* group_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1F90BF1A22342B004F8253 /* group_photo@2x.png */; }; + FC1F90C61A223991004F8253 /* settings_tab@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1F90C41A223991004F8253 /* settings_tab@2x.png */; }; + FC1F90C71A223991004F8253 /* signals_tab@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1F90C51A223991004F8253 /* signals_tab@2x.png */; }; FC31962A1A067D8F0094C78E /* MessageComposeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC3196291A067D8F0094C78E /* MessageComposeTableViewController.m */; }; FC31962D1A06A2190094C78E /* FingerprintViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC31962C1A06A2190094C78E /* FingerprintViewController.m */; }; FC3196301A0814130094C78E /* SettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC31962F1A0814130094C78E /* SettingsTableViewController.m */; }; @@ -939,127 +855,40 @@ B60C16641988999D00E97A6C /* VersionMigrations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VersionMigrations.m; sourceTree = ""; }; B60EDE031A05A01700D73516 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; B633C4FE1A1D190B0059AC12 /* archive@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive@2x.png"; sourceTree = ""; }; - B633C4FF1A1D190B0059AC12 /* archive_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = archive_icon.png; sourceTree = ""; }; - B633C5001A1D190B0059AC12 /* archive_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive_icon@2x.png"; sourceTree = ""; }; B633C5011A1D190B0059AC12 /* backspace.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = backspace.png; sourceTree = ""; }; B633C5021A1D190B0059AC12 /* backspace@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "backspace@2x.png"; sourceTree = ""; }; B633C5031A1D190B0059AC12 /* blue-archive@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-archive@2x.png"; sourceTree = ""; }; B633C5041A1D190B0059AC12 /* call@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "call@2x.png"; sourceTree = ""; }; B633C5051A1D190B0059AC12 /* call_dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "call_dark@2x.png"; sourceTree = ""; }; - B633C5061A1D190B0059AC12 /* checkbox_checkmark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checkbox_checkmark.png; sourceTree = ""; }; - B633C5071A1D190B0059AC12 /* checkbox_checkmark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox_checkmark@2x.png"; sourceTree = ""; }; - B633C5081A1D190B0059AC12 /* checkbox_empty.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checkbox_empty.png; sourceTree = ""; }; - B633C5091A1D190B0059AC12 /* checkbox_empty@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox_empty@2x.png"; sourceTree = ""; }; B633C50A1A1D190B0059AC12 /* checkmark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checkmark.png; sourceTree = ""; }; B633C50B1A1D190B0059AC12 /* contact_default_feed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = contact_default_feed.png; sourceTree = ""; }; - B633C50C1A1D190B0059AC12 /* contacts.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = contacts.png; sourceTree = ""; }; B633C50D1A1D190B0059AC12 /* contacts@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts@2x.png"; sourceTree = ""; }; - B633C50E1A1D190B0059AC12 /* contacts_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = contacts_arrow.png; sourceTree = ""; }; - B633C50F1A1D190B0059AC12 /* contacts_arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_arrow@2x.png"; sourceTree = ""; }; B633C5101A1D190B0059AC12 /* contacts_tab@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_tab@2x.png"; sourceTree = ""; }; B633C5141A1D190B0059AC12 /* DefaultContactImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DefaultContactImage.png; sourceTree = ""; }; B633C5151A1D190B0059AC12 /* delete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "delete@2x.png"; sourceTree = ""; }; B633C5161A1D190B0059AC12 /* delete_history@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "delete_history@2x.png"; sourceTree = ""; }; - B633C5171A1D190B0059AC12 /* dismiss_notification_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dismiss_notification_icon.png; sourceTree = ""; }; - B633C5181A1D190B0059AC12 /* dismiss_notification_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dismiss_notification_icon@2x.png"; sourceTree = ""; }; - B633C5191A1D190B0059AC12 /* drop_down_arrow_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = drop_down_arrow_icon.png; sourceTree = ""; }; - B633C51A1A1D190B0059AC12 /* drop_down_arrow_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "drop_down_arrow_icon@2x.png"; sourceTree = ""; }; B633C51B1A1D190B0059AC12 /* endcall@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "endcall@2x.png"; sourceTree = ""; }; - B633C51C1A1D190B0059AC12 /* expanded_cell_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = expanded_cell_icon.png; sourceTree = ""; }; - B633C51D1A1D190B0059AC12 /* expanded_cell_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "expanded_cell_icon@2x.png"; sourceTree = ""; }; - B633C51E1A1D190B0059AC12 /* favourite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = favourite.png; sourceTree = ""; }; - B633C51F1A1D190B0059AC12 /* favourite_false_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = favourite_false_icon.png; sourceTree = ""; }; - B633C5201A1D190B0059AC12 /* favourite_false_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "favourite_false_icon@2x.png"; sourceTree = ""; }; - B633C5211A1D190B0059AC12 /* favourite_true_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = favourite_true_icon.png; sourceTree = ""; }; - B633C5221A1D190B0059AC12 /* favourite_true_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "favourite_true_icon@2x.png"; sourceTree = ""; }; - B633C5231A1D190B0059AC12 /* forward_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = forward_button.png; sourceTree = ""; }; - B633C5241A1D190B0059AC12 /* forward_button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "forward_button@2x.png"; sourceTree = ""; }; - B633C5251A1D190B0059AC12 /* home_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = home_icon.png; sourceTree = ""; }; - B633C5261A1D190B0059AC12 /* icon_contacts.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_contacts.png; sourceTree = ""; }; - B633C5271A1D190B0059AC12 /* icon_favourites.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_favourites.png; sourceTree = ""; }; - B633C5281A1D190B0059AC12 /* icon_keypad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_keypad.png; sourceTree = ""; }; - B633C5291A1D190B0059AC12 /* icon_recents.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_recents.png; sourceTree = ""; }; - B633C52A1A1D190B0059AC12 /* in_call_phone_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = in_call_phone_icon.png; sourceTree = ""; }; - B633C52B1A1D190B0059AC12 /* in_call_phone_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "in_call_phone_icon@2x.png"; sourceTree = ""; }; - B633C52C1A1D190B0059AC12 /* in_call_phrase_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = in_call_phrase_icon.png; sourceTree = ""; }; - B633C52D1A1D190B0059AC12 /* in_call_phrase_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "in_call_phrase_icon@2x.png"; sourceTree = ""; }; - B633C52E1A1D190B0059AC12 /* incoming_call_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = incoming_call_icon.png; sourceTree = ""; }; - B633C52F1A1D190B0059AC12 /* incoming_call_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "incoming_call_icon@2x.png"; sourceTree = ""; }; - B633C5301A1D190B0059AC12 /* info@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "info@2x.png"; sourceTree = ""; }; B633C5321A1D190B0059AC12 /* keypad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keypad@2x.png"; sourceTree = ""; }; B633C5331A1D190B0059AC12 /* lock@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lock@2x.png"; sourceTree = ""; }; B633C5341A1D190B0059AC12 /* lock_white@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lock_white@2x.png"; sourceTree = ""; }; B633C5351A1D190B0059AC12 /* logo_intro@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "logo_intro@2x.png"; sourceTree = ""; }; - B633C5371A1D190B0059AC12 /* menu_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_icon.png; sourceTree = ""; }; - B633C5381A1D190B0059AC12 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; }; B633C5391A1D190B0059AC12 /* message_bubble.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = message_bubble.png; sourceTree = ""; }; B633C53A1A1D190B0059AC12 /* message_bubble@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "message_bubble@2x.png"; sourceTree = ""; }; - B633C53B1A1D190B0059AC12 /* message_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = message_icon.png; sourceTree = ""; }; B633C53C1A1D190B0059AC12 /* missed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = missed.png; sourceTree = ""; }; - B633C53D1A1D190B0059AC12 /* mute_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mute_icon.png; sourceTree = ""; }; - B633C53E1A1D190B0059AC12 /* mute_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute_icon@2x.png"; sourceTree = ""; }; - B633C53F1A1D190B0059AC12 /* mute_icon_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mute_icon_selected.png; sourceTree = ""; }; - B633C5401A1D190B0059AC12 /* mute_icon_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute_icon_selected@2x.png"; sourceTree = ""; }; B633C5411A1D190B0059AC12 /* mute_off@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute_off@2x.png"; sourceTree = ""; }; B633C5421A1D190B0059AC12 /* mute_on@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute_on@2x.png"; sourceTree = ""; }; - B633C5431A1D190B0059AC12 /* notification_detail_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = notification_detail_icon.png; sourceTree = ""; }; - B633C5441A1D190B0059AC12 /* notification_detail_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "notification_detail_icon@2x.png"; sourceTree = ""; }; - B633C5451A1D190B0059AC12 /* notification_mini_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = notification_mini_icon.png; sourceTree = ""; }; - B633C5461A1D190B0059AC12 /* notification_mini_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "notification_mini_icon@2x.png"; sourceTree = ""; }; - B633C5471A1D190B0059AC12 /* outgoing_call_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = outgoing_call_icon.png; sourceTree = ""; }; - B633C5481A1D190B0059AC12 /* outgoing_call_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "outgoing_call_icon@2x.png"; sourceTree = ""; }; - B633C5491A1D190B0059AC12 /* phone_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = phone_icon.png; sourceTree = ""; }; - B633C54A1A1D190B0059AC12 /* phone_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_icon@2x.png"; sourceTree = ""; }; B633C54B1A1D190B0059AC12 /* photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "photo@2x.png"; sourceTree = ""; }; B633C54C1A1D190B0059AC12 /* quit@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "quit@2x.png"; sourceTree = ""; }; B633C54D1A1D190B0059AC12 /* received.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = received.png; sourceTree = ""; }; B633C54E1A1D190B0059AC12 /* red-delete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "red-delete@2x.png"; sourceTree = ""; }; B633C54F1A1D190B0059AC12 /* reply.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = reply.png; sourceTree = ""; }; B633C5501A1D190B0059AC12 /* savephoto@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "savephoto@2x.png"; sourceTree = ""; }; - B633C5511A1D190B0059AC12 /* search_cancel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = search_cancel.png; sourceTree = ""; }; - B633C5521A1D190B0059AC12 /* search_cancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search_cancel@2x.png"; sourceTree = ""; }; - B633C5531A1D190B0059AC12 /* search_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = search_icon.png; sourceTree = ""; }; - B633C5541A1D190B0059AC12 /* search_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search_icon@2x.png"; sourceTree = ""; }; - B633C5551A1D190B0059AC12 /* send_code_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = send_code_icon.png; sourceTree = ""; }; - B633C5561A1D190B0059AC12 /* send_code_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "send_code_icon@2x.png"; sourceTree = ""; }; - B633C5571A1D190B0059AC12 /* settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = settings.png; sourceTree = ""; }; B633C5581A1D190B0059AC12 /* settings_dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "settings_dark@2x.png"; sourceTree = ""; }; B633C5591A1D190B0059AC12 /* share@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "share@2x.png"; sourceTree = ""; }; B633C55A1A1D190B0059AC12 /* shred@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shred@2x.png"; sourceTree = ""; }; B633C55E1A1D190B0059AC12 /* signal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "signal@2x.png"; sourceTree = ""; }; - B633C55F1A1D190B0059AC12 /* signals.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = signals.png; sourceTree = ""; }; - B633C5601A1D190B0059AC12 /* speaker_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = speaker_icon.png; sourceTree = ""; }; - B633C5611A1D190B0059AC12 /* speaker_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "speaker_icon@2x.png"; sourceTree = ""; }; - B633C5621A1D190B0059AC12 /* speaker_icon_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = speaker_icon_selected.png; sourceTree = ""; }; - B633C5631A1D190B0059AC12 /* speaker_icon_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "speaker_icon_selected@2x.png"; sourceTree = ""; }; B633C5641A1D190B0059AC12 /* speaker_off@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "speaker_off@2x.png"; sourceTree = ""; }; B633C5651A1D190B0059AC12 /* speaker_on@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "speaker_on@2x.png"; sourceTree = ""; }; - B633C5661A1D190B0059AC12 /* spinner_connecting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spinner_connecting.png; sourceTree = ""; }; - B633C5671A1D190B0059AC12 /* spinner_connecting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "spinner_connecting@2x.png"; sourceTree = ""; }; - B633C5681A1D190B0059AC12 /* spinner_connecting_flash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spinner_connecting_flash.png; sourceTree = ""; }; - B633C5691A1D190B0059AC12 /* spinner_connecting_flash@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "spinner_connecting_flash@2x.png"; sourceTree = ""; }; - B633C56A1A1D190B0059AC12 /* spinner_error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spinner_error.png; sourceTree = ""; }; - B633C56B1A1D190B0059AC12 /* spinner_error@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "spinner_error@2x.png"; sourceTree = ""; }; - B633C56C1A1D190B0059AC12 /* spinner_ringing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spinner_ringing.png; sourceTree = ""; }; - B633C56D1A1D190B0059AC12 /* spinner_ringing@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "spinner_ringing@2x.png"; sourceTree = ""; }; - B633C56E1A1D190B0059AC12 /* tab_icon_contacts.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tab_icon_contacts.png; sourceTree = ""; }; - B633C56F1A1D190B0059AC12 /* tab_icon_contacts@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tab_icon_contacts@2x.png"; sourceTree = ""; }; - B633C5701A1D190B0059AC12 /* tab_icon_favourites.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tab_icon_favourites.png; sourceTree = ""; }; - B633C5711A1D190B0059AC12 /* tab_icon_favourites@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tab_icon_favourites@2x.png"; sourceTree = ""; }; - B633C5721A1D190B0059AC12 /* tab_icon_inbox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tab_icon_inbox.png; sourceTree = ""; }; - B633C5731A1D190B0059AC12 /* tab_icon_inbox@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tab_icon_inbox@2x.png"; sourceTree = ""; }; - B633C5741A1D190B0059AC12 /* tab_icon_keypad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tab_icon_keypad.png; sourceTree = ""; }; - B633C5751A1D190B0059AC12 /* tab_icon_keypad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tab_icon_keypad@2x.png"; sourceTree = ""; }; - B633C5761A1D190B0059AC12 /* tab_icon_menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tab_icon_menu.png; sourceTree = ""; }; - B633C5771A1D190B0059AC12 /* tab_icon_menu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tab_icon_menu@2x.png"; sourceTree = ""; }; - B633C5781A1D190B0059AC12 /* trash_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trash_icon.png; sourceTree = ""; }; - B633C5791A1D190B0059AC12 /* trash_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "trash_icon@2x.png"; sourceTree = ""; }; - B633C57A1A1D190B0059AC12 /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_high.png; sourceTree = ""; }; - B633C57B1A1D190B0059AC12 /* volume_high@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "volume_high@2x.png"; sourceTree = ""; }; - B633C57C1A1D190B0059AC12 /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_low.png; sourceTree = ""; }; - B633C57D1A1D190B0059AC12 /* volume_low@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "volume_low@2x.png"; sourceTree = ""; }; - B633C57E1A1D190B0059AC12 /* whisper_notification_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = whisper_notification_icon.png; sourceTree = ""; }; - B633C57F1A1D190B0059AC12 /* whisper_notification_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "whisper_notification_icon@2x.png"; sourceTree = ""; }; B63761E119E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AFHTTPSessionManager+SignalMethods.h"; sourceTree = ""; }; B63761E219E1F487005735D1 /* AFHTTPSessionManager+SignalMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AFHTTPSessionManager+SignalMethods.m"; sourceTree = ""; }; B63761E419E1FBE8005735D1 /* HttpRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpRequest.h; sourceTree = ""; }; @@ -1168,14 +997,12 @@ B6B095F51A1D25ED008BFAA6 /* TSContactThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSContactThread.m; sourceTree = ""; }; B6B095F61A1D25ED008BFAA6 /* TSGroupThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSGroupThread.h; sourceTree = ""; }; B6B095F71A1D25ED008BFAA6 /* TSGroupThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSGroupThread.m; sourceTree = ""; }; - B6B095F81A1D25ED008BFAA6 /* TSContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSContact.h; sourceTree = ""; }; - B6B095F91A1D25ED008BFAA6 /* TSContact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSContact.m; sourceTree = ""; }; B6B095FA1A1D25ED008BFAA6 /* TSGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSGroup.h; sourceTree = ""; }; B6B095FB1A1D25ED008BFAA6 /* TSGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSGroup.m; sourceTree = ""; }; B6B095FC1A1D25ED008BFAA6 /* TSRecipient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSRecipient.h; sourceTree = ""; }; B6B095FD1A1D25ED008BFAA6 /* TSRecipient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSRecipient.m; sourceTree = ""; }; - B6B095FE1A1D25ED008BFAA6 /* TSThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSThread.h; sourceTree = ""; }; - B6B095FF1A1D25ED008BFAA6 /* TSThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSThread.m; sourceTree = ""; }; + B6B095FE1A1D25ED008BFAA6 /* TSThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSThread.h; path = ../TSThread.h; sourceTree = ""; }; + B6B095FF1A1D25ED008BFAA6 /* TSThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSThread.m; path = ../TSThread.m; sourceTree = ""; }; B6B096011A1D25ED008BFAA6 /* IncomingPushMessageSignal.pb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IncomingPushMessageSignal.pb.h; sourceTree = ""; }; B6B096021A1D25ED008BFAA6 /* IncomingPushMessageSignal.pb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IncomingPushMessageSignal.pb.m; sourceTree = ""; }; B6B096031A1D25ED008BFAA6 /* TSAttachement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSAttachement.h; sourceTree = ""; }; @@ -1349,6 +1176,10 @@ E1C407C117F0C246007BEE65 /* whisperReal.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = whisperReal.cer; sourceTree = ""; }; E1CD329418BCFF9900B1A496 /* SoundInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundInstance.h; sourceTree = ""; }; E1CD329518BCFF9900B1A496 /* SoundInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SoundInstance.m; sourceTree = ""; }; + FC15B7BE1A1F80F200F59801 /* defaultConctact_light@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "defaultConctact_light@2x.png"; sourceTree = ""; }; + FC1F90BF1A22342B004F8253 /* group_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "group_photo@2x.png"; sourceTree = ""; }; + FC1F90C41A223991004F8253 /* settings_tab@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "settings_tab@2x.png"; sourceTree = ""; }; + FC1F90C51A223991004F8253 /* signals_tab@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "signals_tab@2x.png"; sourceTree = ""; }; FC3196281A067D8F0094C78E /* MessageComposeTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageComposeTableViewController.h; sourceTree = ""; }; FC3196291A067D8F0094C78E /* MessageComposeTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageComposeTableViewController.m; sourceTree = ""; }; FC31962B1A06A2190094C78E /* FingerprintViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FingerprintViewController.h; sourceTree = ""; }; @@ -1558,6 +1389,7 @@ 76EB040318170B33006006FC /* contact */ = { isa = PBXGroup; children = ( + 76EB04A818170B33006006FC /* number directory */, 76EB040418170B33006006FC /* Contact.h */, 76EB040518170B33006006FC /* Contact.m */, 76EB040818170B33006006FC /* ContactsManager.h */, @@ -1847,7 +1679,6 @@ 76EB04A518170B33006006FC /* InitiateSignal.proto */, 76EB04A618170B33006006FC /* InitiatorSessionDescriptor.h */, 76EB04A718170B33006006FC /* InitiatorSessionDescriptor.m */, - 76EB04A818170B33006006FC /* number directory */, 76EB04AD18170B33006006FC /* ResponderSessionDescriptor.h */, 76EB04AE18170B33006006FC /* ResponderSessionDescriptor.m */, 76EB04AF18170B33006006FC /* SignalUtil.h */, @@ -1864,7 +1695,8 @@ 76EB04AB18170B33006006FC /* PhoneNumberDirectoryFilterManager.h */, 76EB04AC18170B33006006FC /* PhoneNumberDirectoryFilterManager.m */, ); - path = "number directory"; + name = "number directory"; + path = "../phone/signaling/number directory"; sourceTree = ""; }; 76EB04B118170B33006006FC /* profiling */ = { @@ -2255,127 +2087,44 @@ isa = PBXGroup; children = ( B633C4FE1A1D190B0059AC12 /* archive@2x.png */, - B633C4FF1A1D190B0059AC12 /* archive_icon.png */, - B633C5001A1D190B0059AC12 /* archive_icon@2x.png */, B633C5011A1D190B0059AC12 /* backspace.png */, B633C5021A1D190B0059AC12 /* backspace@2x.png */, B633C5031A1D190B0059AC12 /* blue-archive@2x.png */, B633C5041A1D190B0059AC12 /* call@2x.png */, B633C5051A1D190B0059AC12 /* call_dark@2x.png */, - B633C5061A1D190B0059AC12 /* checkbox_checkmark.png */, - B633C5071A1D190B0059AC12 /* checkbox_checkmark@2x.png */, - B633C5081A1D190B0059AC12 /* checkbox_empty.png */, - B633C5091A1D190B0059AC12 /* checkbox_empty@2x.png */, B633C50A1A1D190B0059AC12 /* checkmark.png */, B633C50B1A1D190B0059AC12 /* contact_default_feed.png */, - B633C50C1A1D190B0059AC12 /* contacts.png */, B633C50D1A1D190B0059AC12 /* contacts@2x.png */, - B633C50E1A1D190B0059AC12 /* contacts_arrow.png */, - B633C50F1A1D190B0059AC12 /* contacts_arrow@2x.png */, B633C5101A1D190B0059AC12 /* contacts_tab@2x.png */, B633C5141A1D190B0059AC12 /* DefaultContactImage.png */, + FC15B7BE1A1F80F200F59801 /* defaultConctact_light@2x.png */, B633C5151A1D190B0059AC12 /* delete@2x.png */, B633C5161A1D190B0059AC12 /* delete_history@2x.png */, - B633C5171A1D190B0059AC12 /* dismiss_notification_icon.png */, - B633C5181A1D190B0059AC12 /* dismiss_notification_icon@2x.png */, - B633C5191A1D190B0059AC12 /* drop_down_arrow_icon.png */, - B633C51A1A1D190B0059AC12 /* drop_down_arrow_icon@2x.png */, B633C51B1A1D190B0059AC12 /* endcall@2x.png */, - B633C51C1A1D190B0059AC12 /* expanded_cell_icon.png */, - B633C51D1A1D190B0059AC12 /* expanded_cell_icon@2x.png */, - B633C51E1A1D190B0059AC12 /* favourite.png */, - B633C51F1A1D190B0059AC12 /* favourite_false_icon.png */, - B633C5201A1D190B0059AC12 /* favourite_false_icon@2x.png */, - B633C5211A1D190B0059AC12 /* favourite_true_icon.png */, - B633C5221A1D190B0059AC12 /* favourite_true_icon@2x.png */, - B633C5231A1D190B0059AC12 /* forward_button.png */, - B633C5241A1D190B0059AC12 /* forward_button@2x.png */, - B633C5251A1D190B0059AC12 /* home_icon.png */, - B633C5261A1D190B0059AC12 /* icon_contacts.png */, - B633C5271A1D190B0059AC12 /* icon_favourites.png */, - B633C5281A1D190B0059AC12 /* icon_keypad.png */, - B633C5291A1D190B0059AC12 /* icon_recents.png */, - B633C52A1A1D190B0059AC12 /* in_call_phone_icon.png */, - B633C52B1A1D190B0059AC12 /* in_call_phone_icon@2x.png */, - B633C52C1A1D190B0059AC12 /* in_call_phrase_icon.png */, - B633C52D1A1D190B0059AC12 /* in_call_phrase_icon@2x.png */, - B633C52E1A1D190B0059AC12 /* incoming_call_icon.png */, - B633C52F1A1D190B0059AC12 /* incoming_call_icon@2x.png */, - B633C5301A1D190B0059AC12 /* info@2x.png */, + FC1F90BF1A22342B004F8253 /* group_photo@2x.png */, B633C5321A1D190B0059AC12 /* keypad@2x.png */, B633C5331A1D190B0059AC12 /* lock@2x.png */, B633C5341A1D190B0059AC12 /* lock_white@2x.png */, B633C5351A1D190B0059AC12 /* logo_intro@2x.png */, - B633C5371A1D190B0059AC12 /* menu_icon.png */, - B633C5381A1D190B0059AC12 /* menu_icon@2x.png */, B633C5391A1D190B0059AC12 /* message_bubble.png */, B633C53A1A1D190B0059AC12 /* message_bubble@2x.png */, - B633C53B1A1D190B0059AC12 /* message_icon.png */, B633C53C1A1D190B0059AC12 /* missed.png */, - B633C53D1A1D190B0059AC12 /* mute_icon.png */, - B633C53E1A1D190B0059AC12 /* mute_icon@2x.png */, - B633C53F1A1D190B0059AC12 /* mute_icon_selected.png */, - B633C5401A1D190B0059AC12 /* mute_icon_selected@2x.png */, B633C5411A1D190B0059AC12 /* mute_off@2x.png */, B633C5421A1D190B0059AC12 /* mute_on@2x.png */, - B633C5431A1D190B0059AC12 /* notification_detail_icon.png */, - B633C5441A1D190B0059AC12 /* notification_detail_icon@2x.png */, - B633C5451A1D190B0059AC12 /* notification_mini_icon.png */, - B633C5461A1D190B0059AC12 /* notification_mini_icon@2x.png */, - B633C5471A1D190B0059AC12 /* outgoing_call_icon.png */, - B633C5481A1D190B0059AC12 /* outgoing_call_icon@2x.png */, - B633C5491A1D190B0059AC12 /* phone_icon.png */, - B633C54A1A1D190B0059AC12 /* phone_icon@2x.png */, B633C54B1A1D190B0059AC12 /* photo@2x.png */, B633C54C1A1D190B0059AC12 /* quit@2x.png */, B633C54D1A1D190B0059AC12 /* received.png */, B633C54E1A1D190B0059AC12 /* red-delete@2x.png */, B633C54F1A1D190B0059AC12 /* reply.png */, B633C5501A1D190B0059AC12 /* savephoto@2x.png */, - B633C5511A1D190B0059AC12 /* search_cancel.png */, - B633C5521A1D190B0059AC12 /* search_cancel@2x.png */, - B633C5531A1D190B0059AC12 /* search_icon.png */, - B633C5541A1D190B0059AC12 /* search_icon@2x.png */, - B633C5551A1D190B0059AC12 /* send_code_icon.png */, - B633C5561A1D190B0059AC12 /* send_code_icon@2x.png */, - B633C5571A1D190B0059AC12 /* settings.png */, B633C5581A1D190B0059AC12 /* settings_dark@2x.png */, + FC1F90C41A223991004F8253 /* settings_tab@2x.png */, B633C5591A1D190B0059AC12 /* share@2x.png */, B633C55A1A1D190B0059AC12 /* shred@2x.png */, B633C55E1A1D190B0059AC12 /* signal@2x.png */, - B633C55F1A1D190B0059AC12 /* signals.png */, - B633C5601A1D190B0059AC12 /* speaker_icon.png */, - B633C5611A1D190B0059AC12 /* speaker_icon@2x.png */, - B633C5621A1D190B0059AC12 /* speaker_icon_selected.png */, - B633C5631A1D190B0059AC12 /* speaker_icon_selected@2x.png */, + FC1F90C51A223991004F8253 /* signals_tab@2x.png */, B633C5641A1D190B0059AC12 /* speaker_off@2x.png */, B633C5651A1D190B0059AC12 /* speaker_on@2x.png */, - B633C5661A1D190B0059AC12 /* spinner_connecting.png */, - B633C5671A1D190B0059AC12 /* spinner_connecting@2x.png */, - B633C5681A1D190B0059AC12 /* spinner_connecting_flash.png */, - B633C5691A1D190B0059AC12 /* spinner_connecting_flash@2x.png */, - B633C56A1A1D190B0059AC12 /* spinner_error.png */, - B633C56B1A1D190B0059AC12 /* spinner_error@2x.png */, - B633C56C1A1D190B0059AC12 /* spinner_ringing.png */, - B633C56D1A1D190B0059AC12 /* spinner_ringing@2x.png */, - B633C56E1A1D190B0059AC12 /* tab_icon_contacts.png */, - B633C56F1A1D190B0059AC12 /* tab_icon_contacts@2x.png */, - B633C5701A1D190B0059AC12 /* tab_icon_favourites.png */, - B633C5711A1D190B0059AC12 /* tab_icon_favourites@2x.png */, - B633C5721A1D190B0059AC12 /* tab_icon_inbox.png */, - B633C5731A1D190B0059AC12 /* tab_icon_inbox@2x.png */, - B633C5741A1D190B0059AC12 /* tab_icon_keypad.png */, - B633C5751A1D190B0059AC12 /* tab_icon_keypad@2x.png */, - B633C5761A1D190B0059AC12 /* tab_icon_menu.png */, - B633C5771A1D190B0059AC12 /* tab_icon_menu@2x.png */, - B633C5781A1D190B0059AC12 /* trash_icon.png */, - B633C5791A1D190B0059AC12 /* trash_icon@2x.png */, - B633C57A1A1D190B0059AC12 /* volume_high.png */, - B633C57B1A1D190B0059AC12 /* volume_high@2x.png */, - B633C57C1A1D190B0059AC12 /* volume_low.png */, - B633C57D1A1D190B0059AC12 /* volume_low@2x.png */, - B633C57E1A1D190B0059AC12 /* whisper_notification_icon.png */, - B633C57F1A1D190B0059AC12 /* whisper_notification_icon@2x.png */, ); path = Images; sourceTree = ""; @@ -2855,14 +2604,10 @@ isa = PBXGroup; children = ( B6B095F31A1D25ED008BFAA6 /* Threads */, - B6B095F81A1D25ED008BFAA6 /* TSContact.h */, - B6B095F91A1D25ED008BFAA6 /* TSContact.m */, B6B095FA1A1D25ED008BFAA6 /* TSGroup.h */, B6B095FB1A1D25ED008BFAA6 /* TSGroup.m */, B6B095FC1A1D25ED008BFAA6 /* TSRecipient.h */, B6B095FD1A1D25ED008BFAA6 /* TSRecipient.m */, - B6B095FE1A1D25ED008BFAA6 /* TSThread.h */, - B6B095FF1A1D25ED008BFAA6 /* TSThread.m */, ); path = Contacts; sourceTree = ""; @@ -2874,6 +2619,8 @@ B6B095F51A1D25ED008BFAA6 /* TSContactThread.m */, B6B095F61A1D25ED008BFAA6 /* TSGroupThread.h */, B6B095F71A1D25ED008BFAA6 /* TSGroupThread.m */, + B6B095FE1A1D25ED008BFAA6 /* TSThread.h */, + B6B095FF1A1D25ED008BFAA6 /* TSThread.m */, ); path = Threads; sourceTree = ""; @@ -3353,7 +3100,7 @@ ORGANIZATIONNAME = "Open Whisper Systems"; TargetAttributes = { D221A088169C9E5E00537ABF = { - DevelopmentTeam = U68MSDN6DR; + DevelopmentTeam = DRXTS3ZU8M; SystemCapabilities = { com.apple.DataProtection = { enabled = 1; @@ -3467,154 +3214,71 @@ files = ( E148750018A06966002CC4F3 /* CallAudioManagerDemo.xib in Resources */, B633C5DC1A1D190B0059AC12 /* shred@2x.png in Resources */, - B633C5E91A1D190B0059AC12 /* spinner_connecting_flash.png in Resources */, B633C5E61A1D190B0059AC12 /* speaker_on@2x.png in Resources */, B633C5BB1A1D190B0059AC12 /* message_bubble.png in Resources */, B633C5B51A1D190B0059AC12 /* lock@2x.png in Resources */, - B633C58E1A1D190B0059AC12 /* contacts.png in Resources */, - B633C5A41A1D190B0059AC12 /* favourite_true_icon@2x.png in Resources */, + FC1F90C01A22342B004F8253 /* group_photo@2x.png in Resources */, E148750518A06966002CC4F3 /* CountryCodeViewController.xib in Resources */, B633C5C41A1D190B0059AC12 /* mute_on@2x.png in Resources */, - B633C5F41A1D190B0059AC12 /* tab_icon_inbox@2x.png in Resources */, E148750618A06966002CC4F3 /* DialerViewController.xib in Resources */, B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */, E148750A18A06966002CC4F3 /* InCallViewController.xib in Resources */, - B633C5E71A1D190B0059AC12 /* spinner_connecting.png in Resources */, B633C5D01A1D190B0059AC12 /* red-delete@2x.png in Resources */, B633C59D1A1D190B0059AC12 /* endcall@2x.png in Resources */, - B633C5C91A1D190B0059AC12 /* outgoing_call_icon.png in Resources */, - B633C5EA1A1D190B0059AC12 /* spinner_connecting_flash@2x.png in Resources */, - B633C5E31A1D190B0059AC12 /* speaker_icon_selected.png in Resources */, - B633C5B01A1D190B0059AC12 /* incoming_call_icon.png in Resources */, B633C5CF1A1D190B0059AC12 /* received.png in Resources */, - B633C5AD1A1D190B0059AC12 /* in_call_phone_icon@2x.png in Resources */, - B633C5FA1A1D190B0059AC12 /* trash_icon@2x.png in Resources */, - B633C5C11A1D190B0059AC12 /* mute_icon_selected.png in Resources */, - B633C5AA1A1D190B0059AC12 /* icon_keypad.png in Resources */, B633C5B41A1D190B0059AC12 /* keypad@2x.png in Resources */, - B633C5FD1A1D190B0059AC12 /* volume_low.png in Resources */, B633C5DA1A1D190B0059AC12 /* settings_dark@2x.png in Resources */, E14874F818A06951002CC4F3 /* ContactTableViewCell.xib in Resources */, B633C5BC1A1D190B0059AC12 /* message_bubble@2x.png in Resources */, - B633C5EF1A1D190B0059AC12 /* tab_icon_contacts.png in Resources */, B633C5D11A1D190B0059AC12 /* reply.png in Resources */, - B633C5EE1A1D190B0059AC12 /* spinner_ringing@2x.png in Resources */, - B633C6001A1D190B0059AC12 /* whisper_notification_icon@2x.png in Resources */, + FC15B7BF1A1F80F200F59801 /* defaultConctact_light@2x.png in Resources */, E14874F918A06951002CC4F3 /* CountryCodeTableViewCell.xib in Resources */, - B633C5BF1A1D190B0059AC12 /* mute_icon.png in Resources */, - B633C5ED1A1D190B0059AC12 /* spinner_ringing.png in Resources */, - B633C5911A1D190B0059AC12 /* contacts_arrow@2x.png in Resources */, B633C5871A1D190B0059AC12 /* call_dark@2x.png in Resources */, - B633C5FC1A1D190B0059AC12 /* volume_high@2x.png in Resources */, B633C5BE1A1D190B0059AC12 /* missed.png in Resources */, - B633C5AC1A1D190B0059AC12 /* in_call_phone_icon.png in Resources */, B633C5851A1D190B0059AC12 /* blue-archive@2x.png in Resources */, - B633C5BD1A1D190B0059AC12 /* message_icon.png in Resources */, - B633C5AF1A1D190B0059AC12 /* in_call_phrase_icon@2x.png in Resources */, B633C5D21A1D190B0059AC12 /* savephoto@2x.png in Resources */, - B633C5D41A1D190B0059AC12 /* search_cancel@2x.png in Resources */, - B633C5A51A1D190B0059AC12 /* forward_button.png in Resources */, - B633C5F11A1D190B0059AC12 /* tab_icon_favourites.png in Resources */, - B633C5D81A1D190B0059AC12 /* send_code_icon@2x.png in Resources */, - B633C5CC1A1D190B0059AC12 /* phone_icon@2x.png in Resources */, B633C58C1A1D190B0059AC12 /* checkmark.png in Resources */, B633C5921A1D190B0059AC12 /* contacts_tab@2x.png in Resources */, - B633C5AE1A1D190B0059AC12 /* in_call_phrase_icon.png in Resources */, - B633C5D51A1D190B0059AC12 /* search_icon.png in Resources */, - B633C5811A1D190B0059AC12 /* archive_icon.png in Resources */, B6416FB8199A0478003C5699 /* Localizable.strings in Resources */, - B633C5F81A1D190B0059AC12 /* tab_icon_menu@2x.png in Resources */, - B633C5D91A1D190B0059AC12 /* settings.png in Resources */, - B633C5FB1A1D190B0059AC12 /* volume_high.png in Resources */, B633C5971A1D190B0059AC12 /* delete@2x.png in Resources */, FCAC964119FEF99A0046DFC5 /* InboxTableViewCell.xib in Resources */, - B633C5E21A1D190B0059AC12 /* speaker_icon@2x.png in Resources */, - B633C5A91A1D190B0059AC12 /* icon_favourites.png in Resources */, B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */, - B633C58B1A1D190B0059AC12 /* checkbox_empty@2x.png in Resources */, 70B8FEE21909FE360042E3F0 /* 171756__nenadsimic__picked-coin-echo-2.wav in Resources */, - B633C5881A1D190B0059AC12 /* checkbox_checkmark.png in Resources */, - B633C5E81A1D190B0059AC12 /* spinner_connecting@2x.png in Resources */, - B633C59B1A1D190B0059AC12 /* drop_down_arrow_icon.png in Resources */, - B633C5F71A1D190B0059AC12 /* tab_icon_menu.png in Resources */, - B633C5B91A1D190B0059AC12 /* menu_icon.png in Resources */, - B633C5E41A1D190B0059AC12 /* speaker_icon_selected@2x.png in Resources */, B633C5801A1D190B0059AC12 /* archive@2x.png in Resources */, E1370BEA18A0689000826894 /* AppIcon29x29.jpg in Resources */, E1370BEB18A0689000826894 /* AppIcon29x29.png in Resources */, - B633C5E11A1D190B0059AC12 /* speaker_icon.png in Resources */, - B633C5A31A1D190B0059AC12 /* favourite_true_icon.png in Resources */, E1370BEC18A0689000826894 /* AppIcon29x29@2x.png in Resources */, - B633C5991A1D190B0059AC12 /* dismiss_notification_icon.png in Resources */, - B633C5F61A1D190B0059AC12 /* tab_icon_keypad@2x.png in Resources */, - B633C5F91A1D190B0059AC12 /* trash_icon.png in Resources */, + FC1F90C71A223991004F8253 /* signals_tab@2x.png in Resources */, E1370BED18A0689000826894 /* AppIcon40x40.png in Resources */, B633C5C31A1D190B0059AC12 /* mute_off@2x.png in Resources */, + FC1F90C61A223991004F8253 /* settings_tab@2x.png in Resources */, E1370BEE18A0689000826894 /* AppIcon40x40@2x.png in Resources */, - B633C5FE1A1D190B0059AC12 /* volume_low@2x.png in Resources */, - B633C58A1A1D190B0059AC12 /* checkbox_empty.png in Resources */, - B633C59C1A1D190B0059AC12 /* drop_down_arrow_icon@2x.png in Resources */, - B633C5E01A1D190B0059AC12 /* signals.png in Resources */, E1370BEF18A0689000826894 /* AppIcon60x60.png in Resources */, - B633C5FF1A1D190B0059AC12 /* whisper_notification_icon.png in Resources */, - B633C5901A1D190B0059AC12 /* contacts_arrow.png in Resources */, - B633C5BA1A1D190B0059AC12 /* menu_icon@2x.png in Resources */, E1370BF018A0689000826894 /* AppIcon60x60@2x.png in Resources */, - B633C5D71A1D190B0059AC12 /* send_code_icon.png in Resources */, - B633C59A1A1D190B0059AC12 /* dismiss_notification_icon@2x.png in Resources */, - B633C5821A1D190B0059AC12 /* archive_icon@2x.png in Resources */, - B633C5D31A1D190B0059AC12 /* search_cancel.png in Resources */, E1370BF118A0689000826894 /* AppIcon76x76.png in Resources */, E1370BF218A0689000826894 /* AppIcon76x76@2x.png in Resources */, - B633C5F31A1D190B0059AC12 /* tab_icon_inbox.png in Resources */, B633C5B61A1D190B0059AC12 /* lock_white@2x.png in Resources */, B633C5DF1A1D190B0059AC12 /* signal@2x.png in Resources */, - B633C5CA1A1D190B0059AC12 /* outgoing_call_icon@2x.png in Resources */, - B633C5A11A1D190B0059AC12 /* favourite_false_icon.png in Resources */, - B633C5F01A1D190B0059AC12 /* tab_icon_contacts@2x.png in Resources */, B633C5831A1D190B0059AC12 /* backspace.png in Resources */, E1370BE018A0686600826894 /* busy.mp3 in Resources */, - B633C5A01A1D190B0059AC12 /* favourite.png in Resources */, E1370BE118A0686C00826894 /* completed.mp3 in Resources */, - B633C5EB1A1D190B0059AC12 /* spinner_error.png in Resources */, E1370BE218A0686C00826894 /* failure.mp3 in Resources */, - B633C5C61A1D190B0059AC12 /* notification_detail_icon@2x.png in Resources */, - B633C5F51A1D190B0059AC12 /* tab_icon_keypad.png in Resources */, - B633C59F1A1D190B0059AC12 /* expanded_cell_icon@2x.png in Resources */, - B633C5D61A1D190B0059AC12 /* search_icon@2x.png in Resources */, B633C5DB1A1D190B0059AC12 /* share@2x.png in Resources */, E1370BE318A0686C00826894 /* handshake.mp3 in Resources */, B633C58D1A1D190B0059AC12 /* contact_default_feed.png in Resources */, - B633C5C21A1D190B0059AC12 /* mute_icon_selected@2x.png in Resources */, - B633C5A71A1D190B0059AC12 /* home_icon.png in Resources */, - B633C5B11A1D190B0059AC12 /* incoming_call_icon@2x.png in Resources */, - B633C5B21A1D190B0059AC12 /* info@2x.png in Resources */, - B633C5AB1A1D190B0059AC12 /* icon_recents.png in Resources */, B633C5CD1A1D190B0059AC12 /* photo@2x.png in Resources */, - B633C59E1A1D190B0059AC12 /* expanded_cell_icon.png in Resources */, - B633C5C51A1D190B0059AC12 /* notification_detail_icon.png in Resources */, - B633C5A81A1D190B0059AC12 /* icon_contacts.png in Resources */, B633C5861A1D190B0059AC12 /* call@2x.png in Resources */, - B633C5C71A1D190B0059AC12 /* notification_mini_icon.png in Resources */, FCAC963519FEF4E20046DFC5 /* Storyboard.storyboard in Resources */, B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */, E1370BE418A0686C00826894 /* outring.mp3 in Resources */, B633C5841A1D190B0059AC12 /* backspace@2x.png in Resources */, - B633C5CB1A1D190B0059AC12 /* phone_icon.png in Resources */, - B633C5A21A1D190B0059AC12 /* favourite_false_icon@2x.png in Resources */, - B633C5EC1A1D190B0059AC12 /* spinner_error@2x.png in Resources */, - B633C5F21A1D190B0059AC12 /* tab_icon_favourites@2x.png in Resources */, B633C5B71A1D190B0059AC12 /* logo_intro@2x.png in Resources */, E1370BE518A0686C00826894 /* r.caf in Resources */, - B633C5C81A1D190B0059AC12 /* notification_mini_icon@2x.png in Resources */, B633C5981A1D190B0059AC12 /* delete_history@2x.png in Resources */, B633C5E51A1D190B0059AC12 /* speaker_off@2x.png in Resources */, - B633C5891A1D190B0059AC12 /* checkbox_checkmark@2x.png in Resources */, B633C58F1A1D190B0059AC12 /* contacts@2x.png in Resources */, - B633C5C01A1D190B0059AC12 /* mute_icon@2x.png in Resources */, E1370BE618A0686C00826894 /* sonarping.mp3 in Resources */, B633C5961A1D190B0059AC12 /* DefaultContactImage.png in Resources */, - B633C5A61A1D190B0059AC12 /* forward_button@2x.png in Resources */, E148751218A06AFD002CC4F3 /* HelveticaNeueLTStd-Bd.otf in Resources */, E148751318A06AFD002CC4F3 /* HelveticaNeueLTStd-Th.otf in Resources */, E148751418A06AFD002CC4F3 /* HelveticaNeueLTStd-Lt.otf in Resources */, @@ -3940,7 +3604,6 @@ E197B61318BBEC1A00F073E5 /* DesiredBufferDepthController.m in Sources */, 76EB064818170B33006006FC /* Zid.m in Sources */, B6B096741A1D25ED008BFAA6 /* TSMessagesManager.m in Sources */, - B6B096661A1D25ED008BFAA6 /* TSContact.m in Sources */, 76EB05E218170B33006006FC /* SecureEndPoint.m in Sources */, B63AF5CC1A1F757900D01AAD /* TSRegisterWithTokenRequest.m in Sources */, 76EB05DE18170B33006006FC /* Certificate.m in Sources */, @@ -4514,6 +4177,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fobjc-arc-exceptions"; + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -4565,7 +4229,7 @@ LLVM_LTO = NO; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Signal; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; TEST_AFTER_BUILD = YES; @@ -4684,6 +4348,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-fobjc-arc-exceptions"; + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -4748,6 +4413,7 @@ "-DNS_BLOCK_ASSERTIONS=1", "-fobjc-arc-exceptions", ); + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -4798,7 +4464,7 @@ LLVM_LTO = NO; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Signal; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; TEST_AFTER_BUILD = YES; @@ -4852,7 +4518,7 @@ LLVM_LTO = NO; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_NAME = Signal; - PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE = "87a69a1c-864f-4e05-8d48-b9268ace6179"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; TEST_AFTER_BUILD = YES; diff --git a/Signal.xcworkspace/xcshareddata/Signal.xccheckout b/Signal.xcworkspace/xcshareddata/Signal.xccheckout index d6725997c..711f5d132 100644 --- a/Signal.xcworkspace/xcshareddata/Signal.xccheckout +++ b/Signal.xcworkspace/xcshareddata/Signal.xccheckout @@ -5,15 +5,13 @@ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier - 90A05A58-76B3-4EF9-A59F-88109694A394 + DA00CCAC-808E-4CDA-A72F-CB8431C155C0 IDESourceControlProjectName Signal IDESourceControlProjectOriginsDictionary 5D79A077E31B3FE97A3C6613CBFFDD71C314D14C - github.com:WhisperSystems/Signal-iOS.git - D74FB800F048CB516BB4BC70047F7CC676D291B9 - https://github.com/FredericJacobs/Precompiled-Signal-Dependencies.git + https://github.com/WhisperSystems/Signal-iOS IDESourceControlProjectPath Signal.xcworkspace @@ -21,11 +19,9 @@ 5D79A077E31B3FE97A3C6613CBFFDD71C314D14C .. - D74FB800F048CB516BB4BC70047F7CC676D291B9 - ..Pods IDESourceControlProjectURL - github.com:WhisperSystems/Signal-iOS.git + https://github.com/WhisperSystems/Signal-iOS IDESourceControlProjectVersion 111 IDESourceControlProjectWCCIdentifier @@ -40,14 +36,6 @@ IDESourceControlWCCName Signal-iOS - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - D74FB800F048CB516BB4BC70047F7CC676D291B9 - IDESourceControlWCCName - Signal-iOSPods - diff --git a/Signal/Images.xcassets/LaunchImage.launchimage/Contents.json b/Signal/Images.xcassets/LaunchImage.launchimage/Contents.json index 2b2d82242..cd2e2b82f 100644 --- a/Signal/Images.xcassets/LaunchImage.launchimage/Contents.json +++ b/Signal/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -18,11 +18,12 @@ "scale" : "3x" }, { - "orientation" : "portrait", - "idiom" : "iphone", "extent" : "full-screen", - "minimum-system-version" : "8.0", + "idiom" : "iphone", "subtype" : "667h", + "filename" : "Default-6.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", "scale" : "2x" }, { diff --git a/Signal/Images.xcassets/LaunchImage.launchimage/Default-6.png b/Signal/Images.xcassets/LaunchImage.launchimage/Default-6.png new file mode 100644 index 0000000000000000000000000000000000000000..efc1cc250f1773d9fdb86f9c416f45589c5cd391 GIT binary patch literal 24289 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 diff --git a/Signal/Images/archive_icon@2x.png b/Signal/Images/archive_icon@2x.png deleted file mode 100644 index 9354084c0cea0f7202e8eb67315753942a107ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmV;PIq%kLw(Oui8;&jTFFR z7I`De%V*59pDr*yj*;IQp>qNrwG{e`8~6&nUjXnvJUM}vRCWErO_XZWO}1pA;ZeFE z)`Mqq4@cI|k36`hhyR=3h&=5BqX7P`_99QjTfid`F#I*Vk+p~Ngxi|HCPkH}2!Zda zJV{i@KdUlj=h71Z>$}F*_F%f$u7<%)n{79q<=lgFtQ$RH%5s+XI#biF&!=DOCV**k v)=2{_yW6d7?-5tHu`Of&EpogY{}EsSKBRxHi-P(200000NkvXXu0mjfuxsGL diff --git a/Signal/Images/checkbox_checkmark.png b/Signal/Images/checkbox_checkmark.png deleted file mode 100644 index 9bef98230c1ba54b7adeafffb76de77d93ef4ed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3512 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 diff --git a/Signal/Images/checkbox_empty.png b/Signal/Images/checkbox_empty.png deleted file mode 100644 index 25f7a1b25d2ef4c3922bd454905722f412c08f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2909 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 Hu0mjf{( zJaZG%Q-e|yQz{EjrrH1%ef4y445_&F=Eg?eLk0q@0qT(rlP0k?89BKvU=36eo-iro z09#_y5{H1zjLH!Qm~tFAW&a;>U9wroqceN&)%;n0`(P-HA{r1~3BGn@3CXt9j%n+Z^*RW$JRbm bKERNf<@Vvk_iIAH0ATQR^>bP0l+XkK#gd7S diff --git a/Signal/Images/contacts.png b/Signal/Images/contacts.png deleted file mode 100644 index a4c3deeb115e14013ff1f80798de73f0c99c68a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 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 Pvl1Nbo$c=1_$B=pmOcv9 diff --git a/Signal/Images/defaultConctact_light@2x.png b/Signal/Images/defaultConctact_light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a8aec6d4ee6f8455983f0f7ae2a4438c64efe05f GIT binary patch literal 16894 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

?<7UF}!qP*uJr=w@4G`SxI6@Nh6M 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 JPDHLkV1ljnk8l70 literal 0 HcmV?d00001 diff --git a/Signal/Images/dismiss_notification_icon.png b/Signal/Images/dismiss_notification_icon.png deleted file mode 100644 index 927932310ea04a49250d7a7d9dfbfdb134faeae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3287 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 VA_eQQss#W5002ovPDHLkV1fl{BGmu@ diff --git a/Signal/Images/dismiss_notification_icon@2x.png b/Signal/Images/dismiss_notification_icon@2x.png deleted file mode 100644 index 44a041d1ea3a30eb76ef359b2967c5fcaf34cf0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmV;<0x|uGP)OvAT$2ps= z&gHYd0IF%WunIRRg#3Tg|>QhO@h9`Kz7X1?52DiEta`yz2}vscg;X^%Fv!l9ciGg)bSR{%)zMkD zlOq8msmTBok^V+mlY6gsf#3UK!yr9vOw6g*GA0Z^A3NL1J`89+icfNH1srm%*P|DH@FVIT|`wr1N2X$-0h z8y7MbXt!kys7O@b*dEI@1Bi1?VWRZE`pZG%MMP){%oxt6S8v<(u`9km-6 zz&e&JvqY-=a!o!KDO(r%LZ3vPTk>8~jq*g6gVc<=Pe#F_FJk6Y_5OP3kkSJAqaQYG zGY^8*$VGqIl5!O>E;{Vrlt_>&EZUeBBmDPzN9QKmVcpBxD^u@Gi7P<3f9}$~ligC8 zPI8efQDw(O6><|*8c)>AhQ4@xlS;}9u^#~j0My@>60ukzJ^%m!07*qoM6N<$g2AXn AQUCw| diff --git a/Signal/Images/drop_down_arrow_icon.png b/Signal/Images/drop_down_arrow_icon.png deleted file mode 100644 index 4552d778e137f01e71fcd2185bd9d9b8dd046508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2908 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 WbPy+D*=7X*0000%8P8zE<+AJ2N)U> W)P$dk3h@Bl!{F)a=d#Wzp$P!)l1nK7 diff --git a/Signal/Images/favourite.png b/Signal/Images/favourite.png deleted file mode 100644 index 4e2e31def0368314d14ae53a263dfa85309217d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6566 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 Y0n=-nX1^@s6FWx?200009a7bBm000XU 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 diff --git a/Signal/Images/favourite_true_icon.png b/Signal/Images/favourite_true_icon.png deleted file mode 100644 index 4e410f5bb71f835a88c95758f7ddaa473ae7924d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3188 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 Ef>?6LXaE2J diff --git a/Signal/Images/group_photo@2x.png b/Signal/Images/group_photo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd7c0562d96e3d72bf61becd3457630aead45af GIT binary patch literal 8346 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 literal 0 HcmV?d00001 diff --git a/Signal/Images/home_icon.png b/Signal/Images/home_icon.png deleted file mode 100644 index a349f3afcd0bb26db9875ebe4d5b43c6885cca7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5332 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

|{m?dcB@0EiL`m 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 diff --git a/Signal/Images/icon_recents.png b/Signal/Images/icon_recents.png deleted file mode 100644 index 710466a0333ef9da79562f09fb834de871d7cc21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6764 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 v=_4)czd*NDSs;?00000NkvXXu0mjf3mB99 diff --git a/Signal/Images/in_call_phone_icon@2x.png b/Signal/Images/in_call_phone_icon@2x.png deleted file mode 100644 index 157c4ed8a758806c731adf84243fc4bb177c7295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^(m-s$!3HEB>}Om6q&N#aB8wRqxP?KOkzv*x380{4 ziEBhjaDG}zd16s2gJVj5QmTSyZen_BP-kKQh6m1KM8I4^r%&R=iI;4X=W zC#&Lmn*u+bird(xzkgQLBkO7MS<-uZ4m2<_v++n6B!C#-;v;U%pSo`Pr3|+F8_t;L z#vkdu9<#gW5?B5XXWf+Yol>#}g|+|y diff --git a/Signal/Images/in_call_phrase_icon.png b/Signal/Images/in_call_phrase_icon.png deleted file mode 100644 index ed4020da42419e4c390aa5dad93d5536511c2553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3420 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 B2q*vm diff --git a/Signal/Images/incoming_call_icon@2x.png b/Signal/Images/incoming_call_icon@2x.png deleted file mode 100644 index 339af1f34c4491c3b69d02f4e9433acdbee707bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 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 F`G5H|D|`R| diff --git a/Signal/Images/menu_icon.png b/Signal/Images/menu_icon.png deleted file mode 100644 index cce32b4a053ad70486bc14c9028f0c834846a884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2957 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 D*Oqr& diff --git a/Signal/Images/menu_icon@2x.png b/Signal/Images/menu_icon@2x.png deleted file mode 100644 index 6d3448a674f1e50a9f3b63e9db1a57b1982adb68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 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 UPPxGgi~s-t07*qoM6N<$f?`Kt-v9sr diff --git a/Signal/Images/mute_icon.png b/Signal/Images/mute_icon.png deleted file mode 100644 index 93dc1870e101309a2eb628b97f689bd749e12076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2889 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 diff --git a/Signal/Images/mute_icon@2x.png b/Signal/Images/mute_icon@2x.png deleted file mode 100644 index d62812ab1d938c9725b4c544e6ae5356c21bf948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xd_7$pLn>~)xnRh3K!L|0@Np{l(&K^)mtWnwcxkul`+P=W zxoJwCJG-A>_+@)fC;qvh_WONz*6#kVfD9hYZ=5t`ujT;;J$?>@ySMgl0~*ZW>FVdQ I&MBb@0KF7Dj{pDw diff --git a/Signal/Images/mute_icon_selected.png b/Signal/Images/mute_icon_selected.png deleted file mode 100644 index 684da52790737ebb5618f157fa0ae97b31b3a3ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2889 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 diff --git a/Signal/Images/mute_icon_selected@2x.png b/Signal/Images/mute_icon_selected@2x.png deleted file mode 100644 index 1f02616aca51144bec3bee4ebb4b140e5566a52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2877 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 diff --git a/Signal/Images/notification_mini_icon.png b/Signal/Images/notification_mini_icon.png deleted file mode 100644 index 4262352e54e993961dc1f71f7844aaa39750957f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3742 zcmV;P4q@?$P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000BYNklu z!f5_p?~}dM-mcQKxlHz`LwXEi1W>e4Vm;D5Q!xE)o5^n)_@Ws1wsWgBB`lp)R}_`hy`+k?Kg;p*3k~5yT)n$)r?)5&nNuJ+t`w+ zprS~$drDMxE!j87!gu-zjYz7eIXUl;0uHj}jxZ7#*?xn`-zMwP`gNju2?WWr9`J0< zC?8(>*Bg`HAD2#Z7|2ip?;|92|I~f5qVE{lu|| zw(bM|Z^AT@$W}P=Co)=Jw;%H{oJ)@L)~0N0xl;LH>HbHs%Pes$-5-3mNmD65ofC%> z&C{(#f*vy)BW+Gpk zQ+~GW1YS0-I{clZfwno9W-cHnGb0M$-yqM7@U}yPa`um zJueO*2$IiShl#DIX+jYwjTus*^QkkC=Vg+p}@p2#%uNY4_);ZNh ztUUZ9D@auc!-3A}Ziu9xO(Gp>{4`CxkuZJcp;Nd%OZ!-t=GE4(0w;_JN2bqBot*lv ziR-ryo+5$mH-xcB{i_Kg;Y-cAW{eXe;p4GS#wjj(vXyRjJHKbRR0LbI)IV*|INLaG zM1HU;ScgM|zl-T^Up&S7>T6Z(kR?r~nd_2!fLDcVv14-oG$S94)C0w<)<_*yY}7#1 zKq4INT=tL06X~hSh6<%s8LFUO?`kAYa6=YbHB9W8;_Ca?W0R?k34it$*UoMv3O^QC zI*Z!h7th(;kgv&bLm8%K5H|yqieMHP+#-wg7`nfEM&G^3=-#pM4(;_y{9|^d%pLm9 z5WQ@1xV_aiy{r3P@1yig3A@Z-Zw>t$34bZj`lUtV@D!a^XP>d`PLlp_=-;`vNKj(b zZHnwD;WpT6Heh;Dq_W%F@07*qo IM6N<$f`&f`{Qv*} diff --git a/Signal/Images/notification_mini_icon@2x.png b/Signal/Images/notification_mini_icon@2x.png deleted file mode 100644 index 840554e237ae60456fa5ab414b56776722541c68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 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 diff --git a/Signal/Images/outgoing_call_icon@2x.png b/Signal/Images/outgoing_call_icon@2x.png deleted file mode 100755 index b2610a8d61d8a736fbdf57f2ee94fc1c568a5dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3326 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 IM6N<$g2rGlMgRZ+ diff --git a/Signal/Images/phone_icon.png b/Signal/Images/phone_icon.png deleted file mode 100644 index d0230b886fab98033ed59d4f6583f29028bb25c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2346 zcmaJ@3p7;g9-op-Ng>Lkv<)i6yqdvea+rtI4Dvcin8zL_X7-pF8LDF%)L^DKr3gJ# zPDVpX9XfelbWa_v)IGfr>V`t{I9-?M%v3t}u64V6?Y+P6|6l*#@Bdui`ZE1}y$zOH zEQP^f20q)!0h-lI`@t7${x5@IgPO%$ObHbSLL6}tLkPk=*$@*1e0Yo)FaTt*lM{Xg z-C-~tTW(OOIFwE!uppi@Lu=zK;R!To7|h*6B4DuMKrz4sW4L@GV)T~=1i)nz5#QtJ zD7t_I#&Wl%2*JP<-yl{>9LtT3@Yo8tO9&bQ9w=r25?(xCM34{>pLhwHy;hAx0G~|6 zaYV%DphD^X00|O;0L~ff#6qFb03Pp*-i*WJ(VGAa3XMUcG%wx>y_tZ+6EH5omj|Ko zCS-F60c7eIUmA&sh!u+k1SB#kDaknr>kJ8FkZ3nIH!TMSd_c>{U_yyvB0>}C=M;E?ue5y8mojMzhLkV_NVGFbo6@`?o&Nt#dAzUI zB5?rtSG@m|SQL~j0FeQp2uc*PG>zlfXk7^iBq7KUL&6{kil48de=H=1M6r+nAO+%q zjdTW!%hxLGKOyLJf)8ILX7E{{51EM2a5!_hYyuVS;)TQFFeD0|ibhkgZX{O}l|-SC zsGG@~F&MXbEE!@Y@<6_L9?Sj~F_{{w5Zw2?nWc?SHg-UZt5I?e^>7YJ{(&5ArqhF4PS6Rh(TB45nM;L-q`kJR1&A zR_qR3Gq;u%VDiweq|-kyyhKTU81(Vdo-`FL`-W$S#VMNIML0rzamRMbag)r)O8;iV zBQ(z{Pi%b_b-zrI)Mkitt@|rsTt`%@Yfe>`=t_IGp3wmJxBF&{c6xq; zQT~y!;S1Zyezy$ErnWSnN|lyNJ<1&5)he@`MBP0KmS+nzy|KuOh8@vPx2s`oc(?Xp^~S}zQ+l@!VmMlH_W8r?woWPll zHLlxhO1XG#|ueB`SWZZCQ=i#xc3r0;hOrC&Pn%_O=7mNR;^B5Mj zhlWOS$sf+?T2KodJJ#jhzI);KjNtOJ-a+r+yj?$%7j?!p-@#=gsa9}7MkgaGw7*CB zZ?RgR^gM0nCeq~Ag!NvREpg+f({ACd4y){Lz*a6O?bnBKO1(`oBLaZRR!#-tjBah; z+x0SsW+tyZ@mTfhVrIH8&oMGL1}Nll?!1KMV#gzrDnhQ;!%iDpS)0X)2U_yr_|m5a z;jJl6Tg78-!jBoih}+}<^Ksa4-P%h#xdekyras{`aZA}x%DyDSnf#kCSTD9M`kkRx zI=Yup8kWyWrKaxswZ=8Mwb|#CjPB-Mi@D6F9gV!Hxw?C)=B|1Zq04JRc8^~f->^Fc z9+3`@DkmnJ5$l$$n__nHlbW#dBer|sZPhp|W^c+`0rzxpT}x#NR@Ghp;DHJ5HQ~uH zHePljV3yxBQYw=dFCbsIef^E~Vpg}q5CengTw~)je)h-!tL?#*QQxsKc@{CP!u}0f zW~Y+oIsw6x2)~6oVKxhll--cc_^t!gGaI<~(60@ic{03kAaVRSafB8l*ina1) z79bn(2sWKN_Un$u*j{>XaPGznp#kL`mhzVz@P~mK9N6b z>PNn*gq4=3FKeHw3$A=Z^0`U+AiH9lC$IL7UbVy2Ot(n)AF6POIjGzy@~#I#YXrCb jzt6$X$KvtoS!5$@==KoNY~iJM+S`i{#g|;+6)pP{z&y^* diff --git a/Signal/Images/phone_icon@2x.png b/Signal/Images/phone_icon@2x.png deleted file mode 100644 index 90f5f54056d3cd8263724f0000db93199616e691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3879 zcmb7Hc{r49+n4NxA(AaKgDhc;ea1dB_GoM&6~hcB%Zynvma-0G=`o|crII#6ii#Fx z$#|F~-YnU(7P6H!3g75`dfxAkukU!@`?&9GJI>$lJkRU=9mjRu>1Y=_Q4u*29v&W1 z2YZwow@=ymgao*)D=PUex09vVcvIX7L6j&A3CClNB?RDr4&j(!oEr{-8buc?NI<#;i7tOOpk5uaP#?0B&dm*E0tG z^?3^D#aYkjr3nBgcJX!jUfNEP23HG&@e;@R7ZCwrC)~5 z&i}t@c=+GeWQrT^-|_yR#AJ_XA`aq)BNM2kKyKlJly_Va;Ybn=Lm`kn2!ya-yNC`U zPzdA@0uhLGHv+0VV*>FJI|~{=5zfwVhX^tS6A_4WK$(NN96ESB7H$hQMi}ZF8X;|r zY@tvaeHhY2*A{7GgS0h38R+T3eqm9BKx#NHg7OQC{WsS5x7ZyqgcG@*Q8*I*3=V5c zB7_5fCJo2`J{E)D^8JOy{yrAN-(n%$U?4lC{a>a2wZzrW&hT&HawmUF9~Z&ZJBcgo zldlmd9-cjU4k&96TL0`x;Yv?W*$*iasp1A2Bt(5;7LUWjy$*oZE@G~;9CA0Gfj3Lk z1!e6hl$l}W;fU5OLqjE!1tilC$$98GDll4g=~A+&FRSr0Kcc=4*L|n04Uy;1emAQn z+>gKibggFX8hLnY{=;_V_D~U8oi9m!4EI9@pu%U3_-`5}fKS+ZR#32e#&&ZdHu_3- zl(ei)htq^CYXCLB59YrH_;GF|bNvu1V^Us2?>IJLI{qmK%#yb`_-SFI-dhjOIB}SC zL3uavB4-j6Aq~r8_ihNk^O=ZY2|K@BI1k=qQ%zL&g@CHlzqt)Y4m|nSf_qkir61*zjppNF{ImzcJY!1h$Gd`Om z#ZoLHyyP^S+*w!SyFQu>cCtAYx>4|cs}CIeCNAPShgx*Df`bDGlf0Ll7^|nXwE+0w z4dY_`I{T2tb~Ni_n;(=dk;xGT!PDcMu~%lcb2+9q$2@6@t>Ad*oICXsO*PHfGG*#k z(8s$cws&>sbWA>?w|5dgE1eD5n*<88C$dZ2El*jB2c;t>6{dz*H zqyFX}*#I=y?s9C>-rHSqgBRYJKgo=9n8+?#K(Q8Jhf^5|fabIgVE0jvM@_@1LvYn4 zGZrMX@*}euDP)o*W;~Y*_6?)#8RCIzR{<&h<7`$m@! z+x#(7(QGYruXnD^K0QpN;>0;jzd6jQ5y_~TuU+wOk4jY;sd}TOs215f4s48nJ8WN3 zb}4jy0VI4;+WOKNl@waT57A4c9{AAO6w{j1v9r=zm&JCsqBF0jxO;x^|l$DsO z>4sa%A*{yzLi>kME}U-%zt}f8o4-5z^zG@Swof~GHXc4U1F2%{lAV@Nv?|~Fo81-68!gO?br*cfu%b;X; z1&l+zX|#)d$6CRJZnG0ZhFT%=X^ZV<(M$%5Us)XorTdh9`qFe%Xylx60*5ul9E)LO zYLQw#&%i3zL42*XxkaK!$NnkR!wy?Yu7Dilg-i(|@WuIz%Ygd!E{JQRsz$k>IVK&i z>`Bnw(NV(tx~58u=Bo4b_~r49S|CX%%|t0B0sQPlPyCJhSI*Q@B`6{E0JImxjfa6o%hIZ&bkon?>dh+w$N|rLz;v+e6Z;!0LR8La#B2{7jo3QJN z$*0f!mZvq!g%N|N`+Hwe_0R5G2R6EchjqhEN-Yj{Oj>~XA|Bs%*_U@P$Nzu?6qMit zmUosPSQjjO`6&=wAXNCLbK2oP21od7m_4tX%?&dEq6e>EIwDbJ`mBGtHF8&)MFfJU z*y3qJ_&W9(UER4ScR>wDnZr4X`06|_myGmp8s05`bu`BkdNGK80r0lb z){}4U9W>BGoWmPMzjLgS>~hyibxW&7_DSbton3IjfQR3!EvAbKikeVj(x)hShLx! z&dywQPG^YblMW|g%fW| z0{}IT?LT>{B^+(xEjawXB1w%>-I<4)bE|aPvH!!pULEo}`*DDxG zWriLUcCF-nAYN#vHQV7g@gqw~@eR8VZbiUPm;+JC^5|=$t`4FL?zvK1A?jT-O)T+y zGY*WG*EcuI#J2Q|$^M#3`Cn^Ri|cqje>A5oO4GDu=X?5YbtKJ)dSX@w_($^Slgr31 zkS6N`Hi1k)b_u*WsDL$@93L)HYMJAayrozFL;l|TRQ}ay zt&SB7!ZU{nk)9|qVOQ9bdx+>l_j#AjzQ7}5b)7?{mQsBrtj zRRc7fN<4zHn?0ivq!+!`_I&kH(Qfy z8@7s28B?}Tnmg4znFPx+X|f9T{C2iP1$92*5wiDimnk=>TKIWYV(pl;KNNKl_HT^CKlltw+ZJm9}Z`2#8rY3)+ zsPiwXJnR;GrA*TgN0;1h1K211`BkjfJ&_nY$*hgjGb>(Flm!f5S8!~HsDX|P$x~%v zew$KP2WL2SR#<5tcPEO^v`p!MNs6;o=Ahm~)7dv4iw_@nN;+~svHpPDZ2O+`rWI#C zKU$K{ZKk9~*Rs}b3mB6$Slwq+UbIQ6qHg;)c_>WXe=MMv_o2FA4fHHEquPWrFX4IO zp>W8(wwANqJI?U^E@6$t+8pKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005fNkl! zLbp00Q zegX7>55RlCG)ck{dIG!ww)i(b1FwM}&FFJ%10R%C%kw-u&-<%wv1++W0=vz0gb+w684QNx`4ztJ?+`3 zp=DO&^xJnHL=nnY0Gynha-%f>8yjuvx^B`A6tLNRF~$(bF)LBTbT%VRj{%s@W~@XJ zaU5feaZ}tBqhkEiEwWOIqA2*99y6WJ00_f?r%9Jqt3_2+uFypCpCIkTF4QQ?a(YK8 zT5G~EAPfVv*7S~2vMfi+-{N0L;A~;kg`g};ZnY*10+OUll5`1!fLpC8%hK%{z?m2o z<2}1OcS1r4hQo8>IA(qQApn<`8D&}0Za>Bt;}(2hjEb=Wz5t0kkicD=UAuuE@LU2F z@DjLg{?>K9Kyq!1Yv2`7&8yZ24uQ!%8a1(;zPtUOfE{}xSmKQASk52s5r6>p?|ayO Z4FJ^3t3}oovH1W1002ovPDHLkV1md$|K0!q diff --git a/Signal/Images/search_cancel@2x.png b/Signal/Images/search_cancel@2x.png deleted file mode 100644 index a0354eb4cd10d5d9a175d4ce142b1860a439efc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3360 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 ks=KzUC*y~`)bafv0IkGUIDyFbpM~AR}Z1HYnYI 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 M07*qoM6N<$f`8#>Pyhe` diff --git a/Signal/Images/send_code_icon@2x.png b/Signal/Images/send_code_icon@2x.png deleted file mode 100644 index 5d3ed011b57ff9eea8a1f05ee5d9bc73b6a69a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2984 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 bug=t6j&8Ojg%jpK?+Y3#I?CmW){p-K^3(bZ literal 0 HcmV?d00001 diff --git a/Signal/Images/signals.png b/Signal/Images/signals.png deleted file mode 100644 index a3eb26482a689b4340e8b1395c4725ef76ca018c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 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 P00000NkvXXu0mjf5C?Hq diff --git a/Signal/Images/speaker_icon_selected.png b/Signal/Images/speaker_icon_selected.png deleted file mode 100644 index 4b43cb39d5a041e099a28e50c2a7861d35f8bd59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3189 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 diff --git a/Signal/Images/spinner_connecting.png b/Signal/Images/spinner_connecting.png deleted file mode 100644 index e2f5cd32545968554316b9ce9783f3696da331b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3686 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 diff --git a/Signal/Images/spinner_connecting@2x.png b/Signal/Images/spinner_connecting@2x.png deleted file mode 100644 index cedf1f5e3fe4087842f944d0201b512ae3b0584a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3851 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 diff --git a/Signal/Images/spinner_connecting_flash@2x.png b/Signal/Images/spinner_connecting_flash@2x.png deleted file mode 100644 index b0e1f97e20538bf3970e277ccc55d738b8136eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0FQm->Ad9juHW?3*4Jyr z>h|~d<>u${@$yi*=ilMs-QM4Z&+hB&?4jE7)DB>`0004jNklh(A8vnOcnQt4z2xzw zWc`Nrv>oT6Dj*D<8S9f*g$DZ4W(ThbCG-dPM+3;tV>&i(x>`IgsK;%;8UIXII)vVw z2%lVI6LLA9#$4rU3RLuNy$Yo+Ai-zW>yqh0d&6T*5C!^s{t!m?Oau5`sQGgq!0!Uz zK^emD0v}pu{XZcszgx@pf=bdl_`HtWdP^eJL=|iMqwZo(d07E^BAilG)kLbeXg4PMx7THf_@CuAZ~r*tXpMx5&n%;WaPj c=Klm30API)&RkWI;Q#;t07*qoM6N<$g4S;;{r~^~ diff --git a/Signal/Images/spinner_error.png b/Signal/Images/spinner_error.png deleted file mode 100644 index 82eb4f0007e8ad94970a1488017b9c1ca39700c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3704 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 WSpta*oV0-e0000oEh@$M=z@JCJj z)YkpuN^&V`%k%g!i1EsR0V^0004ONkl%-Lks-TmjKY28FlLmz|y%1cL%_5z3>5|mk5`D^0?+y={1KP0IttS z${b*T&iR49l(Gl>7dzStwguRyS7^Ja7BCCFXn@awTkCHiyw83^e*ru_>ka({q#D>A z{RO0?9q4^xjs14*TNgogEp_~^UJrX>U~G1T8NhY{o{#^p@BK3Xvv!!>iS25=S3vIS zRc<)ebeH6_h+GHYdM@&r*@pge;7J1v^wlM1YyB6HAvItIdRa}0(gQj+^5m1G1!(Mj z6l+HHKs$=7r3VB7t`(TQRMS2X9JpeQa2^0&pc%gbc`g=Kk#Y9?a$>3vysY9)D>KnU zRrc50aII5WtpS#!Lq8nKFNa4})=I}Vu&|t03W7KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00093P)t-s|Ns90uJ0$R;mPXwzw7(&`u;Vq<1oGQ*YEitxbful`*_Oi-}U{U;rU?9 z^^?``^7{QkwdH`<_g%l~5VP>Sd)}}P{;I!&+b6N^P$@E zkKFhnAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7EiEoCE-x=HFfcGN zF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?K0iM{KtMo2K|w-7 zLPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuyP*6}&QBhJ-Qd3h? zR8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?WjVPRroVq;@tWMpJz zWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2Ta&vQYbaZreb#-=j zc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyDgoK2Jg@uNOhKGlT zh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}m6ev3mY0{8n3$NE znVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(rl+T;sHmu^si~@} zs;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#pxVX5vxw*Q!y1To( zyu7@dCU$jHda$;ryf%FD~k%*@Qq z&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4?Ck9A?d|UF?(gsK z@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg={r&#_{{R2~USFgE z0001}NklVW_pOPSw8u|1-M)d8nIa0dr3#xc~$mXGxOm80Tp+(N zHg?pIZ1#*Z$=w7=hLfbr{7@Qh73iYj3+_T7CLW33Nb;2ovP%yl-=WcQrLd3=@D(58 nE&w=X?AN~KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00093P)t-s|Ns90uJ0$R;mPXwzw7(&`u;Vq<1oGQ*YEitxbful`*_Oi-}U{U;rU?9 z^^?``^7{QkwdH`<_g%l~5VP>Sd)}}P{;I!&+b6N^P$@E zkKFhnAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7EiEoCE-x=HFfcGN zF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?K0iM{KtMo2K|w-7 zLPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuyP*6}&QBhJ-Qd3h? zR8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?WjVPRroVq;@tWMpJz zWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2Ta&vQYbaZreb#-=j zc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyDgoK2Jg@uNOhKGlT zh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}m6ev3mY0{8n3$NE znVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(rl+T;sHmu^si~@} zs;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#pxVX5vxw*Q!y1To( zyu7@dCU$jHda$;ryf%FD~k%*@Qq z&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4?Ck9A?d|UF?(gsK z@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg={r&#_{{R2~USFgE z0004mNklEYRd3GyVztNs%xOh|r%Fvm$K6q8A(3d8GgrO?r=noqis=}RT z-CDi7$>LptdfeulT%Q?ohcKEQxjI+bgiQ9QGDkU?LMQfay$ZQ5P{AkG>yqd~^T0Dr z5Cz6(9w`8<=W`dpBL%3h=PZCnDrb;~@JMCT2J8PswbTITTo{Dry78fW=DZV*P~Q=J z0u2>vd3;|YawH18zqxHcy|v>JA%yTBd5G+Ibi9?lm)~P`iaZ8@E%os2ZR}^YcyVrLyY*S_ zPVJ%EHm%d@tcpe7*gil0TkU>I{b!lY$^Q)i9X1^@s6zs*Ol00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005hNkl5>YG^6#WB&f{h?{LJB)8!9uXG(9Y7rA~xCy z7S^^_=|oAXg^frgk}A)kY*u}F+LjVCym zHa#lwdzP$G2Z84AkOFZw$7?*sG`18rzr!rfBx2A_^137@u=7Xl*fa%f@lxbygQb02Ma?s#2KC?Ju_wR bj_(5ix0KL}&<6f700000NkvXXu0mjfR&WIX diff --git a/Signal/Images/tab_icon_contacts@2x.png b/Signal/Images/tab_icon_contacts@2x.png deleted file mode 100644 index 9869dc31b2f844cbe88535aa838a4415f9b08d4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^PC#tP!3HGr9@V!4DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42;#DE{-7;x8BU?%{^ow(E7N8(WuEif%y>I-32)TW*IXY z1RFRd8dI2zn4}M|y({i+5xHsD85_L(z2|Zb`!c=wn&+E8_xzd`;1zo01GAH$^R%Zf z4gxHWAmpF@Y)5_b)_LzWmNP68b<(Mgo8UF~(1j0-jq~?3&AsXz9bx!XCb6aA@Veqk z-r0xS+5&mAmFnJG`>-(~-VOu$fsIF)~wM>^~{!>o0n18P}n$q2aT=a=d3R)zp#s8!w}*v!!HhaKv>cTdT-h zbF9zDCKkE;Hxyp_?P*GJ%9}5d66a3qBtB*C^ty4;sJQ0Qz1vG(bJQ&8Tg!jrl;K*r zk8ApV@_ssMx75nXX6Bh=Jk@vKEpR_2lE%Bvl%q+3qe%%&0vSI{1*#q&)!h4_>p^)z zyah=7Owi-dySKw%ef{*URk>*)FhDLYpXtsRQr@@zO8h6)+*(cp2G$!-zqx0;5(UN; NgQu&X%Q~loCII6(#OVM4 diff --git a/Signal/Images/tab_icon_favourites.png b/Signal/Images/tab_icon_favourites.png deleted file mode 100644 index 999b6d0f1bf3bf8a63b4f6574def216ef4547cc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3208 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 M07*qoM6N<$f+zk9KL7v# diff --git a/Signal/Images/tab_icon_inbox.png b/Signal/Images/tab_icon_inbox.png deleted file mode 100644 index 8cc752ce8860310c1fc0515de24b762b6f62f823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3459 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 M07*qoM6N<$f(z9I3jhEB diff --git a/Signal/Images/tab_icon_keypad@2x.png b/Signal/Images/tab_icon_keypad@2x.png deleted file mode 100644 index ebe727ab47017c4e80c5438ca56951ac44e99195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)XlQMBg6O<+ z62yi4^F@jgkC`{>#&!1hBwQJm-`x?utra8PZz z)`NHOOyqXqg63ZC(18+4e|8<%wGBing6KibeN z2B8y}qoKKZILQ-0n~1AHNa_IF^{68oIIl2A^l3DDA&b3~NG26fpD*SLRaj=~A%CF0 ztXP3GG*LJ8vA$M`|HW4HuNDJp`RapPOcmTy%(TT+2J|9}+G5&HZD?ZLV#=1Z#T23y zi`rs(Ozp^~Y%zU-gT7|kVycPUeqW;g)BqT`+>bp*`8=x6ZGHt90NZrV5$dqxD*ylh M07*qoM6N<$f~&+R=l}o! diff --git a/Signal/Images/tab_icon_menu.png b/Signal/Images/tab_icon_menu.png deleted file mode 100644 index 29369f75c65b64a4ed96678f04603d46cc9ab579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3213 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 diff --git a/Signal/Images/tab_icon_menu@2x.png b/Signal/Images/tab_icon_menu@2x.png deleted file mode 100644 index 58d95ac267af5b72041dbdf0188dfeb53090b117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmV-I0=@l-P)x-N(232cQwwO|$4!CLD^=5C?c%w+Fpc;0f-6=8#??mE7ZfYAJXHy`XNdtNZe zd4?uLKmz6o%wjrX3&z;jiO0o55Z*fpam|%P56Y!RF)Be$2@0cTtm(uNg!v7Xq=VEb zw!@?_=xLKDU$;UKdeJiANd?$ie5rw9KO2N|ho0jI^HONine5$Bo>`$#C~oSK#*5bL zLBp#34XlJquNBRv*Lwo`%IBEW5xXAb!}=*O#Cz5S#w9U11t*g}62>INad8oZdJr|i z6R8JrWK@wyOl)+b64Y>N9B~9ee$y~EewG@=)fvMQi%jbr4s%IL5&hLQpFp(>{?2VVw5k( zS|jxfGw>p>6c!`o>|)EPIUeLmdNIAKSPhPx!(;UT{gqa43WY*39liw^0NeP5JH^Pj QNB{r;07*qoM6N<$f@&}SBme*a diff --git a/Signal/Images/trash_icon.png b/Signal/Images/trash_icon.png deleted file mode 100644 index 8e53c7e2b5b76188e1fa4aeb771d41b8de7408c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3119 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 Q0vPlRp00i_>zopr0BMJ@B>(^b diff --git a/Signal/Images/volume_high.png b/Signal/Images/volume_high.png deleted file mode 100644 index 51512f88d3a2bebebddc0ff417a6523379f6b0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3121 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 LNkvXXu0mjfMv~kj diff --git a/Signal/Images/volume_high@2x.png b/Signal/Images/volume_high@2x.png deleted file mode 100644 index dd495ee61e1a1a16b7b472e873f517a1d7b1f794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmV;^0WAKBP)IArfZcsnLVM|jSX53aD7C}HlC=P?hW-rts~9=**9D) zP-`G+lgz+G&J%&mGloh;5B-~8bIp2I@0gv|c+_5UPAT6{rH%tu!TVBh-jB$KnL-^0 z%nS}`zHEd<&tNR=%coH1gdDRF*+!6uT8L=PY0fu|6ICBAr9fxJXnl0{};lNN(eLnGOH|002ov JPDHLkV1k%w#f<;} diff --git a/Signal/Images/volume_low.png b/Signal/Images/volume_low.png deleted file mode 100644 index 992693639691d21762db021da4b4b0678ab4df4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2896 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 diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index 85c59b48c..5e0126f80 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -13,7 +13,7 @@ CFBundleIcons~ipad CFBundleIdentifier - org.whispersystems.signal.branch + org.whispersystems.signal.textSecure CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index d37230c5f..3acaa93ee 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -12,6 +12,7 @@ #import "PriorityQueue.h" #import "RecentCallManager.h" #import "Release.h" +#import "TSStorageManager.h" #import "TSAccountManager.h" #import "Util.h" #import "VersionMigrations.h" @@ -58,47 +59,6 @@ } } -/** - * Protects the preference and logs file with disk encryption and prevents them to leak to iCloud. - */ - -- (void)protectPreferenceFiles{ - - NSMutableArray *pathsToExclude = [NSMutableArray array]; - NSString *preferencesPath =[NSHomeDirectory() stringByAppendingString:@"/Library/Preferences/"]; - - NSError *error; - - NSDictionary *attrs = @{NSFileProtectionKey: NSFileProtectionCompleteUntilFirstUserAuthentication}; - [NSFileManager.defaultManager setAttributes:attrs ofItemAtPath:preferencesPath error:&error]; - - [pathsToExclude addObject:[[preferencesPath stringByAppendingString:NSBundle.mainBundle.bundleIdentifier] stringByAppendingString:@".plist"]]; - - NSString *logPath = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/Logs/"]; - NSArray *logsFiles = [NSFileManager.defaultManager contentsOfDirectoryAtPath:logPath error:&error]; - - attrs = @{NSFileProtectionKey: NSFileProtectionCompleteUntilFirstUserAuthentication}; - [NSFileManager.defaultManager setAttributes:attrs ofItemAtPath:logPath error:&error]; - - for (NSString *logsFile in logsFiles) { - [pathsToExclude addObject:[logPath stringByAppendingString:logsFile]]; - } - - for (NSString *pathToExclude in pathsToExclude) { - [[NSURL fileURLWithPath:pathToExclude] setResourceValue:@YES - forKey:NSURLIsExcludedFromBackupKey - error:&error]; - } - - if (error) { - DDLogError(@"Error while removing log files from backup: %@", error.description); - UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"WARNING", @"") message:NSLocalizedString(@"DISABLING_BACKUP_FAILED", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil, nil]; - [alert show]; - return; - } - -} - - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL loggingIsEnabled; @@ -121,8 +81,9 @@ [DebugLogger.sharedInstance enableFileLogging]; } + [[TSStorageManager sharedManager] setupDatabase]; + [self performUpdateCheck]; - [self protectPreferenceFiles]; //self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; @@ -144,6 +105,21 @@ [self application:application didReceiveRemoteNotification:remoteNotif]; } + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]]; + + UIViewController *viewController; + + if (![TSAccountManager isRegistered]) { + viewController = [storyboard instantiateViewControllerWithIdentifier:@"RegisterInitialViewController"]; + } else{ + viewController = [storyboard instantiateViewControllerWithIdentifier:@"UserInitialViewController"]; + } + + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + self.window.rootViewController = viewController; + + [self.window makeKeyAndVisible]; + [Environment.phoneManager.currentCallObservable watchLatestValue:^(CallState* latestCall) { if (latestCall == nil){ return; @@ -166,15 +142,6 @@ [self.window.rootViewController presentViewController:callViewController animated:NO completion:nil]; } onThread:NSThread.mainThread untilCancelled:nil]; - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]]; - - UIViewController *viewController; - - BOOL isNewUser = NO; - - self.window.rootViewController = isNewUser ? viewControllerForNewUser : viewController; - [self.window makeKeyAndVisible]; - return YES; } diff --git a/Signal/src/Storyboard/Storyboard.storyboard b/Signal/src/Storyboard/Storyboard.storyboard old mode 100644 new mode 100755 index d11a86f85..ac6fc2397 --- a/Signal/src/Storyboard/Storyboard.storyboard +++ b/Signal/src/Storyboard/Storyboard.storyboard @@ -1,5 +1,5 @@ - + @@ -24,7 +24,7 @@ - + @@ -120,7 +120,7 @@ - + @@ -480,12 +480,14 @@ Lorem ipsum : Quick explanation of Fingerprints - + + + - + @@ -509,12 +511,12 @@ Lorem ipsum : Quick explanation of Fingerprints - + - + @@ -696,10 +698,16 @@ Lorem ipsum : Quick explanation of Fingerprints - + + + - - + + + + + + @@ -1523,7 +1531,9 @@ Lorem ipsum : Quick explanation of Fingerprints - + + + @@ -1599,6 +1609,9 @@ Lorem ipsum : Quick explanation of Fingerprints + + + - + @@ -1883,7 +1899,7 @@ Lorem ipsum : Quick explanation of Fingerprints - + @@ -1921,8 +1937,11 @@ Lorem ipsum : Quick explanation of Fingerprints + + + - + @@ -1960,6 +1979,9 @@ Lorem ipsum : Quick explanation of Fingerprints + + + @@ -2221,7 +2243,7 @@ Lorem ipsum : Quick explanation of Fingerprints - + @@ -2266,7 +2288,7 @@ Lorem ipsum : Quick explanation of Fingerprints - + @@ -2297,11 +2319,24 @@ Lorem ipsum : Quick explanation of Fingerprints @@ -2329,7 +2364,7 @@ Licensed under the GPLv3 - + @@ -2337,17 +2372,11 @@ Licensed under the GPLv3 - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + @@ -2418,22 +2419,14 @@ Licensed under the GPLv3 - - + - - - - - - - - + @@ -2442,21 +2435,12 @@ Licensed under the GPLv3 - - - - - - - - - - + @@ -2465,21 +2449,11 @@ Licensed under the GPLv3 - - - - - - - - - - @@ -2835,7 +2809,7 @@ Licensed under the GPLv3 - + @@ -2982,7 +2956,7 @@ Licensed under the GPLv3 - + @@ -3078,14 +3052,6 @@ Licensed under the GPLv3 - - - - - - - - @@ -3124,31 +3090,6 @@ Licensed under the GPLv3 - @@ -3167,6 +3108,35 @@ Licensed under the GPLv3 + @@ -3174,13 +3144,17 @@ Licensed under the GPLv3 - - + + + + + + - + @@ -3193,8 +3167,8 @@ Licensed under the GPLv3 - + @@ -3227,7 +3201,7 @@ Licensed under the GPLv3 - + @@ -3315,17 +3289,17 @@ Licensed under the GPLv3 + - - + - + diff --git a/Signal/src/call/RecentCallManager.m b/Signal/src/call/RecentCallManager.m index 4c101a71b..6efde4b24 100644 --- a/Signal/src/call/RecentCallManager.m +++ b/Signal/src/call/RecentCallManager.m @@ -34,7 +34,7 @@ typedef BOOL (^SearchTermConditionalBlock)(RecentCall*, NSUInteger, BOOL*); } -(void) watchForContactUpdatesFrom:(ContactsManager*) contactManager untillCancelled:(TOCCancelToken*) cancelToken{ - [contactManager.getObservableWhisperUsers watchLatestValue:^(NSArray* latestUsers) { + [contactManager.getObservableRedPhoneUsers watchLatestValue:^(NSArray* latestUsers) { for (RecentCall* recentCall in _allRecents) { if (![contactManager latestContactWithRecordId:recentCall.contactRecordID]) { Contact* contact = [contactManager latestContactForPhoneNumber:recentCall.phoneNumber]; diff --git a/Signal/src/contact/Contact.h b/Signal/src/contact/Contact.h index 764913c53..f0f90dd28 100644 --- a/Signal/src/contact/Contact.h +++ b/Signal/src/contact/Contact.h @@ -10,18 +10,15 @@ @interface Contact : NSObject -@property (readonly,nonatomic) NSString* firstName; -@property (readonly,nonatomic) NSString* lastName; -@property (readonly,nonatomic) NSArray* parsedPhoneNumbers; -@property (readonly,nonatomic) NSArray* userTextPhoneNumbers; -@property (readonly,nonatomic) NSArray* emails; -@property (readonly,nonatomic) UIImage* image; -@property (readonly,nonatomic) NSString *notes; +@property (readonly,nonatomic) NSString *firstName; +@property (readonly,nonatomic) NSString *lastName; +@property (readonly,nonatomic) NSArray *parsedPhoneNumbers; +@property (readonly,nonatomic) NSArray *userTextPhoneNumbers; +@property (readonly,nonatomic) NSArray *emails; +@property (readonly,nonatomic) UIImage *image; +@property (readonly,nonatomic) NSString *notes; @property (readonly,nonatomic) ABRecordID recordID; -@property (nonatomic, assign) BOOL isTextSecureContact; -@property (nonatomic, assign) BOOL isRedPhoneContact; - + (Contact*)contactWithFirstName:(NSString*)firstName andLastName:(NSString *)lastName andUserTextPhoneNumbers:(NSArray*)phoneNumbers @@ -36,6 +33,9 @@ andContactID:(ABRecordID)record andNotes:(NSString *)notes; -- (NSString *)fullName; +- (NSString*)fullName; + +- (BOOL)isTextSecureContact; +- (BOOL)isRedPhoneContact; @end diff --git a/Signal/src/contact/Contact.m b/Signal/src/contact/Contact.m index 0a5591e8d..126cdee6b 100644 --- a/Signal/src/contact/Contact.m +++ b/Signal/src/contact/Contact.m @@ -1,7 +1,10 @@ #import "Contact.h" +#import "ContactsManager.h" +#import "TSStorageManager.h" #import "Util.h" #import "Environment.h" #import "PreferencesUtil.h" +#import "TSRecipient.h" static NSString *const DEFAULTS_KEY_CONTACT = @"DefaultsKeyContact"; static NSString *const DEFAULTS_KEY_PHONE_NUMBER = @"DefaultsKeyPhoneNumber"; @@ -79,4 +82,22 @@ static NSString *const DEFAULTS_KEY_DATE = @"DefaultsKeyDate"; } } +- (BOOL)isTextSecureContact{ + __block BOOL isRecipient = NO; + [[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + for (PhoneNumber *number in self.parsedPhoneNumbers) { + if ([TSRecipient recipientWithTextSecureIdentifier:number.toE164 withTransaction:transaction]) { + isRecipient = YES; + break; + } + } + }]; + return isRecipient; +} + +- (BOOL)isRedPhoneContact{ + ContactsManager *contactManager = [Environment getCurrent].contactsManager; + return [contactManager isContactRegisteredWithRedPhone:self]; +} + @end diff --git a/Signal/src/contact/ContactsManager.h b/Signal/src/contact/ContactsManager.h index 7dd70b6ee..3862a84d7 100644 --- a/Signal/src/contact/ContactsManager.h +++ b/Signal/src/contact/ContactsManager.h @@ -19,32 +19,32 @@ typedef void(^ABReloadRequestCompletionBlock)(NSArray *contacts); @interface ContactsManager : NSObject { @private TOCFuture* futureAddressBook; @private ObservableValueController* observableContactsController; -@private ObservableValueController* observableWhisperUsersController; +@private ObservableValueController* observableRedPhoneUsersController; +@private ObservableValueController* observableTextSecureUsersController; @private TOCCancelTokenSource* life; @private NSDictionary *latestContactsById; @private NSDictionary *latestWhisperUsersById; } -(ObservableValue *) getObservableContacts; --(ObservableValue *) getObservableWhisperUsers; +-(ObservableValue *) getObservableRedPhoneUsers; -(NSArray*) getContactsFromAddressBook:(ABAddressBookRef)addressBook; -(Contact*) latestContactWithRecordId:(ABRecordID)recordId; -(Contact*) latestContactForPhoneNumber:(PhoneNumber *)phoneNumber; -(NSArray*) latestContactsWithSearchString:(NSString *)searchString; --(void) addContactsToKnownWhisperUsers:(NSArray*) contacts; - +(NSDictionary *)groupContactsByFirstLetter:(NSArray *)contacts matchingSearchString:(NSString *)optionalSearchString; +(BOOL)name:(NSString *)nameString matchesQuery:(NSString *)queryString; +(BOOL)phoneNumber:(PhoneNumber *)phoneNumber matchesQuery:(NSString *)queryString; --(BOOL)isContactRegisteredWithWhisper:(Contact*) contact; +-(BOOL)isContactRegisteredWithRedPhone:(Contact*) contact; -(void) doAfterEnvironmentInitSetup; --(void) enableNewUserNotifications; --(NSUInteger) getNumberOfUnacknowledgedCurrentUsers; +- (NSArray*)allContacts; +- (NSArray*)textSecureContacts; +- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier; @end diff --git a/Signal/src/contact/ContactsManager.m b/Signal/src/contact/ContactsManager.m index ec3775926..7d15fecb4 100644 --- a/Signal/src/contact/ContactsManager.m +++ b/Signal/src/contact/ContactsManager.m @@ -10,16 +10,9 @@ #define ADDRESSBOOK_QUEUE dispatch_get_main_queue() -static NSString *const FAVOURITES_DEFAULT_KEY = @"FAVOURITES_DEFAULT_KEY"; -static NSString *const KNOWN_USERS_DEFAULT_KEY = @"KNOWN_USERS_DEFAULT_KEY"; - typedef BOOL (^ContactSearchBlock)(id, NSUInteger, BOOL*); @interface ContactsManager () { - NSMutableArray *_favouriteContactIds; - NSMutableArray *_knownWhisperUserIds; - BOOL newUserNotificationsEnabled; - id addressBookReference; } @@ -30,11 +23,9 @@ typedef BOOL (^ContactSearchBlock)(id, NSUInteger, BOOL*); - (id)init { self = [super init]; if (self) { - newUserNotificationsEnabled = [self knownUserStoreInitialized]; - _knownWhisperUserIds = [self loadKnownWhisperUsers]; - life = [TOCCancelTokenSource new]; - observableContactsController = [ObservableValueController observableValueControllerWithInitialValue:nil]; - observableWhisperUsersController = [ObservableValueController observableValueControllerWithInitialValue:nil]; + life = [TOCCancelTokenSource new]; + observableContactsController = [ObservableValueController observableValueControllerWithInitialValue:nil]; + observableRedPhoneUsersController = [ObservableValueController observableValueControllerWithInitialValue:nil]; [self registerNotificationHandlers]; } return self; @@ -47,9 +38,9 @@ typedef BOOL (^ContactSearchBlock)(id, NSUInteger, BOOL*); } } untilCancelled:life.token]; - [observableWhisperUsersController watchLatestValueOnArbitraryThread:^(NSArray *latestUsers) { + [observableRedPhoneUsersController watchLatestValueOnArbitraryThread:^(NSArray *latestUsers) { @synchronized(self) { - [self setupLatestWhisperUsers:latestUsers]; + [self setupLatestRedPhoneUsers:latestUsers]; } } untilCancelled:life.token]; } @@ -64,13 +55,11 @@ typedef BOOL (^ContactSearchBlock)(id, NSUInteger, BOOL*); } -(void) updatedDirectoryHandler:(NSNotification*) notification { - [self checkForNewWhisperUsers]; + NSArray *currentUsers = [self getRedPhoneUsersFromContactsArray:latestContactsById.allValues]; + + [observableRedPhoneUsersController updateValue:currentUsers]; } --(void) enableNewUserNotifications{ - newUserNotificationsEnabled = YES; -} - #pragma mark - Address Book callbacks void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef info, void *context); @@ -110,12 +99,12 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in latestContactsById = [ContactsManager keyContactsById:contacts]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - [self checkForNewWhisperUsers]; + [self updatedDirectoryHandler:nil]; }); } } -- (void)setupLatestWhisperUsers:(NSArray *)users { +- (void)setupLatestRedPhoneUsers:(NSArray *)users { if (users) { latestWhisperUsersById = [ContactsManager keyContactsById:users]; } @@ -127,8 +116,8 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in return observableContactsController; } --(ObservableValue *) getObservableWhisperUsers { - return observableWhisperUsersController; +-(ObservableValue *) getObservableRedPhoneUsers { + return observableRedPhoneUsersController; } #pragma mark - Address Book utils @@ -344,7 +333,11 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in } } --(NSArray*) recordsForContacts:(NSArray*) contacts{ +- (NSArray*)allContacts { + return [latestContactsById allValues]; +} + +- (NSArray*)recordsForContacts:(NSArray*) contacts{ return [contacts map:^id(Contact *contact) { return @([contact recordID]); }]; @@ -387,40 +380,26 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in #pragma mark - Whisper User Management --(NSUInteger) checkForNewWhisperUsers { - NSArray *currentUsers = [self getWhisperUsersFromContactsArray:latestContactsById.allValues]; - NSArray *newUsers = [self getNewItemsFrom:currentUsers comparedTo:latestWhisperUsersById.allValues]; - - if(newUsers.count > 0){ - [observableWhisperUsersController updateValue:currentUsers]; - } - - NSArray *unacknowledgedUserIds = [self getUnacknowledgedUsersFrom:currentUsers]; - if(unacknowledgedUserIds.count > 0){ - NSArray *unacknowledgedUsers = [self contactsForContactIds: unacknowledgedUserIds]; - if(!newUserNotificationsEnabled){ - [self addContactsToKnownWhisperUsers:unacknowledgedUsers]; - }else{ - NSDictionary *payload = @{NOTIFICATION_DATAKEY_NEW_USERS: unacknowledgedUsers}; - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NEW_USERS_AVAILABLE object:self userInfo:payload]; - } - } - return newUsers.count; -} - --(NSArray*) getUnacknowledgedUsersFrom:(NSArray*) users { - NSArray *userIds = [self recordsForContacts:users]; - return [self getNewItemsFrom:userIds comparedTo:_knownWhisperUserIds ]; -} - --(NSUInteger) getNumberOfUnacknowledgedCurrentUsers{ - NSArray *currentUsers = [self getWhisperUsersFromContactsArray:latestContactsById.allValues]; - return [[self getUnacknowledgedUsersFrom:currentUsers] count]; -} - --(NSArray*) getWhisperUsersFromContactsArray:(NSArray*) contacts { +-(NSArray*) getRedPhoneUsersFromContactsArray:(NSArray*) contacts { return [contacts filter:^int(Contact* contact) { - return [self isContactRegisteredWithWhisper:contact]; + return [self isContactRegisteredWithRedPhone:contact]; + }]; +} + +-(NSArray*) textSecureContacts { + return [[self.allContacts filter:^int(Contact* contact) { + return [contact isTextSecureContact]; + }] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { + Contact *contact1 = (Contact*)obj1; + Contact *contact2 = (Contact*)obj2; + + BOOL firstNameOrdering = ABPersonGetSortOrdering() == kABPersonCompositeNameFormatFirstNameFirst?YES:NO; + + if (firstNameOrdering) { + return [contact1.firstName compare:contact2.firstName]; + } else { + return [contact2.lastName compare:contact2.lastName]; + } }]; } @@ -432,50 +411,29 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in return newSet.allObjects; } -- (BOOL)isContactRegisteredWithWhisper:(Contact*) contact { +- (BOOL)isContactRegisteredWithRedPhone:(Contact*) contact { for(PhoneNumber *phoneNumber in contact.parsedPhoneNumbers){ - if ( [self isPhoneNumberRegisteredWithWhisper:phoneNumber]) { + if ( [self isPhoneNumberRegisteredWithRedPhone:phoneNumber]) { return YES; } } return NO; } -- (BOOL)isPhoneNumberRegisteredWithWhisper:(PhoneNumber *)phoneNumber { +- (BOOL)isPhoneNumberRegisteredWithRedPhone:(PhoneNumber *)phoneNumber { PhoneNumberDirectoryFilter* directory = Environment.getCurrent.phoneDirectoryManager.getCurrentFilter; return phoneNumber != nil && [directory containsPhoneNumber:phoneNumber]; } --(void) addContactsToKnownWhisperUsers:(NSArray*) contacts { - for( Contact *contact in contacts){ - [_knownWhisperUserIds addObject:@([contact recordID])]; +- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier{ + for (Contact *contact in self.textSecureContacts) { + for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) { + if ([phoneNumber.toE164 isEqualToString:identifier]) { + return contact.fullName; + } + } } - NSMutableSet *users = [NSMutableSet setWithArray:latestWhisperUsersById.allValues]; - [users addObjectsFromArray:contacts]; - - [observableWhisperUsersController updateValue:users.allObjects]; - [self saveKnownWhisperUsers]; -} - --(BOOL) knownUserStoreInitialized{ - NSUserDefaults *d = [NSUserDefaults.standardUserDefaults objectForKey:KNOWN_USERS_DEFAULT_KEY]; - return (Nil != d); -} - --(NSMutableArray*) loadKnownWhisperUsers{ - NSArray *knownUsers = [NSUserDefaults.standardUserDefaults objectForKey:KNOWN_USERS_DEFAULT_KEY]; - return knownUsers == nil ? [NSMutableArray array] : knownUsers.mutableCopy; -} - --(void) saveKnownWhisperUsers{ - _knownWhisperUserIds = [NSMutableArray arrayWithArray:[latestWhisperUsersById allKeys]]; - [NSUserDefaults.standardUserDefaults setObject:[_knownWhisperUserIds copy] forKey:KNOWN_USERS_DEFAULT_KEY]; - [NSUserDefaults.standardUserDefaults synchronize]; -} - --(void) clearKnownWhisUsers{ - [NSUserDefaults.standardUserDefaults setObject:@[] forKey:KNOWN_USERS_DEFAULT_KEY]; - [NSUserDefaults.standardUserDefaults synchronize]; + return nil; } @end diff --git a/Signal/src/network/http/RPServerRequestsManager.m b/Signal/src/network/http/RPServerRequestsManager.m index 394144122..9219e8320 100644 --- a/Signal/src/network/http/RPServerRequestsManager.m +++ b/Signal/src/network/http/RPServerRequestsManager.m @@ -82,7 +82,6 @@ MacrosSingletonImplemention TOCFutureSource *requestFutureSource = [TOCFutureSource new]; [self performRequest:apiCall success:^(NSURLSessionDataTask *task, id responseObject) { - NSLog(@"ResponseObject: %@", responseObject); [requestFutureSource trySetResult:task.response]; } failure:^(NSURLSessionDataTask *task, NSError *error) { [requestFutureSource trySetFailure:error]; diff --git a/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m b/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m index 677a1cff9..a317b47ab 100644 --- a/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m +++ b/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m @@ -1,11 +1,16 @@ #import "PhoneNumberDirectoryFilterManager.h" +#import "ContactsManager.h" +#import "Cryptography.h" #import "Environment.h" #import "NotificationManifest.h" #import "PreferencesUtil.h" #import "RPServerRequestsManager.h" #import "SignalUtil.h" #import "ThreadManager.h" +#import "TSContactsIntersectionRequest.h" +#import "TSStorageManager.h" +#import "TSRecipient.h" #import "Util.h" #define MINUTE (60.0) @@ -18,13 +23,13 @@ @private TOCCancelTokenSource* currentUpdateLifetime; } --(id) init { +- (id)init { if (self = [super init]) { phoneNumberDirectoryFilter = PhoneNumberDirectoryFilter.phoneNumberDirectoryFilterDefault; } return self; } --(void) startUntilCancelled:(TOCCancelToken*)cancelToken { +- (void)startUntilCancelled:(TOCCancelToken*)cancelToken { lifetimeToken = cancelToken; phoneNumberDirectoryFilter = [Environment.preferences tryGetSavedPhoneNumberDirectory]; @@ -35,21 +40,21 @@ [self scheduleUpdate]; } --(PhoneNumberDirectoryFilter*) getCurrentFilter { +- (PhoneNumberDirectoryFilter*)getCurrentFilter { @synchronized(self) { return phoneNumberDirectoryFilter; } } --(void)forceUpdate { +- (void)forceUpdate { [self scheduleUpdateAt:NSDate.date]; } --(void) scheduleUpdate { +- (void)scheduleUpdate { return [self scheduleUpdateAt:self.getCurrentFilter.getExpirationDate]; } --(void) scheduleUpdateAt:(NSDate*)date { +- (void)scheduleUpdateAt:(NSDate*)date { void(^doUpdate)(void) = ^{ if (Environment.isRedPhoneRegistered) { - [self update]; + [self updateRedPhone]; } }; @@ -63,8 +68,10 @@ unlessCancelled:currentUpdateLifetime.token]; } --(void) update { - [[RPServerRequestsManager sharedInstance] performRequest:[RPAPICall fetchBloomFilter] success:^(NSURLSessionDataTask *task, NSData *responseObject) { + +- (void) updateRedPhone { + + [[RPServerRequestsManager sharedInstance] performRequest:[RPAPICall fetchBloomFilter] success:^(NSURLSessionDataTask *task, id responseObject) { PhoneNumberDirectoryFilter *directory = [PhoneNumberDirectoryFilter phoneNumberDirectoryFilterFromURLResponse:(NSHTTPURLResponse*)task.response body:responseObject]; @synchronized(self) { @@ -72,10 +79,9 @@ } [Environment.preferences setSavedPhoneNumberDirectory:directory]; - [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_DIRECTORY_WAS_UPDATED object:nil]; - [self scheduleUpdate]; - + [self updateTextSecureWithRedPhoneSucces:YES]; } failure:^(NSURLSessionDataTask *task, NSError *error) { + DDLogError(@"Error to fetch contact interesection: %@", error.debugDescription); NSString* desc = [NSString stringWithFormat:@"Failed to retrieve directory. Retrying in %f hours.", DIRECTORY_UPDATE_RETRY_PERIOD/HOUR]; Environment.errorNoter(desc, error, false); @@ -84,11 +90,67 @@ sinceDate:[NSDate date]]; @synchronized(self) { phoneNumberDirectoryFilter = [PhoneNumberDirectoryFilter phoneNumberDirectoryFilterWithBloomFilter:filter - andExpirationDate:retryDate]; + andExpirationDate:retryDate]; } + [self updateTextSecureWithRedPhoneSucces:NO]; + }]; +} + +- (void)updateTextSecureWithRedPhoneSucces:(BOOL)redPhoneSuccess { + NSArray *allContacts = [[[Environment getCurrent] contactsManager] allContacts]; + + NSMutableDictionary *contactsByPhoneNumber = [NSMutableDictionary dictionary]; + NSMutableDictionary *phoneNumbersByHashes = [NSMutableDictionary dictionary]; + + for (Contact *contact in allContacts) { + for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) { + [phoneNumbersByHashes setObject:phoneNumber.toE164 forKey:[Cryptography truncatedSHA1Base64EncodedWithoutPadding:phoneNumber.toE164]]; + [contactsByPhoneNumber setObject:contact forKey:phoneNumber.toE164]; + } + } + + NSArray *hashes = [phoneNumbersByHashes allKeys]; + + TSRequest *request = [[TSContactsIntersectionRequest alloc]initWithHashesArray:hashes]; + + [[TSNetworkManager sharedManager] queueAuthenticatedRequest:request success:^(NSURLSessionDataTask *tsTask, id responseDict) { + NSMutableArray *tsIdentifiers = [NSMutableArray array]; + NSMutableDictionary *relayForIdentifier = [NSMutableDictionary dictionary]; + NSArray *contactsArray = [(NSDictionary*)responseDict objectForKey:@"contacts"]; + + if (contactsArray) { + for (NSDictionary *dict in contactsArray) { + NSString *hash = [dict objectForKey:@"token"]; + + if (hash) { + [tsIdentifiers addObject:[phoneNumbersByHashes objectForKey:hash]]; + + NSString *relay = [dict objectForKey:@"relay"]; + if (relay) { + [relayForIdentifier setObject:relay forKey:[phoneNumbersByHashes objectForKey:hash]]; + } + } + } + } + + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + for (NSString *identifier in tsIdentifiers) { + TSRecipient *recipient = [TSRecipient recipientWithTextSecureIdentifier:identifier withTransaction:transaction]; + if (!recipient) { + NSString *relay = [relayForIdentifier objectForKey:recipient]; + recipient = [[TSRecipient alloc] initWithTextSecureIdentifier:identifier relay:relay]; + } + [recipient saveWithTransaction:transaction]; + } + }]; + + [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_DIRECTORY_WAS_UPDATED object:nil]; + [self scheduleUpdate]; + } failure:^(NSURLSessionDataTask *task, NSError *error) { [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_DIRECTORY_FAILED object:nil]; }]; } + @end diff --git a/Signal/src/textsecure/Account/TSAccountManager.h b/Signal/src/textsecure/Account/TSAccountManager.h index 2ccd6150b..9e5e96d9d 100644 --- a/Signal/src/textsecure/Account/TSAccountManager.h +++ b/Signal/src/textsecure/Account/TSAccountManager.h @@ -9,6 +9,9 @@ #import #import "TSConstants.h" +static NSString *const TSRegistrationErrorDomain = @"TSRegistrationErrorDomain"; +static NSString *const TSRegistrationErrorUserInfoHTTPStatus = @"TSHTTPStatus"; + typedef NS_ENUM(NSUInteger, TSRegistrationFailure) { kTSRegistrationFailureAuthentication, kTSRegistrationFailureNetwork, @@ -20,7 +23,7 @@ typedef NS_ENUM(NSUInteger, TSRegistrationFailure) { kTSRegistrationFailureRequest }; -typedef void(^failedVerificationBlock)(TSRegistrationFailure failureType); +typedef void(^failedVerificationBlock)(NSError *error); @interface TSAccountManager : NSObject @@ -69,4 +72,6 @@ typedef void(^failedVerificationBlock)(TSRegistrationFailure failureType); #endif ++ (NSError *)errorForRegistrationFailure:(TSRegistrationFailure)failureType HTTPStatusCode:(long)HTTPStatus; + @end diff --git a/Signal/src/textsecure/Account/TSAccountManager.m b/Signal/src/textsecure/Account/TSAccountManager.m index 501a30741..c19001c64 100644 --- a/Signal/src/textsecure/Account/TSAccountManager.m +++ b/Signal/src/textsecure/Account/TSAccountManager.m @@ -36,7 +36,7 @@ } + (NSString *)registeredNumber { - YapDatabaseConnection *dbConn = [[TSStorageManager sharedManager] databaseConnection]; + YapDatabaseConnection *dbConn = [[TSStorageManager sharedManager] newDatabaseConnection]; __block NSString *phoneNumber; [dbConn readWithBlock:^(YapDatabaseReadTransaction *transaction) { @@ -47,7 +47,7 @@ } + (int)getOrGenerateRegistrationId { - YapDatabaseConnection *dbConn = [[TSStorageManager sharedManager] databaseConnection]; + YapDatabaseConnection *dbConn = [[TSStorageManager sharedManager] newDatabaseConnection]; __block int registrationID; [dbConn readWithBlock:^(YapDatabaseReadTransaction *transaction) { @@ -68,23 +68,28 @@ } + (void)registerForPushNotifications:(NSData *)pushToken success:(successCompletionBlock)success failure:(failedVerificationBlock)failureBlock{ - + NSString *stringToken = [[pushToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<> "]]; [[TSNetworkManager sharedManager] queueAuthenticatedRequest:[[TSRegisterForPushRequest alloc] initWithPushIdentifier:stringToken] success:^(NSURLSessionDataTask *task, id responseObject) { success(); } failure:^(NSURLSessionDataTask *task, NSError *error) { + + NSLog(@"NSError: %@", error.debugDescription); + + TSRegistrationFailure failureType = kTSRegistrationFailureNetwork; switch ([task statusCode]) { case 401: - failureBlock(kTSRegistrationFailureAuthentication); + failureType = kTSRegistrationFailureAuthentication; break; case 415: - failureBlock(kTSRegistrationFailureRequest); + failureType = kTSRegistrationFailureRequest; break; default: - failureBlock(kTSRegistrationFailureNetwork); break; } + + failureBlock([self errorForRegistrationFailure:failureType HTTPStatusCode:[task statusCode]]); }]; } @@ -93,7 +98,7 @@ NSString *authToken = [self generateNewAccountAuthenticationToken]; NSString *signalingKey = [self generateNewSignalingKeyToken]; NSString *phoneNumber = [[tsToken componentsSeparatedByString:@":"] objectAtIndex:0]; - + require(phoneNumber != nil); require(signalingKey != nil); require(authToken != nil); @@ -107,17 +112,27 @@ long statuscode = response.statusCode; if (statuscode == 200 || statuscode == 204) { - + [TSStorageManager storeServerToken:authToken signalingKey:signalingKey phoneNumber:phoneNumber]; - [self registerPreKeys:successBlock failure:failureBlock]; + + [self registerForPushNotifications:pushToken success:^{ + [self registerPreKeys:^{ + successBlock(); + } failure:failureBlock]; + } failure:^(NSError *error) { + failureBlock([self errorForRegistrationFailure:kTSRegistrationFailureNetwork HTTPStatusCode:0]); + }]; } else{ - failureBlock(kTSRegistrationFailureNetwork); + failureBlock([self errorForRegistrationFailure:kTSRegistrationFailureNetwork HTTPStatusCode:statuscode]); } } failure:^(NSURLSessionDataTask *task, NSError *error) { + DDLogError(@"Error registering with TextSecure: %@", error.debugDescription); + //TODO: Cover all error types: https://github.com/WhisperSystems/TextSecure-Server/wiki/API-Protocol - failureBlock(kTSRegistrationFailureNetwork); + // Above link doesn't appear to document the endpoint /v1/accounts/token/{token} - is it similar to /v1/accounts/code/{code} ? + failureBlock([self errorForRegistrationFailure:kTSRegistrationFailureNetwork HTTPStatusCode:[task statusCode]]); }]; } @@ -138,6 +153,40 @@ } failure:failureBlock]; } +#pragma mark Errors + ++ (NSError *)errorForRegistrationFailure:(TSRegistrationFailure)failureType HTTPStatusCode:(long)HTTPStatus { + + NSString *description = NSLocalizedString(@"REGISTRATION_ERROR", @""); + NSString *failureReason = nil; + + // TODO: Need localized strings for the rest of the values in the TSRegistrationFailure enum + if (failureType == kTSRegistrationFailureWrongCode) { + failureReason = NSLocalizedString(@"REGISTER_CHALLENGE_ALERT_VIEW_BODY", @""); + } else if (failureType == kTSRegistrationFailureRateLimit) { + failureReason = NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @""); + } else if (failureType == kTSRegistrationFailureNetwork) { + failureReason = NSLocalizedString(@"REGISTRATION_BODY", @""); + } else { + failureReason = NSLocalizedString(@"REGISTER_CHALLENGE_UNKNOWN_ERROR", @""); + } + + NSMutableDictionary *userInfo = NSMutableDictionary.new; + + userInfo[NSLocalizedDescriptionKey] = description; + + if (failureReason != nil) { + userInfo[NSLocalizedFailureReasonErrorKey] = failureReason; + } + if (HTTPStatus != 0) { + userInfo[TSRegistrationErrorUserInfoHTTPStatus] = @(HTTPStatus); + } + + NSError *error = [NSError errorWithDomain:TSRegistrationErrorDomain code:failureType userInfo:userInfo]; + + return error; +} + #pragma mark Server keying material + (NSString*)generateNewAccountAuthenticationToken { diff --git a/Signal/src/textsecure/Account/TSPreKeyManager.m b/Signal/src/textsecure/Account/TSPreKeyManager.m index 43b68c560..d5f87d4dd 100644 --- a/Signal/src/textsecure/Account/TSPreKeyManager.m +++ b/Signal/src/textsecure/Account/TSPreKeyManager.m @@ -42,7 +42,7 @@ success(); } failure:^(NSURLSessionDataTask *task, NSError *error) { - failureBlock(kTSRegistrationFailureNetwork); + failureBlock([TSAccountManager errorForRegistrationFailure:kTSRegistrationFailureNetwork HTTPStatusCode:0]); }]; } diff --git a/Signal/src/textsecure/Contacts/TSContact.h b/Signal/src/textsecure/Contacts/TSContact.h deleted file mode 100644 index c61f46725..000000000 --- a/Signal/src/textsecure/Contacts/TSContact.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// TSContact.h -// TextSecureKit -// -// Created by Frederic Jacobs on 12/11/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. -// - -#import -#import - -#if TARGET_OS_IPHONE -#import -#import -#endif - -#import "TSInteraction.h" -#import "TSYapDatabaseObject.h" - -typedef NS_OPTIONS(NSInteger, TSServicesAvailable){ - TSServiceRedPhone, - TSServiceTextSecure -}; - -/** - * TSContacts always have one property, the identifier they are registered with on TextSecure. All the rest is optional. - */ - -@interface TSContact : TSYapDatabaseObject - -- (instancetype)initWithRecipientId:(NSString*)recipientId; - -- (TSServicesAvailable)availableServices; -- (TSInteraction*)lastMessageWithTransaction:(YapDatabaseReadTransaction *)transaction; - -#if TARGET_OS_IPHONE -- (ABRecordID*)addressBookID; -- (NSString*)firstName; -- (NSString*)lastName; -#endif - -@end diff --git a/Signal/src/textsecure/Contacts/TSContact.m b/Signal/src/textsecure/Contacts/TSContact.m deleted file mode 100644 index 469321e0a..000000000 --- a/Signal/src/textsecure/Contacts/TSContact.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// TSContact.m -// TextSecureKit -// -// Created by Frederic Jacobs on 12/11/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. -// - -#import "TSContact.h" - -static NSString *recipientKey = @"TSIdentifierRecipientIdKey"; - -@implementation TSContact - -+ (BOOL)supportsSecureCoding{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)aDecoder{ - NSString *recipientId = [aDecoder decodeObjectOfClass:[NSString class] forKey:recipientKey]; - return [self initWithRecipientId:recipientId]; -} - - -+ (NSString*)collection{ - return @"TSContactCollection"; -} - -# pragma mark AddressBook Lookups - -@end diff --git a/Signal/src/textsecure/Contacts/TSRecipient.m b/Signal/src/textsecure/Contacts/TSRecipient.m index a4f6a7b0d..79871328e 100644 --- a/Signal/src/textsecure/Contacts/TSRecipient.m +++ b/Signal/src/textsecure/Contacts/TSRecipient.m @@ -9,10 +9,10 @@ #import "TSStorageManager+IdentityKeyStore.h" #import "TSRecipient.h" -@interface TSRecipient (){ - NSMutableSet *devices; - NSData *verifiedKey; -} +@interface TSRecipient () + +@property (nonatomic, retain) NSMutableSet *devices; +@property (nonatomic, copy) NSData *verifiedKey; @end @@ -22,48 +22,44 @@ return @"TSRecipient"; } -- (instancetype)initWithTextSecureIdentifier:(NSString*)textSecureIdentifier{ +- (instancetype)initWithTextSecureIdentifier:(NSString*)textSecureIdentifier relay:(NSString *)relay{ self = [super initWithUniqueId:textSecureIdentifier]; if (self) { - devices = [NSMutableSet setWithObject:[NSNumber numberWithInt:1]]; - verifiedKey = nil; + _devices = [NSMutableSet setWithObject:[NSNumber numberWithInt:1]]; + _verifiedKey = nil; + _relay = relay; } return self; } + (instancetype)recipientWithTextSecureIdentifier:(NSString*)textSecureIdentifier withTransaction:(YapDatabaseReadTransaction*)transaction{ - TSRecipient *recipient = [self fetchObjectWithUniqueID:textSecureIdentifier transaction:transaction]; - - if (!recipient) { - recipient = [[self alloc] initWithTextSecureIdentifier:textSecureIdentifier]; - } - return recipient; + return [self fetchObjectWithUniqueID:textSecureIdentifier transaction:transaction]; } - (NSSet*)devices{ - return [devices copy]; + return [_devices copy]; } - (void)addDevices:(NSSet *)set{ - [devices unionSet:set]; + [_devices unionSet:set]; } - (void)removeDevices:(NSSet *)set{ - [devices minusSet:set]; + [_devices minusSet:set]; } #pragma mark Fingerprint verification - (BOOL)hasVerifiedFingerprint{ - if (verifiedKey) { - BOOL equalsStoredValue = [verifiedKey isEqualToData:[[TSStorageManager sharedManager] identityKeyForRecipientId:self.uniqueId]]; + if (self.verifiedKey) { + BOOL equalsStoredValue = [self.verifiedKey isEqualToData:[[TSStorageManager sharedManager] identityKeyForRecipientId:self.uniqueId]]; if (equalsStoredValue) { return YES; } else{ - verifiedKey = nil; + self.verifiedKey = nil; return NO; } @@ -74,9 +70,9 @@ - (void)setFingerPrintVerified:(BOOL)verified transaction:(YapDatabaseReadTransaction*)transaction{ if (verified) { - verifiedKey = [[TSStorageManager sharedManager] identityKeyForRecipientId:self.uniqueId]; + self.verifiedKey = [[TSStorageManager sharedManager] identityKeyForRecipientId:self.uniqueId]; } else{ - verifiedKey = nil; + self.verifiedKey = nil; } } diff --git a/Signal/src/textsecure/Contacts/TSThread.m b/Signal/src/textsecure/Contacts/TSThread.m index 56f705e62..7171b2dda 100644 --- a/Signal/src/textsecure/Contacts/TSThread.m +++ b/Signal/src/textsecure/Contacts/TSThread.m @@ -8,7 +8,8 @@ #import "TSThread.h" -#import "TSContact.h" +#import "Environment.h" +#import "ContactsManager.h" #import "TSGroup.h" @implementation TSThread @@ -32,4 +33,16 @@ return FALSE; } +- (uint64_t)lastMessageId{ + return 0; +} + +- (NSDate*)lastMessageDate{ + return [NSDate date]; +} + +- (UIImage*)image{ + return nil; +} + @end diff --git a/Signal/src/textsecure/Contacts/Threads/TSContactThread.h b/Signal/src/textsecure/Contacts/Threads/TSContactThread.h index 887ad15f9..8a62249ef 100644 --- a/Signal/src/textsecure/Contacts/Threads/TSContactThread.h +++ b/Signal/src/textsecure/Contacts/Threads/TSContactThread.h @@ -13,7 +13,7 @@ @interface TSContactThread : TSThread -+ (instancetype)threadWithContactId:(NSString*)contactId; ++ (instancetype)threadWithContactId:(NSString*)contactId transaction:(YapDatabaseReadWriteTransaction*)transaction; - (TSRecipient*)recipient; diff --git a/Signal/src/textsecure/Contacts/Threads/TSContactThread.m b/Signal/src/textsecure/Contacts/Threads/TSContactThread.m index b9660f325..65f693475 100644 --- a/Signal/src/textsecure/Contacts/Threads/TSContactThread.m +++ b/Signal/src/textsecure/Contacts/Threads/TSContactThread.m @@ -8,7 +8,9 @@ #import "TSContactThread.h" +#import "Environment.h" #import "TSStorageManager.h" +#import "ContactsManager.h" #define TSContactThreadPrefix @"c" @@ -23,13 +25,13 @@ return self; } -+ (instancetype)threadWithContactId:(NSString*)contactId{ ++ (instancetype)threadWithContactId:(NSString*)contactId transaction:(YapDatabaseReadWriteTransaction*)transaction { - TSContactThread *thread = [self fetchObjectWithUniqueID:[self threadIdFromContactId:contactId]]; + TSContactThread *thread = [self fetchObjectWithUniqueID:[self threadIdFromContactId:contactId] transaction:transaction]; if (!thread) { thread = [[TSContactThread alloc] initWithContactId:contactId]; - [thread save]; + [thread saveWithTransaction:transaction]; } return thread; @@ -43,6 +45,17 @@ return false; } +- (NSString*)name{ + NSString *contactId = [self contactIdentifier]; + NSString *name = [[Environment getCurrent].contactsManager nameStringForPhoneIdentifier:contactId]; + + if (!name) { + name = contactId; + } + + return name; +} + + (NSString*)threadIdFromContactId:(NSString*)contactId{ return [TSContactThreadPrefix stringByAppendingString:contactId]; } diff --git a/Signal/src/textsecure/Messages/TSCall.h b/Signal/src/textsecure/Messages/TSCall.h index 7200224ad..9cb3c219b 100644 --- a/Signal/src/textsecure/Messages/TSCall.h +++ b/Signal/src/textsecure/Messages/TSCall.h @@ -9,7 +9,6 @@ #import #import "TSInteraction.h" -#import "TSContact.h" @interface TSCall : TSInteraction diff --git a/Signal/src/textsecure/Messages/TSErrorMessage.h b/Signal/src/textsecure/Messages/TSErrorMessage.h index 2c2a0171b..aa1f1751a 100644 --- a/Signal/src/textsecure/Messages/TSErrorMessage.h +++ b/Signal/src/textsecure/Messages/TSErrorMessage.h @@ -22,7 +22,7 @@ typedef NS_ENUM(int32_t, TSErrorMessageType){ TSErrorMessageInvalidVersion }; -+ (instancetype)invalidProtocolBufferWithSignal:(IncomingPushMessageSignal*)preKeyMessage; ++ (instancetype)invalidProtocolBufferWithException:(NSException*)exception; + (instancetype)duplicateMessageWithSignal:(IncomingPushMessageSignal*)preKeyMessage; + (instancetype)invalidVersionWithSignal:(IncomingPushMessageSignal*)preKeyMessage; + (instancetype)missingKeyIdWithSignal:(IncomingPushMessageSignal*)preKeyMessage; diff --git a/Signal/src/textsecure/Messages/TSMessagesManager.m b/Signal/src/textsecure/Messages/TSMessagesManager.m index 387728b61..5ba6b0a05 100644 --- a/Signal/src/textsecure/Messages/TSMessagesManager.m +++ b/Signal/src/textsecure/Messages/TSMessagesManager.m @@ -14,8 +14,6 @@ #import "IncomingPushMessageSignal.pb.h" #import "NSData+Base64.h" -#import "TSContact.h" - #import "TSIncomingMessage.h" #import "TSErrorMessage.h" #import "TSInfoMessage.h" @@ -49,46 +47,56 @@ self = [super init]; if (self) { - _dbConnection = [TSStorageManager sharedManager].databaseConnection; + _dbConnection = [TSStorageManager sharedManager].newDatabaseConnection; } return self; } - (void)handleMessageSignal:(NSData*)signalData{ - NSData *decryptedPayload = [Cryptography decryptAppleMessagePayload:signalData withSignalingKey:TSStorageManager.signalingKey]; + NSString *base64String = [[NSString alloc] initWithData:signalData encoding:NSUTF8StringEncoding]; + + NSData *encryptedSignal = [NSData dataFromBase64String:base64String]; + NSData *decryptedPayload = [Cryptography decryptAppleMessagePayload:encryptedSignal + withSignalingKey:TSStorageManager.signalingKey]; if (!decryptedPayload) { + DDLogWarn(@"Failed to decrypt incoming payload or bad HMAC"); return; } - IncomingPushMessageSignal *messageSignal = [IncomingPushMessageSignal parseFromData:decryptedPayload]; - - switch (messageSignal.type) { - case IncomingPushMessageSignalTypeCiphertext: - [self handleSecureMessage:messageSignal]; - break; - - case IncomingPushMessageSignalTypePrekeyBundle: - [self handlePreKeyBundle:messageSignal]; - break; - + @try { + IncomingPushMessageSignal *messageSignal = [IncomingPushMessageSignal parseFromData:decryptedPayload]; + + switch (messageSignal.type) { + case IncomingPushMessageSignalTypeCiphertext: + [self handleSecureMessage:messageSignal]; + break; + + case IncomingPushMessageSignalTypePrekeyBundle: + [self handlePreKeyBundle:messageSignal]; + break; + // Other messages are just dismissed for now. - - case IncomingPushMessageSignalTypeKeyExchange: - NSLog(@"Key exchange!"); - break; - case IncomingPushMessageSignalTypePlaintext: - NSLog(@"Plaintext"); - break; - case IncomingPushMessageSignalTypeReceipt: - NSLog(@"Receipt"); - break; - case IncomingPushMessageSignalTypeUnknown: - NSLog(@"Unknown"); - break; - default: - break; + + case IncomingPushMessageSignalTypeKeyExchange: + DDLogWarn(@"Received Key Exchange Message, not supported"); + break; + case IncomingPushMessageSignalTypePlaintext: + DDLogWarn(@"Received a plaintext message"); + break; + case IncomingPushMessageSignalTypeReceipt: + DDLogInfo(@"Received a delivery receipt"); + break; + case IncomingPushMessageSignalTypeUnknown: + DDLogWarn(@"Received an unknown message type"); + break; + default: + break; + } + } + @catch (NSException *exception) { + DDLogWarn(@"Received an incorrectly formatted protocol buffer: %@", exception.debugDescription); } } @@ -102,16 +110,12 @@ // Deal with failure } - WhisperMessage *message = [[WhisperMessage alloc] initWithData:secureMessage.message]; - - if (!message) { - [self failedProtocolBufferDeserialization:secureMessage]; - return; - } - - NSData *plaintext; + PushMessageContent *content; @try { + + WhisperMessage *message = [[WhisperMessage alloc] initWithData:secureMessage.message]; + SessionCipher *cipher = [[SessionCipher alloc] initWithSessionStore:storageManager preKeyStore:storageManager signedPreKeyStore:storageManager @@ -119,20 +123,15 @@ recipientId:recipientId deviceId:deviceId]; - plaintext = [[cipher decrypt:message] removePadding]; + NSData *plaintext = [[cipher decrypt:message] removePadding]; + + content = [PushMessageContent parseFromData:plaintext]; } @catch (NSException *exception) { [self processException:exception pushSignal:secureMessage]; return; } - PushMessageContent *content = [PushMessageContent parseFromData:plaintext]; - - if (!content) { - [self failedProtocolBufferDeserialization:secureMessage]; - return; - } - [self handleIncomingMessage:secureMessage withPushContent:content]; } } @@ -143,16 +142,11 @@ NSString *recipientId = preKeyMessage.source; int deviceId = preKeyMessage.sourceDevice; - PreKeyWhisperMessage *message = [[PreKeyWhisperMessage alloc] initWithData:preKeyMessage.message]; + PushMessageContent *content; - if (!message) { - [self failedProtocolBufferDeserialization:preKeyMessage]; - return; - } - - - NSData *plaintext; @try { + PreKeyWhisperMessage *message = [[PreKeyWhisperMessage alloc] initWithData:preKeyMessage.message]; + SessionCipher *cipher = [[SessionCipher alloc] initWithSessionStore:storageManager preKeyStore:storageManager signedPreKeyStore:storageManager @@ -160,20 +154,15 @@ recipientId:recipientId deviceId:deviceId]; - plaintext = [[cipher decrypt:message] removePadding]; + NSData *plaintext = [[cipher decrypt:message] removePadding]; + + content = [PushMessageContent parseFromData:plaintext]; } @catch (NSException *exception) { [self processException:exception pushSignal:preKeyMessage]; return; } - PushMessageContent *content = [PushMessageContent parseFromData:plaintext]; - - if (!content) { - [self failedProtocolBufferDeserialization:preKeyMessage]; - return; - } - [self handleIncomingMessage:preKeyMessage withPushContent:content]; } @@ -196,12 +185,14 @@ } - (void)handleEndSessionMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content{ - TSContactThread *thread = [TSContactThread threadWithContactId:message.source]; - uint64_t timeStamp = message.timestamp; - - if (thread){ - [[[TSInfoMessage alloc] initWithTimestamp:timeStamp inThread:thread messageType:TSInfoMessageTypeSessionDidEnd] save]; - } + [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + TSContactThread *thread = [TSContactThread threadWithContactId:message.source transaction:transaction]; + uint64_t timeStamp = message.timestamp; + + if (thread){ + [[[TSInfoMessage alloc] initWithTimestamp:timeStamp inThread:thread messageType:TSInfoMessageTypeSessionDidEnd] saveWithTransaction:transaction]; + } + }]; [[TSStorageManager sharedManager] deleteAllSessionsForContact:message.source]; } @@ -219,25 +210,22 @@ NSString *body = content.body; NSData *groupId = content.hasGroup?content.group.id:nil; - TSIncomingMessage *incomingMessage; - - if (groupId) { - TSGroupThread *thread = [TSGroupThread threadWithGroupId:groupId]; - incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:timeStamp inThread:thread authorId:message.source messageBody:body attachements:nil]; - } else{ - TSContactThread *thread = [TSContactThread threadWithContactId:message.source]; - incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:timeStamp inThread:thread messageBody:body attachements:nil]; - } - - NSLog(@"Incoming message: %@", incomingMessage.body); - [incomingMessage save]; -} - -- (void)failedProtocolBufferDeserialization:(IncomingPushMessageSignal*)signal{ - NSLog(@"Failed Protocol buffer deserialization"); - TSErrorMessage *errorMessage = [TSErrorMessage invalidProtocolBufferWithSignal:signal]; - [errorMessage save]; - return; + [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + TSIncomingMessage *incomingMessage; + TSThread *thread; + if (groupId) { + TSGroupThread *gThread = [TSGroupThread threadWithGroupId:groupId]; + incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:timeStamp inThread:gThread authorId:message.source messageBody:body attachements:nil]; + thread = gThread; + } else{ + TSContactThread *cThread = [TSContactThread threadWithContactId:message.source transaction:transaction]; + incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:timeStamp inThread:cThread messageBody:body attachements:nil]; + thread = cThread; + } + + [incomingMessage saveWithTransaction:transaction]; + [thread saveWithTransaction:transaction]; + }]; } - (void)processException:(NSException*)exception pushSignal:(IncomingPushMessageSignal*)signal{ diff --git a/Signal/src/textsecure/Network/API/Requests/TSContactsIntersectionRequest.h b/Signal/src/textsecure/Network/API/Requests/TSContactsIntersectionRequest.h index 7a794bc98..81998329b 100644 --- a/Signal/src/textsecure/Network/API/Requests/TSContactsIntersectionRequest.h +++ b/Signal/src/textsecure/Network/API/Requests/TSContactsIntersectionRequest.h @@ -8,6 +8,8 @@ #import "TSRequest.h" +#import "TSNetworkManager.h" + @interface TSContactsIntersectionRequest : TSRequest - (id)initWithHashesArray:(NSArray*)hashes; diff --git a/Signal/src/textsecure/Network/API/Requests/TSRegisterWithTokenRequest.m b/Signal/src/textsecure/Network/API/Requests/TSRegisterWithTokenRequest.m index 0bb816b12..bca8be00c 100644 --- a/Signal/src/textsecure/Network/API/Requests/TSRegisterWithTokenRequest.m +++ b/Signal/src/textsecure/Network/API/Requests/TSRegisterWithTokenRequest.m @@ -21,7 +21,10 @@ self.numberToValidate = number; - [self.parameters addEntriesFromDictionary:@{@"signalingKey": signalingKey, @"AuthKey": authKey, @"supportsSMS": @FALSE, @"registrationId": [NSString stringWithFormat:@"%i",[TSAccountManager getOrGenerateRegistrationId]]}]; + [self.parameters addEntriesFromDictionary:@{@"signalingKey": signalingKey, + @"AuthKey": authKey, + @"supportsSMS": @"0", + @"registrationId": [NSString stringWithFormat:@"%i",[TSAccountManager getOrGenerateRegistrationId]]}]; [self setHTTPMethod:@"PUT"]; diff --git a/Signal/src/textsecure/Network/API/TSNetworkManager.m b/Signal/src/textsecure/Network/API/TSNetworkManager.m index 7cbd2bb75..4b01859b0 100644 --- a/Signal/src/textsecure/Network/API/TSNetworkManager.m +++ b/Signal/src/textsecure/Network/API/TSNetworkManager.m @@ -39,7 +39,7 @@ if (self = [super init]) { NSURLSessionConfiguration *sessionConf = NSURLSessionConfiguration.ephemeralSessionConfiguration; self.operationManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[[NSURL alloc] initWithString:textSecureServerURL] sessionConfiguration:sessionConf]; - AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; //TODO: pinging cert policy.allowInvalidCertificates = YES; NSString *certPath = [NSBundle.mainBundle pathForResource:@"whisperReal" ofType:@"cer"]; NSData *certData = [NSData dataWithContentsOfFile:certPath]; diff --git a/Signal/src/textsecure/Network/WebSockets/TSSocketManager.m b/Signal/src/textsecure/Network/WebSockets/TSSocketManager.m index feb79d1bd..76e02c0c5 100644 --- a/Signal/src/textsecure/Network/WebSockets/TSSocketManager.m +++ b/Signal/src/textsecure/Network/WebSockets/TSSocketManager.m @@ -53,7 +53,7 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification"; + (void)becomeActive { TSSocketManager *sharedInstance = [self sharedManager]; - SRWebSocket *socket =[sharedInstance websocket]; + SRWebSocket *socket = [sharedInstance websocket]; if (socket) { switch ([socket readyState]) { @@ -76,8 +76,8 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification"; NSString *webSocketConnect = [textSecureWebSocketAPI stringByAppendingString:[[self sharedManager] webSocketAuthenticationString]]; NSURL *webSocketConnectURL = [NSURL URLWithString:webSocketConnect]; - socket = [[SRWebSocket alloc] initWithURL:webSocketConnectURL]; - socket.delegate = [self sharedManager]; + socket = [[SRWebSocket alloc] initWithURL:webSocketConnectURL]; + socket.delegate = [self sharedManager]; [socket open]; [[self sharedManager] setWebsocket:socket]; } @@ -90,7 +90,7 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification"; #pragma mark - Delegate methods - (void) webSocketDidOpen:(SRWebSocket *)webSocket { - self.timer = [NSTimer scheduledTimerWithTimeInterval:kWebSocketHeartBeat target:self selector:@selector(webSocketHeartBeat) userInfo:nil repeats:YES]; + self.timer = [NSTimer scheduledTimerWithTimeInterval:kWebSocketHeartBeat target:self selector:@selector(webSocketHeartBeat) userInfo:nil repeats:YES]; self.status = kSocketStatusOpen; } @@ -140,7 +140,6 @@ NSString * const SocketConnectingNotification = @"SocketConnectingNotification"; } - (void)webSocketHeartBeat { - DDLogVerbose(@"WebSocket sent ping"); [self.websocket sendPing:nil]; } diff --git a/Signal/src/textsecure/Storage/AxolotlStore/TSStorageManager+SignedPreKeyStore.m b/Signal/src/textsecure/Storage/AxolotlStore/TSStorageManager+SignedPreKeyStore.m index 75364a727..6b765c204 100644 --- a/Signal/src/textsecure/Storage/AxolotlStore/TSStorageManager+SignedPreKeyStore.m +++ b/Signal/src/textsecure/Storage/AxolotlStore/TSStorageManager+SignedPreKeyStore.m @@ -37,7 +37,7 @@ - (NSArray*)loadSignedPreKeys { NSMutableArray *signedPreKeyRecords = [NSMutableArray array]; - YapDatabaseConnection *conn = [self databaseConnection]; + YapDatabaseConnection *conn = [self newDatabaseConnection]; [conn readWithBlock:^(YapDatabaseReadTransaction *transaction) { [transaction enumerateRowsInCollection:TSStorageManagerSignedPreKeyStoreCollection diff --git a/Signal/src/textsecure/Storage/TSDatabaseView.h b/Signal/src/textsecure/Storage/TSDatabaseView.h index 833311ff7..409385ac4 100644 --- a/Signal/src/textsecure/Storage/TSDatabaseView.h +++ b/Signal/src/textsecure/Storage/TSDatabaseView.h @@ -10,4 +10,12 @@ @interface TSDatabaseView : NSObject +extern NSString *TSThreadGroup; + +extern NSString *TSThreadDatabaseViewExtensionName; +extern NSString *TSMessageDatabaseViewExtensionName; + ++ (BOOL)registerThreadDatabaseView; ++ (BOOL)registerBuddyConversationDatabaseView; + @end diff --git a/Signal/src/textsecure/Storage/TSDatabaseView.m b/Signal/src/textsecure/Storage/TSDatabaseView.m index a1e03be9e..58536d055 100644 --- a/Signal/src/textsecure/Storage/TSDatabaseView.m +++ b/Signal/src/textsecure/Storage/TSDatabaseView.m @@ -11,17 +11,18 @@ #import #import "TSThread.h" -#import "TSStorageManager.h" #import "TSInteraction.h" +#import "TSStorageManager.h" +#import "TSRecipient.h" NSString *TSThreadGroup = @"TSThreadGroup"; -NSString *TSThreadDatabaseViewExtensionName = @"TSThreadDatabaseViewExtensionName"; -NSString *TSMessageDatabaseViewExtensionName = @"TSMessageDatabaseViewExtensionName"; +NSString *TSThreadDatabaseViewExtensionName = @"TSThreadDatabaseViewExtensionName"; +NSString *TSMessageDatabaseViewExtensionName = @"TSMessageDatabaseViewExtensionName"; @implementation TSDatabaseView -+ (BOOL)registerThreadDatabaseView{ ++ (BOOL)registerThreadDatabaseView { YapDatabaseView *threadView = [[TSStorageManager sharedManager].database registeredExtension:TSThreadDatabaseViewExtensionName]; if (threadView) { return YES; @@ -61,7 +62,7 @@ NSString *TSMessageDatabaseViewExtensionName = @"TSMessageDatabaseViewExtensionN return [[TSStorageManager sharedManager].database registerExtension:databaseView withName:TSThreadDatabaseViewExtensionName]; } -+ (BOOL)registerBuddyConversationDatabaseView{ ++ (BOOL)registerBuddyConversationDatabaseView { if ([[TSStorageManager sharedManager].database registeredExtension:TSMessageDatabaseViewExtensionName]) { return YES; } diff --git a/Signal/src/textsecure/Storage/TSStorageManager+keyingMaterial.m b/Signal/src/textsecure/Storage/TSStorageManager+keyingMaterial.m index 49c9c2002..540116634 100644 --- a/Signal/src/textsecure/Storage/TSStorageManager+keyingMaterial.m +++ b/Signal/src/textsecure/Storage/TSStorageManager+keyingMaterial.m @@ -22,7 +22,7 @@ } + (void)storeServerToken:(NSString*)authToken signalingKey:(NSString*)signalingKey phoneNumber:(NSString*)phoneNumber { - YapDatabaseConnection *dbConn = [[self sharedManager] databaseConnection]; + YapDatabaseConnection *dbConn = [[self sharedManager] dbConnection]; [dbConn readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [transaction setObject:authToken forKey:TSStorageServerAuthToken inCollection:TSStorageUserAccountCollection]; diff --git a/Signal/src/textsecure/Storage/TSStorageManager.h b/Signal/src/textsecure/Storage/TSStorageManager.h index af26df20e..5ff5678c6 100644 --- a/Signal/src/textsecure/Storage/TSStorageManager.h +++ b/Signal/src/textsecure/Storage/TSStorageManager.h @@ -15,12 +15,15 @@ @class PreKeyRecord; @class SignedPreKeyRecord; +extern NSString *const TSUIDatabaseConnectionDidUpdateNotification; + @interface TSStorageManager : NSObject + (instancetype)sharedManager; +- (void)setupDatabase; - (YapDatabase*)database; -- (YapDatabaseConnection*)databaseConnection; +- (YapDatabaseConnection*)newDatabaseConnection; - (void)setObject:(id)object forKey:(NSString*)key inCollection:(NSString*)collection; - (void)removeObjectForKey:(NSString*)string inCollection:(NSString *)collection; @@ -38,4 +41,6 @@ - (SignedPreKeyRecord*)signedPreKeyRecordForKey:(NSString*)key inCollection:(NSString*)collection; - (void)purgeCollection:(NSString*)collection; +@property (nonatomic, readonly) YapDatabaseConnection *dbConnection; + @end diff --git a/Signal/src/textsecure/Storage/TSStorageManager.m b/Signal/src/textsecure/Storage/TSStorageManager.m index fb7994aef..1460a586c 100644 --- a/Signal/src/textsecure/Storage/TSStorageManager.m +++ b/Signal/src/textsecure/Storage/TSStorageManager.m @@ -13,6 +13,11 @@ #import "CryptoTools.h" #import "NSData+Base64.h" +#import "TSDatabaseView.h" + + +NSString *const TSUIDatabaseConnectionDidUpdateNotification = @"TSUIDatabaseConnectionDidUpdateNotification"; + static const NSString *const databaseName = @"Signal.sqlite"; static NSString * keychainService = @"TSKeyChainService"; static NSString * keychainDBPassAccount = @"TSDatabasePass"; @@ -20,7 +25,6 @@ static NSString * keychainDBPassAccount = @"TSDatabasePass"; @interface TSStorageManager () @property YapDatabase *database; -@property YapDatabaseConnection *dbConnection; @end @@ -31,6 +35,7 @@ static NSString * keychainDBPassAccount = @"TSDatabasePass"; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] init]; + [sharedMyManager protectDatabaseFile]; }); return sharedMyManager; } @@ -38,34 +43,58 @@ static NSString * keychainDBPassAccount = @"TSDatabasePass"; - (instancetype)init { self = [super init]; - if (self) { - self.database = [self newDatabaseInit]; - self.dbConnection = self.databaseConnection; - } - - return self; -} - -- (YapDatabase*)newDatabaseInit{ YapDatabaseOptions *options = [[YapDatabaseOptions alloc] init]; options.corruptAction = YapDatabaseCorruptAction_Fail; options.passphraseBlock = ^{ return [self databasePassword]; }; - return [[YapDatabase alloc] initWithPath:[self dbPath] - objectSerializer:NULL - objectDeserializer:NULL - metadataSerializer:NULL - metadataDeserializer:NULL - objectSanitizer:NULL - metadataSanitizer:NULL - options:options]; - + _database = [[YapDatabase alloc] initWithPath:[self dbPath] + objectSerializer:NULL + objectDeserializer:NULL + metadataSerializer:NULL + metadataDeserializer:NULL + objectSanitizer:NULL + metadataSanitizer:NULL + options:options]; + _dbConnection = self.newDatabaseConnection; + return self; +} + +- (void)setupDatabase { + [TSDatabaseView registerThreadDatabaseView]; + [TSDatabaseView registerBuddyConversationDatabaseView]; +} + +/** + * Protects the preference and logs file with disk encryption and prevents them to leak to iCloud. + */ + +- (void)protectDatabaseFile{ + + NSDictionary *attrs = @{NSFileProtectionKey: NSFileProtectionCompleteUntilFirstUserAuthentication}; + NSError *error; + + + [NSFileManager.defaultManager setAttributes:attrs ofItemAtPath:[self dbPath] error:&error]; + [[NSURL fileURLWithPath:[self dbPath]] setResourceValue:@YES + forKey:NSURLIsExcludedFromBackupKey + error:&error]; + + if (error) { + DDLogError(@"Error while removing log files from backup: %@", error.description); + UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"WARNING", @"") + message:NSLocalizedString(@"DISABLING_BACKUP_FAILED", @"") + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"") + otherButtonTitles:nil]; + [alert show]; + return; + } } -- (YapDatabaseConnection *)databaseConnection { +- (YapDatabaseConnection *)newDatabaseConnection { return self.database.newConnection; } @@ -209,8 +238,7 @@ static NSString * keychainDBPassAccount = @"TSDatabasePass"; DDLogError(@"Failed to delete database: %@", error.description); } - self.database = [self newDatabaseInit]; - self.dbConnection = self.databaseConnection; + [self setupDatabase]; } @end diff --git a/Signal/src/textsecure/Storage/TSYapDatabaseObject.m b/Signal/src/textsecure/Storage/TSYapDatabaseObject.m index d18cd1188..bcdf47a0c 100644 --- a/Signal/src/textsecure/Storage/TSYapDatabaseObject.m +++ b/Signal/src/textsecure/Storage/TSYapDatabaseObject.m @@ -31,7 +31,7 @@ } - (void)save{ - [[TSStorageManager sharedManager].databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self saveWithTransaction:transaction]; }]; } @@ -43,7 +43,7 @@ - (void)remove{ - [[TSStorageManager sharedManager].databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self removeWithTransaction:transaction]; }]; } @@ -62,7 +62,7 @@ + (instancetype) fetchObjectWithUniqueID:(NSString *)uniqueID{ __block id object; - [[TSStorageManager sharedManager].databaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { object = [transaction objectForKey:uniqueID inCollection:[self collection]]; }]; diff --git a/Signal/src/textsecure/Util/Cryptography.m b/Signal/src/textsecure/Util/Cryptography.m index 789e11303..f685a978f 100755 --- a/Signal/src/textsecure/Util/Cryptography.m +++ b/Signal/src/textsecure/Util/Cryptography.m @@ -7,6 +7,7 @@ // #import "Cryptography.h" +#import "Constraints.h" #import #import #import @@ -64,7 +65,7 @@ return output; } -#pragma makr SHA256 +#pragma mark SHA256 +(NSData*) computeSHA256:(NSData *)data truncatedToBytes:(int)truncatedBytes { uint8_t digest[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(data.bytes, (unsigned int)data.length, digest); @@ -147,7 +148,15 @@ -+(NSData*) decryptCBCMode:(NSData*) dataToDecrypt withKey:(NSData*) key withIV:(NSData*) iv withVersion:(NSData*)version withHMACKey:(NSData*) hmacKey withHMACType:(TSMACType)hmacType forHMAC:(NSData *)hmac { ++(NSData*)decryptCBCMode:(NSData*)dataToDecrypt + key:(NSData*)key + IV:(NSData*)iv + version:(NSData*)version + HMACKey:(NSData*) hmacKey + HMACType:(TSMACType)hmacType + matchingHMAC:(NSData *)hmac +{ + /* AES256 CBC encrypt then mac Returns nil if hmac invalid or decryption fails @@ -160,8 +169,8 @@ [dataToHmac appendData:iv]; [dataToHmac appendData:dataToDecrypt]; - // verify hmac NSData* ourHmacData; + if(hmacType == TSHMACSHA1Truncated10Bytes) { ourHmacData = [Cryptography truncatedSHA1HMAC:dataToHmac withHMACKey:hmacKey truncation:10]; } @@ -190,12 +199,13 @@ free(buffer); return nil; - - } #pragma mark methods which use AES CBC -+(NSData*) decryptAppleMessagePayload:(NSData*)payload withSignalingKey:(NSString*)signalingKeyString{ ++(NSData*)decryptAppleMessagePayload:(NSData*)payload withSignalingKey:(NSString*)signalingKeyString{ + require(payload); + require(signalingKeyString); + unsigned char version[1]; unsigned char iv[16]; NSUInteger ciphertext_length = ([payload length]-10-17)*sizeof(char); @@ -209,7 +219,15 @@ NSData* signalingKey = [NSData dataFromBase64String:signalingKeyString]; NSData* signalingKeyAESKeyMaterial = [signalingKey subdataWithRange:NSMakeRange(0, 32)]; NSData* signalingKeyHMACKeyMaterial = [signalingKey subdataWithRange:NSMakeRange(32, 20)]; - return [Cryptography decryptCBCMode:[NSData dataWithBytesNoCopy:ciphertext length:ciphertext_length freeWhenDone:YES] withKey:signalingKeyAESKeyMaterial withIV:[NSData dataWithBytes:iv length:16] withVersion:[NSData dataWithBytes:version length:1] withHMACKey:signalingKeyHMACKeyMaterial withHMACType:TSHMACSHA256Truncated10Bytes forHMAC:[NSData dataWithBytes:mac length:10]]; + return [Cryptography decryptCBCMode:[NSData dataWithBytesNoCopy:ciphertext + length:ciphertext_length + freeWhenDone:YES] + key:signalingKeyAESKeyMaterial + IV:[NSData dataWithBytes:iv length:16] + version:[NSData dataWithBytes:version length:1] + HMACKey:signalingKeyHMACKeyMaterial + HMACType:TSHMACSHA256Truncated10Bytes + matchingHMAC:[NSData dataWithBytes:mac length:10]]; } @@ -221,7 +239,7 @@ NSData *iv = [dataToDecrypt subdataWithRange:NSMakeRange(0, 10)]; NSData *encryptedAttachment = [dataToDecrypt subdataWithRange:NSMakeRange(10, [dataToDecrypt length]-10-10)]; NSData *hmac = [dataToDecrypt subdataWithRange:NSMakeRange([dataToDecrypt length]-10, 10)]; - return [Cryptography decryptCBCMode:encryptedAttachment withKey:encryptionKey withIV:iv withVersion:nil withHMACKey:hmacKey withHMACType:TSHMACSHA256Truncated10Bytes forHMAC:hmac]; + return [Cryptography decryptCBCMode:encryptedAttachment key:encryptionKey IV:iv version:nil HMACKey:hmacKey HMACType:TSHMACSHA256Truncated10Bytes matchingHMAC:hmac]; } diff --git a/Signal/src/view controllers/ActionContactDetailCell.m b/Signal/src/view controllers/ActionContactDetailCell.m index 23061e40d..00f78ecdc 100644 --- a/Signal/src/view controllers/ActionContactDetailCell.m +++ b/Signal/src/view controllers/ActionContactDetailCell.m @@ -9,6 +9,7 @@ #import "DJWActionSheet.h" #import "ActionContactDetailCell.h" + @implementation ActionContactDetailCell - (void)awakeFromNib { @@ -22,7 +23,15 @@ } - +-(IBAction)messageButtonTapped:(id)sender +{ + NSLog(@"%s", __PRETTY_FUNCTION__); +} + +-(IBAction)callButtonTapped:(id)sender +{ + NSLog(@"%s", __PRETTY_FUNCTION__); +} @end diff --git a/Signal/src/view controllers/CodeVerificationViewController.m b/Signal/src/view controllers/CodeVerificationViewController.m index 768b85ade..e618535a9 100644 --- a/Signal/src/view controllers/CodeVerificationViewController.m +++ b/Signal/src/view controllers/CodeVerificationViewController.m @@ -40,14 +40,16 @@ [self registerWithSuccess:^{ [self performSegueWithIdentifier:@"verifiedSegue" sender:self]; - } failure:^{ + } failure:^(NSError *error) { // TODO: Unlock UI NSLog(@"Failed to register"); + + [self showAlertForError:error]; }]; } -- (void)registerWithSuccess:(void(^)())success failure:(void(^)())failure{ +- (void)registerWithSuccess:(void(^)())success failure:(void(^)(NSError *))failure{ //TODO: Refactor this to use futures? Better error handling needed. Good enough for PoC [[RPServerRequestsManager sharedInstance] performRequest:[RPAPICall verifyVerificationCode:_challengeTextField.text] success:^(NSURLSessionDataTask *task, id responseObject) { @@ -56,29 +58,68 @@ [TSAccountManager registerWithRedPhoneToken:signupToken pushToken:pushToken success:^{ success(); - } failure:^(TSRegistrationFailure failureType) { - failure(); + } failure:^(NSError *error) { + failure(error); }]; - } failure:^{ - failure(); + // PushManager shows its own error alerts, so we don't want to show a second one + failure(nil); }]; } failure:^(NSURLSessionDataTask *task, NSError *error) { - NSString *alertTitle = NSLocalizedString(@"REGISTRATION_ERROR", @""); - NSHTTPURLResponse* badResponse = (NSHTTPURLResponse*)task.response; - if (badResponse.statusCode == 401) { - SignalAlertView(alertTitle, REGISTER_CHALLENGE_ALERT_VIEW_BODY); - } else if (badResponse.statusCode == 413){ - SignalAlertView(alertTitle, NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @"")); - } else { - NSString *alertBodyString = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"SERVER_CODE", @""),(unsigned long)badResponse.statusCode]; - SignalAlertView (alertTitle, alertBodyString); - } + NSError *responseError = [self errorForResponse:badResponse]; + + failure(responseError); }]; } +// TODO: If useful, this could possibly go in a less-specific class +- (void)showAlertForError:(NSError *)error { + + if (error == nil) { + NSLog(@"%@: Error condition, but no NSError to display", self.class); + return; + } else if (error.localizedDescription.length == 0) { + NSLog(@"%@: Unable to display error because localizedDescription was not set: %@", self.class, error); + return; + } + + NSString *alertBody = nil; + if (error.localizedFailureReason.length > 0) { + alertBody = error.localizedFailureReason; + } else if (error.localizedRecoverySuggestion.length > 0) { + alertBody = error.localizedRecoverySuggestion; + } + + SignalAlertView(error.localizedDescription, alertBody); +} + + +- (NSError *)errorForResponse:(NSHTTPURLResponse *)badResponse { + + NSString *description = NSLocalizedString(@"REGISTRATION_ERROR", @""); + NSString *failureReason = nil; + TSRegistrationFailure failureType; + + if (badResponse.statusCode == 401) { + failureReason = REGISTER_CHALLENGE_ALERT_VIEW_BODY; + failureType = kTSRegistrationFailureAuthentication; + } else if (badResponse.statusCode == 413){ + failureReason = NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @""); + failureType = kTSRegistrationFailureRateLimit; + } else { + failureReason = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"SERVER_CODE", @""),(unsigned long)badResponse.statusCode]; + failureType = kTSRegistrationFailureNetwork; + } + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey: description, NSLocalizedFailureReasonErrorKey: failureReason}; + NSError *error = [NSError errorWithDomain:TSRegistrationErrorDomain code:failureType userInfo:userInfo]; + + return error; +} + + #pragma mark - Keyboard notifications - (void)initializeKeyboardHandlers{ diff --git a/Signal/src/view controllers/ContactDetailCell.h b/Signal/src/view controllers/ContactDetailCell.h index ce77b359a..77a09547b 100644 --- a/Signal/src/view controllers/ContactDetailCell.h +++ b/Signal/src/view controllers/ContactDetailCell.h @@ -19,5 +19,8 @@ @property (strong, nonatomic) IBOutlet UILabel *contactPhoneNumber; @property (strong, nonatomic) IBOutlet UITextView *contactNotesTextView; +@property(nonatomic, strong) IBOutlet UILabel* contactAnnexNumberLabel; +@property(nonatomic, strong) IBOutlet UILabel* contactEmailLabel; + @end diff --git a/Signal/src/view controllers/ContactDetailTableViewController.m b/Signal/src/view controllers/ContactDetailTableViewController.m index 5b66e06d3..b14698e3a 100644 --- a/Signal/src/view controllers/ContactDetailTableViewController.m +++ b/Signal/src/view controllers/ContactDetailTableViewController.m @@ -12,18 +12,23 @@ #import "UIUtil.h" #import "DJWActionSheet.h" +#define kImageRadius 50.0f +#define kMinRows 4 +#define kFirstAdaptableCellRow 2 -typedef enum { - kNameMainNumberCellIndexPath = 0, - kActionCellIndexPath = 1, - kShareCellIndexPath = 2, - kEmailCellIndexPath = 3, - kAnnexPhoneNumberCellIndexPath = 4, - kNotesCellIndexPath = 5, -} kCellIndexPath; + +typedef NS_ENUM(NSInteger, CellRow) { + kNameMainNumberCellIndexPath, + kActionCellIndexPath, + kShareCellIndexPath, + kEmailCellIndexPath, + kAnnexPhoneNumberCellIndexPath, + kNotesCellIndexPath, +}; typedef enum { kNameMainNumberCellHeight = 180, + kNoImageCellHeight = 87, kActionCellHeight = 60, kShareCellHeight = 60, kEmailCellHeight = 60, @@ -31,29 +36,26 @@ typedef enum { kNotesCellHeight = 165, } kCellHeight; -static NSString* const kNameMainNumberCell = @"NameMainNumberCell"; -static NSString* const kActionCell = @"ActionCell"; +static NSString* const kNameMainNumberCell = @"NameMainNumberCell"; +static NSString* const kActionCell = @"ActionCell"; +static NSString* const kShareCell = @"ShareCell"; +static NSString* const kEmailCell = @"EmailCell"; +static NSString* const kAnnexPhoneNumberCell = @"AnnexPhoneNumberCell"; +static NSString *const kNotesCell = @"NotesCell"; -//Deprecated -static NSString* const kShareCell = @"ShareCell"; -static NSString* const kEmailCell = @"EmailCell"; -static NSString* const kAnnexPhoneNumberCell = @"AnnexPhoneNumberCell"; -static NSString *const kNotesCell = @"NotesCell"; -// - -static NSString *const kContactDetailSegue = @"DetailSegue"; - - - -@interface ContactDetailTableViewController () +static NSString *const kContactDetailSegue = @"DetailSegue"; +@interface ContactDetailTableViewController () { + BOOL doesImageExist; + NSInteger numberOfRows; +} @end @implementation ContactDetailTableViewController - (void)viewDidLoad { [super viewDidLoad]; - + doesImageExist = YES; self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero]; } @@ -61,6 +63,7 @@ static NSString *const kContactDetailSegue = @"DetailSegue"; [super didReceiveMemoryWarning]; } + #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { @@ -68,13 +71,13 @@ static NSString *const kContactDetailSegue = @"DetailSegue"; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 6; + return (NSInteger)[self numberOfRowsForContact:_contact]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * cell; - + switch (indexPath.row) { case kNameMainNumberCellIndexPath: cell = (ContactDetailCell*)[tableView dequeueReusableCellWithIdentifier:kNameMainNumberCell forIndexPath:indexPath]; @@ -86,48 +89,44 @@ static NSString *const kContactDetailSegue = @"DetailSegue"; case kShareCellIndexPath: cell = [tableView dequeueReusableCellWithIdentifier:kShareCell forIndexPath:indexPath]; break; - case kEmailCellIndexPath: - cell = [tableView dequeueReusableCellWithIdentifier:kEmailCell forIndexPath:indexPath]; - break; - case kAnnexPhoneNumberCellIndexPath: - cell = [tableView dequeueReusableCellWithIdentifier:kAnnexPhoneNumberCell forIndexPath:indexPath]; - break; - case kNotesCellIndexPath: - cell = [tableView dequeueReusableCellWithIdentifier:kNotesCell forIndexPath:indexPath]; - break; - default: + cell = [self adaptableCellAtIndexPath:indexPath]; break; } + return cell; } + -(void)setUpNameMainUserCell:(ContactDetailCell*)cell { Contact* c = self.contact; cell.contactName.text = [c fullName]; - cell.contactPhoneNumber.text = [[c parsedPhoneNumbers] firstObject]; + cell.contactPhoneNumber.text = [[c userTextPhoneNumbers] firstObject]; if (c.image) { cell.contactImageView.image = c.image; + } else { + [cell.contactImageView addConstraint:[NSLayoutConstraint constraintWithItem:cell.contactImageView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:0]]; + doesImageExist = NO; + } - [cell.contactImageView.layer setCornerRadius:50.0f]; + [cell.contactImageView.layer setCornerRadius:kImageRadius]; [cell.contactImageView.layer setMasksToBounds:YES]; - - } + -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGFloat cellHeight = 44.0f; switch (indexPath.row) { case kNameMainNumberCellIndexPath: - cellHeight = kNameMainNumberCellHeight; + cellHeight = doesImageExist ? kNameMainNumberCellHeight : kNoImageCellHeight; break; case kActionCellIndexPath: cellHeight = kActionCellHeight; @@ -135,16 +134,8 @@ static NSString *const kContactDetailSegue = @"DetailSegue"; case kShareCellIndexPath: cellHeight = kShareCellHeight; break; - case kEmailCellIndexPath: - cellHeight = kEmailCellHeight; - break; - case kAnnexPhoneNumberCellIndexPath: - cellHeight = kAnnexPhoneNumberCellHeight; - break; - case kNotesCellIndexPath: - cellHeight = kNotesCellHeight; - break; default: + cellHeight = [self heightForAdaptableCellAtIndexPath:indexPath]; break; } return cellHeight; @@ -176,4 +167,85 @@ static NSString *const kContactDetailSegue = @"DetailSegue"; } } +#pragma mark - Utilities (Adaptable Cells) + +-(NSUInteger)numberOfRowsForContact:(Contact*)contact +{ + NSUInteger numEmails = contact.emails.count; + NSUInteger numPhoneNumbers = contact.userTextPhoneNumbers.count-1; //Don't count main + + return kMinRows + numEmails + numPhoneNumbers; +} + +-(UITableViewCell*)adaptableCellAtIndexPath:(NSIndexPath*)idx +{ + NSInteger emailUpperBound = (NSInteger)(kFirstAdaptableCellRow+_contact.emails.count); + NSInteger phoneNumberUpperBound = emailUpperBound + (NSInteger)_contact.userTextPhoneNumbers.count; + + + ContactDetailCell * cell; + + if (idx.row > kFirstAdaptableCellRow && idx.row <= emailUpperBound) + { + cell = [self.tableView dequeueReusableCellWithIdentifier:kEmailCell forIndexPath:idx]; + + cell.contactEmailLabel.text = [_contact.emails objectAtIndex:(NSUInteger)idx.row-_contact.emails.count]; + + return cell; + } + + else if (idx.row > emailUpperBound && idx.row < phoneNumberUpperBound) + { + cell = [self.tableView dequeueReusableCellWithIdentifier:kAnnexPhoneNumberCell forIndexPath:idx]; + + NSInteger i = idx.row - emailUpperBound ; + + cell.contactAnnexNumberLabel.text = [_contact.userTextPhoneNumbers objectAtIndex:(NSUInteger)i]; + + return cell; + } + + else if (idx.row == (NSInteger)[self numberOfRowsForContact:_contact]-1) + { + return [self.tableView dequeueReusableCellWithIdentifier:kNotesCell forIndexPath:idx]; + + } + + else + { + NSLog(@"%s Problem at IndexPath %@", __PRETTY_FUNCTION__, idx); + return nil; + } +} + +-(CGFloat)heightForAdaptableCellAtIndexPath:(NSIndexPath*)idx +{ + NSInteger emailUpperBound = (NSInteger)(kFirstAdaptableCellRow+_contact.emails.count); + NSInteger phoneNumberUpperBound = emailUpperBound + (NSInteger)_contact.userTextPhoneNumbers.count; + + if (idx.row > kFirstAdaptableCellRow && idx.row <= emailUpperBound) + { + return kEmailCellHeight; + } + + else if (idx.row > emailUpperBound && idx.row < phoneNumberUpperBound) + { + return kAnnexPhoneNumberCellHeight; + } + + else if (idx.row == (NSInteger)[self numberOfRowsForContact:_contact]-1) + { + return kNotesCellHeight; + + } + + else + { + NSLog(@"%s Problem at IndexPath %@", __PRETTY_FUNCTION__, idx); + return 44.0f; + } + +} + + @end diff --git a/Signal/src/view controllers/ContactsTableViewController.m b/Signal/src/view controllers/ContactsTableViewController.m index d9baf3247..0100cbeff 100644 --- a/Signal/src/view controllers/ContactsTableViewController.m +++ b/Signal/src/view controllers/ContactsTableViewController.m @@ -121,7 +121,7 @@ static NSString *const CONTACT_BROWSE_TABLE_CELL_IDENTIFIER = @"ContactTableView #pragma mark - Contact functions - (void)setupContacts { - ObservableValue *observableContacts = Environment.getCurrent.contactsManager.getObservableWhisperUsers; + ObservableValue *observableContacts = Environment.getCurrent.contactsManager.getObservableRedPhoneUsers; [observableContacts watchLatestValue:^(NSArray *latestContacts) { _latestContacts = latestContacts; [self onSearchOrContactChange:nil]; @@ -219,6 +219,8 @@ static NSString *const CONTACT_BROWSE_TABLE_CELL_IDENTIFIER = @"ContactTableView reuseIdentifier:CONTACT_BROWSE_TABLE_CELL_IDENTIFIER]; } + cell.shouldShowContactButtons = YES; + [cell configureWithContact:[self contactForIndexPath:indexPath]]; return cell; @@ -265,6 +267,7 @@ static NSString *const CONTACT_BROWSE_TABLE_CELL_IDENTIFIER = @"ContactTableView NSArray *contactSection = [self contactsForSectionIndex:(NSUInteger)indexPath.section]; contact = contactSection[(NSUInteger)indexPath.row]; } + detailvc.contact = contact; } } diff --git a/Signal/src/view controllers/DemoDataModel.m b/Signal/src/view controllers/DemoDataModel.m index 452f564ae..44e26d92b 100644 --- a/Signal/src/view controllers/DemoDataModel.m +++ b/Signal/src/view controllers/DemoDataModel.m @@ -11,6 +11,8 @@ #import "RecentCall.h" #import "PhoneNumber.h" +#import "JSQCall.h" + enum {kDemoDataModelCase0, kDemoDataModelCase1,kDemoDataModelCase2, kDemoDataModelCase3, kDemoDataModelCase4}; @implementation DemoDataModel @@ -38,30 +40,46 @@ enum {kDemoDataModelCase0, kDemoDataModelCase1,kDemoDataModelCase2, kDemoDataMod * You should have a mutable array or orderedSet, or something. */ self.messages = [[NSMutableArray alloc] initWithObjects: - [[JSQTextMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan + [[JSQMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan senderDisplayName:kJSQDemoAvatarDisplayNameDylan date:[NSDate distantPast] text:@"Welcome to JSQMessages: A messaging UI framework for iOS."], - [[JSQTextMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan + [[JSQMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan senderDisplayName:kJSQDemoAvatarDisplayNameDylan date:[NSDate distantPast] text:@"It even has data detectors. You can call me tonight. My cell number is 123-456-7890. My website is www.hexedbits.com."], - [[JSQTextMessage alloc] initWithSenderId:kJSQDemoAvatarIdMoxie + [[JSQMessage alloc] initWithSenderId:kJSQDemoAvatarIdMoxie senderDisplayName:kJSQDemoAvatarDisplayNameMoxie date:[NSDate date] text:@"JSQMessagesViewController is nearly an exact replica of the iOS Messages App. And perhaps, better."], - [[JSQTextMessage alloc] initWithSenderId:kJSQDemoAvatarIdFred + [[JSQMessage alloc] initWithSenderId:kJSQDemoAvatarIdFred senderDisplayName:kJSQDemoAvatarDisplayNameFred date:[NSDate date] text:@"It is unit-tested, free, open-source, and documented."], - [[JSQTextMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan + [[JSQMessage alloc] initWithSenderId:kJSQDemoAvatarIdDylan senderDisplayName:kJSQDemoAvatarDisplayNameDylan date:[NSDate date] text:@"Now with media messages!"], + [[JSQCall alloc] initWithCallerId:kJSQDemoAvatarIdMoxie + callerDisplayName:kJSQDemoAvatarDisplayNameMoxie + date:[NSDate date] + duration:127 + status:kCallIncoming], + [[JSQCall alloc] initWithCallerId:kJSQDemoAvatarIdFred + callerDisplayName:kJSQDemoAvatarDisplayNameFred + date:[NSDate date] + duration:0 + status:kCallMissed], + [[JSQCall alloc] initWithCallerId:kJSQDemoAvatarIdFred + callerDisplayName:kJSQDemoAvatarDisplayNameFred + date:[NSDate date] + duration:0 + status:kCallFailed], + nil]; } @@ -109,35 +127,6 @@ enum {kDemoDataModelCase0, kDemoDataModelCase1,kDemoDataModelCase2, kDemoDataMod { Contact * _demoContact; - switch (modelNumber) { - case kDemoDataModelCase0: - _demoContact = [Contact contactWithFirstName:@"Dylan" andLastName:@"Bourgeois" andUserTextPhoneNumbers:@[@"954-736-9230"] andEmails:nil andContactID:0]; - _demoContact.isRedPhoneContact = YES; - _demoContact.isTextSecureContact = YES; - break; - case kDemoDataModelCase1: - _demoContact = [Contact contactWithFirstName:@"Frederic" andLastName:@"Jacobs" andUserTextPhoneNumbers:@[@"954-736-9231"] andEmails:nil andContactID:0]; - _demoContact.isRedPhoneContact = YES; - _demoContact.isTextSecureContact = NO; - break; - case kDemoDataModelCase2: - _demoContact = [Contact contactWithFirstName:@"Romain" andLastName:@"Ruetschi" andUserTextPhoneNumbers:@[@"954-736-9233"] andEmails:nil andContactID:0]; - _demoContact.isRedPhoneContact = NO; - _demoContact.isTextSecureContact = NO; - break; - case kDemoDataModelCase3: - _demoContact = [Contact contactWithFirstName:@"Stephen" andLastName:@"Colbert" andUserTextPhoneNumbers:@[@"954-736-9232"] andEmails:nil andContactID:0]; - _demoContact.isRedPhoneContact = NO; - _demoContact.isTextSecureContact = YES; - break; - case kDemoDataModelCase4: - _demoContact = [Contact contactWithFirstName:@"Johnny" andLastName:@"Ramone" andUserTextPhoneNumbers:@[@"954-736-9221"] andEmails:nil andContactID:0]; - _demoContact.isRedPhoneContact = YES; - _demoContact.isTextSecureContact = YES; - break; - default: - break; - } return _demoContact; } diff --git a/Signal/src/view controllers/DialerViewController.m b/Signal/src/view controllers/DialerViewController.m index 26396af91..c3fbeee0d 100644 --- a/Signal/src/view controllers/DialerViewController.m +++ b/Signal/src/view controllers/DialerViewController.m @@ -34,19 +34,13 @@ [self setupPasteBehaviour]; self.title = KEYPAD_NAV_BAR_TITLE; _currentNumberMutable = [NSMutableString string]; - //[self updateNumberLabel]; + [self updateNumberLabel]; [self.navigationController setNavigationBarHidden:YES animated:NO]; [_callButton setTitle:CALL_BUTTON_TITLE forState:UIControlStateNormal]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - UIBlurEffect * effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; - UIVisualEffectView * viewWithBlurredBackground = - [[UIVisualEffectView alloc] initWithEffect:effect]; - viewWithBlurredBackground.frame = self.view.frame; - - [self.view insertSubview:viewWithBlurredBackground atIndex:0]; if (_phoneNumber) { _currentNumberMutable = _phoneNumber.toE164.mutableCopy; @@ -154,7 +148,6 @@ } - (void)updateNumberLabel { - //DEBUG!!! NSString* numberText = [_currentNumberMutable copy]; _numberLabel.text = [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:numberText]; diff --git a/Signal/src/view controllers/FingerprintViewController.m b/Signal/src/view controllers/FingerprintViewController.m index 2d9dc83e8..21407d123 100644 --- a/Signal/src/view controllers/FingerprintViewController.m +++ b/Signal/src/view controllers/FingerprintViewController.m @@ -18,11 +18,20 @@ - (void)viewDidLoad { [super viewDidLoad]; - + + [self.view setAlpha:0]; + [self initializeImageViews]; } +-(void)viewWillAppear:(BOOL)animated +{ + [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{ + [self.view setAlpha:1]; + } completion:nil]; +} + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. @@ -31,13 +40,13 @@ #pragma mark - Initializers -(void)initializeImageViews { - _contactImageView.image = [UIImage imageNamed:@"DefaultContactImage"]; + _contactImageView.image = [UIImage imageNamed:@"defaultConctact_light"]; _contactImageView.layer.cornerRadius = 75.f/2; _contactImageView.layer.masksToBounds = YES; _contactImageView.layer.borderWidth = 2.0f; _contactImageView.layer.borderColor = [[UIColor whiteColor] CGColor]; - _userImageView.image = [UIImage imageNamed:@"DefaultContactImage"]; + _userImageView.image = [UIImage imageNamed:@"defaultConctact_light"]; _userImageView.layer.cornerRadius = 75.f/2; _userImageView.layer.masksToBounds = YES; _userImageView.layer.borderWidth = 2.0f; @@ -47,7 +56,12 @@ #pragma mark - Action -(IBAction)closeButtonAction:(id)sender { - [self dismissViewControllerAnimated:YES completion:nil]; + [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{ + [self.view setAlpha:0]; + } completion:^(BOOL succeeded){ + [self dismissViewControllerAnimated:YES completion:nil]; + }]; + } -(IBAction)shredAndDelete:(id)sender diff --git a/Signal/src/view controllers/FullImageViewController.m b/Signal/src/view controllers/FullImageViewController.m index 3a83ae65c..36e169b96 100644 --- a/Signal/src/view controllers/FullImageViewController.m +++ b/Signal/src/view controllers/FullImageViewController.m @@ -38,8 +38,8 @@ [_pinchView addGestureRecognizer:doubleTap]; _pinchView.delegate = self; - _pinchView.minimumZoomScale=0.9; - _pinchView.maximumZoomScale=3.0; + _pinchView.minimumZoomScale=0.9f; + _pinchView.maximumZoomScale=3.0f; _pinchView.showsVerticalScrollIndicator = NO; _pinchView.showsHorizontalScrollIndicator = NO; _pinchView.contentSize=CGSizeMake(CGRectGetWidth(_fullImageView.frame), CGRectGetHeight(_fullImageView.frame)); diff --git a/Signal/src/view controllers/InCallViewController.h b/Signal/src/view controllers/InCallViewController.h index 5e749cba3..7ad617841 100644 --- a/Signal/src/view controllers/InCallViewController.h +++ b/Signal/src/view controllers/InCallViewController.h @@ -17,12 +17,17 @@ @property (nonatomic, strong) IBOutlet UIView *callStateImageContainerView; @property (nonatomic, strong) IBOutlet UIButton *muteButton; +@property (nonatomic, strong) IBOutlet UILabel* muteLabel; @property (nonatomic, strong) IBOutlet UIButton *speakerButton; +@property (nonatomic, strong) IBOutlet UILabel* speakerLabel; @property (nonatomic, strong) IBOutlet UIButton *answerButton; +@property (nonatomic, strong) IBOutlet UILabel *answerLabel; @property (nonatomic, strong) IBOutlet UIButton *rejectButton; +@property (nonatomic, strong) IBOutlet UILabel *rejectLabel; @property (nonatomic, strong) IBOutlet UIButton *endButton; +@property (nonatomic, strong) IBOutlet UILabel *endLabel; @property (nonatomic, readonly) CallState *callState; @property (nonatomic, readonly) Contact *potentiallyKnownContact; diff --git a/Signal/src/view controllers/InCallViewController.m b/Signal/src/view controllers/InCallViewController.m index 97e1b288b..be54cfd46 100644 --- a/Signal/src/view controllers/InCallViewController.m +++ b/Signal/src/view controllers/InCallViewController.m @@ -52,9 +52,17 @@ static NSInteger connectingFlashCounter = 0; [self showCallState]; [self setupButtonBorders]; [self localizeButtons]; + [self linkActions]; + [UIDevice.currentDevice setProximityMonitoringEnabled:YES]; } +-(void)linkActions +{ + [_muteButton addTarget:self action:@selector(muteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + [_speakerButton addTarget:self action:@selector(speakerButtonTapped) forControlEvents:UIControlEventTouchUpInside]; +} + - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self startConnectingFlashAnimation]; @@ -245,14 +253,23 @@ static NSInteger connectingFlashCounter = 0; - (void)muteButtonTapped { _muteButton.selected = [Environment.phoneManager toggleMute]; - NSString* newImageName = _muteButton.selected ? @"mute_on" : @"mute_off"; - [_muteButton.imageView setImage:[UIImage imageNamed:newImageName]]; + if (_muteButton.isSelected) + { + _muteLabel.text = @"Mute On"; + } else { + _muteLabel.text = @"Mute Off"; + } } - (void)speakerButtonTapped { _speakerButton.selected = [AppAudioManager.sharedInstance toggleSpeakerPhone]; - NSString* newImageName = _speakerButton.selected ? @"speaker_on" : @"speaker_off"; - [_speakerButton.imageView setImage:[UIImage imageNamed:newImageName]]; + + if (_speakerButton.isSelected) + { + _speakerLabel.text = @"Speaker On"; + } else { + _speakerLabel.text = @"Speaker Off"; + } } - (void)answerButtonTapped { @@ -274,7 +291,6 @@ static NSInteger connectingFlashCounter = 0; message = [message stringByAppendingString:[serverMessage text]]; } - _endButton.backgroundColor = [UIColor grayColor]; _callStatusLabel.textColor = [UIColor redColor]; [self showConnectingError]; @@ -297,11 +313,14 @@ static NSInteger connectingFlashCounter = 0; -(void) displayAcceptRejectButtons:(BOOL) enable{ - //TODO: if NO, animate reject button -> end call button - _answerButton.hidden = !enable; _rejectButton.hidden = !enable; - _endButton.hidden = enable; + _endButton.hidden = enable; + + _answerLabel.hidden = !enable; + _rejectLabel.hidden = !enable; + _endLabel.hidden = enable; + if (_vibrateTimer && enable == false) { [_vibrateTimer invalidate]; } diff --git a/Signal/src/view controllers/InboxTableViewCell.h b/Signal/src/view controllers/InboxTableViewCell.h index 2a20f8e61..569d71646 100644 --- a/Signal/src/view controllers/InboxTableViewCell.h +++ b/Signal/src/view controllers/InboxTableViewCell.h @@ -9,6 +9,7 @@ #import #import "DemoDataModel.h" #import "NextResponderScrollView.h" +#import "TSThread.h" typedef enum : NSUInteger { kArchiveState, @@ -41,7 +42,7 @@ typedef enum : NSUInteger { @property (nonatomic, strong) IBOutlet UIImageView *archiveImageView; @property (nonatomic, assign) id delegate; --(void)configureWithTestMessage:(DemoDataModel*)testMessage; +-(void)configureWithThread:(TSThread*)thread; -(void)configureForState:(CellState)state; -(void)animateDisappear; diff --git a/Signal/src/view controllers/InboxTableViewCell.m b/Signal/src/view controllers/InboxTableViewCell.m index 0881be125..abbeae48a 100644 --- a/Signal/src/view controllers/InboxTableViewCell.m +++ b/Signal/src/view controllers/InboxTableViewCell.m @@ -41,15 +41,14 @@ return NSStringFromClass(self.class); } --(void)configureWithTestMessage:(DemoDataModel*)testMessage { - _nameLabel.text = testMessage._sender; - _snippetLabel.text = testMessage._snippet; +-(void)configureWithThread:(TSThread*)thread { + _nameLabel.text = thread.name; + _snippetLabel.text = @"Missing implementation"; _contactPictureView.image = nil; - _timeLabel.attributedText = [self dateArrributedString:[NSDate date]]; + _timeLabel.attributedText = [self dateAttributedString:thread.lastMessageDate]; self.separatorInset = UIEdgeInsetsMake(0,_contactPictureView.frame.size.width*1.5f, 0, 0); - [self setUpLastAction:testMessage.lastActionString]; - + [self setUpLastAction:@"read"]; // TODO: Change } -(void)configureForState:(CellState)state @@ -89,7 +88,7 @@ #pragma mark - Date formatting -- (NSAttributedString *)dateArrributedString:(NSDate *)date { +- (NSAttributedString *)dateAttributedString:(NSDate *)date { NSString *timeString = [[DateUtil timeFormatter] stringFromDate:date]; diff --git a/Signal/src/view controllers/InboxTableViewCell.xib b/Signal/src/view controllers/InboxTableViewCell.xib index 4880c67a7..6fcada75e 100644 --- a/Signal/src/view controllers/InboxTableViewCell.xib +++ b/Signal/src/view controllers/InboxTableViewCell.xib @@ -1,5 +1,5 @@ - + @@ -7,7 +7,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -91,7 +91,7 @@ - + diff --git a/Signal/src/view controllers/MessageComposeTableViewController.m b/Signal/src/view controllers/MessageComposeTableViewController.m index 0747945f3..6ac5b9858 100644 --- a/Signal/src/view controllers/MessageComposeTableViewController.m +++ b/Signal/src/view controllers/MessageComposeTableViewController.m @@ -6,6 +6,8 @@ // // +#import "Environment.h" +#import "Contact.h" #import "MessageComposeTableViewController.h" #import "MessagesViewController.h" #import "SignalsViewController.h" @@ -24,14 +26,12 @@ @implementation MessageComposeTableViewController - - - (void)viewDidLoad { [super viewDidLoad]; [self initializeSearch]; - contacts = [DemoDataFactory makeFakeContacts]; + contacts = [[Environment getCurrent] contactsManager].textSecureContacts; searchResults = contacts; self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero]; @@ -104,7 +104,6 @@ } else { return (NSInteger)[contacts count]; } - } @@ -115,6 +114,8 @@ cell = [[ContactTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ContactTableViewCell"]; } + cell.shouldShowContactButtons = NO; + [cell configureWithContact:[self contactForIndexPath:indexPath]]; tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; @@ -180,4 +181,5 @@ } + @end diff --git a/Signal/src/view controllers/MessagesViewController.h b/Signal/src/view controllers/MessagesViewController.h index 09fae497e..3c73dea42 100644 --- a/Signal/src/view controllers/MessagesViewController.h +++ b/Signal/src/view controllers/MessagesViewController.h @@ -11,13 +11,14 @@ #import "DemoDataModel.h" +@class TSThread; @interface MessagesViewController : JSQMessagesViewController -@property (strong, nonatomic) DemoDataModel *demoData; -@property (strong, nonatomic) NSString* _senderTitleString; +@property (strong, nonatomic) NSString* senderTitleString; +@property DemoDataModel *demoData; --(void)initWithGroup:(NSArray*)group; +- (void)setupWithThread:(TSThread*)thread; @end diff --git a/Signal/src/view controllers/MessagesViewController.m b/Signal/src/view controllers/MessagesViewController.m index 4163496f0..8405e32f0 100644 --- a/Signal/src/view controllers/MessagesViewController.m +++ b/Signal/src/view controllers/MessagesViewController.m @@ -11,6 +11,9 @@ #import "MessagesViewController.h" #import "FullImageViewController.h" +#import "JSQCallCollectionViewCell.h" +#import "JSQCall.h" + #import "DJWActionSheet.h" #import #import @@ -37,11 +40,14 @@ typedef enum : NSUInteger { self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"lock.png"] style:UIBarButtonItemStylePlain target:self action:@selector(showFingerprint)]; [self.collectionView.collectionViewLayout setMessageBubbleFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:16.0f]]; + + self.collectionView.showsVerticalScrollIndicator = NO; + self.collectionView.showsHorizontalScrollIndicator = NO; //DEBUG: isGroupConversation = NO; - self.title = self._senderTitleString; + self.title = self.senderTitleString; self.senderId = kJSQDemoAvatarIdDylan; self.senderDisplayName = kJSQDemoAvatarDisplayNameDylan; @@ -131,7 +137,7 @@ typedef enum : NSUInteger { } else if (text.length > 0) { [JSQSystemSoundPlayer jsq_playMessageSentSound]; - JSQTextMessage *message = [[JSQTextMessage alloc] initWithSenderId:senderId + JSQMessage *message = [[JSQMessage alloc] initWithSenderId:senderId senderDisplayName:senderDisplayName date:date text:text]; @@ -235,25 +241,29 @@ typedef enum : NSUInteger { /** * Override point for customizing cells */ - JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath]; - - JSQMessage *msg = [self.demoData.messages objectAtIndex:(NSUInteger)indexPath.item]; - if ([msg isKindOfClass:[JSQTextMessage class]]) { - - if ([msg.senderId isEqualToString:self.senderId]) { - cell.textView.textColor = [UIColor whiteColor]; - } - else { - cell.textView.textColor = [UIColor blackColor]; + if ([msg isKindOfClass:[JSQMessage class]]) + { + JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath]; + if (!msg.isMediaMessage) { + if ([msg.senderId isEqualToString:self.senderId]) { + cell.textView.textColor = [UIColor whiteColor]; + } + else { + cell.textView.textColor = [UIColor blackColor]; + } + + cell.textView.linkTextAttributes = @{ NSForegroundColorAttributeName : cell.textView.textColor, + NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) }; } - cell.textView.linkTextAttributes = @{ NSForegroundColorAttributeName : cell.textView.textColor, - NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) }; + return cell; + + } else { + JSQCallCollectionViewCell *cell = (JSQCallCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath]; + return cell; } - - return cell; } #pragma mark - Adjusting cell label heights @@ -447,10 +457,10 @@ typedef enum : NSUInteger { NSError *err = NULL; CMTime time = CMTimeMake(2, 1); CGImageRef snapshotRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err]; - UIImage *snapshot = [[UIImage alloc] initWithCGImage:snapshotRef]; + __unused UIImage *snapshot = [[UIImage alloc] initWithCGImage:snapshotRef]; JSQVideoMediaItem * videoItem = [[JSQVideoMediaItem alloc] initWithFileURL:videoURL isReadyToPlay:YES]; - JSQMediaMessage * videoMessage = [JSQMediaMessage messageWithSenderId:kJSQDemoAvatarIdDylan + JSQMessage * videoMessage = [JSQMessage messageWithSenderId:kJSQDemoAvatarIdDylan displayName:kJSQDemoAvatarDisplayNameDylan media:videoItem]; [self.demoData.messages addObject:videoMessage]; @@ -460,7 +470,7 @@ typedef enum : NSUInteger { //Is a photo JSQPhotoMediaItem *photoItem = [[JSQPhotoMediaItem alloc] initWithImage:picture_camera]; - JSQMediaMessage *photoMessage = [JSQMediaMessage messageWithSenderId:kJSQDemoAvatarIdDylan + JSQMessage *photoMessage = [JSQMessage messageWithSenderId:kJSQDemoAvatarIdDylan displayName:kJSQDemoAvatarDisplayNameDylan media:photoItem]; [self.demoData.messages addObject:photoMessage]; diff --git a/Signal/src/view controllers/NewGroupViewController.m b/Signal/src/view controllers/NewGroupViewController.m index 77a73d992..e28f88364 100644 --- a/Signal/src/view controllers/NewGroupViewController.m +++ b/Signal/src/view controllers/NewGroupViewController.m @@ -8,6 +8,9 @@ #import "NewGroupViewController.h" #import "SignalsViewController.h" +#import "Contact.h" +#import "ContactsManager.h" +#import "Environment.h" #import "Contact.h" #import "DemoDataFactory.h" @@ -32,7 +35,7 @@ self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Create" style:UIBarButtonItemStylePlain target:self action:@selector(createGroup)]; self.navigationItem.title = @"New Group"; - contacts = [DemoDataFactory makeFakeContacts]; + contacts = [Environment getCurrent].contactsManager.textSecureContacts; [self initializeDelegates]; [self initializeTableView]; @@ -41,7 +44,6 @@ - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. } #pragma mark - Initializers @@ -135,7 +137,6 @@ picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *)kUTTypeImage, nil]; [self presentViewController:picker animated:YES completion:NULL]; } - } -(void)chooseFromLibrary @@ -202,7 +203,7 @@ NSUInteger row = (NSUInteger)indexPath.row; Contact* contact = contacts[row-1]; - cell.textLabel.text = contact.fullName; + cell.textLabel.attributedText = [self attributedStringForContact:contact inCell:cell]; } else { cell.textLabel.text = @"Add People:"; @@ -236,6 +237,27 @@ return NO; } +#pragma mark - Cell Utility + +- (NSAttributedString *)attributedStringForContact:(Contact *)contact inCell:(UITableViewCell*)cell { + NSMutableAttributedString *fullNameAttributedString = [[NSMutableAttributedString alloc] initWithString:contact.fullName]; + + UIFont *firstNameFont; + UIFont *lastNameFont; + + if (ABPersonGetSortOrdering() == kABPersonCompositeNameFormatFirstNameFirst) { + firstNameFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:cell.textLabel.font.pointSize]; + lastNameFont = [UIFont systemFontOfSize:cell.textLabel.font.pointSize]; + } else{ + firstNameFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:cell.textLabel.font.pointSize]; + lastNameFont = [UIFont systemFontOfSize:cell.textLabel.font.pointSize]; + } + [fullNameAttributedString addAttribute:NSFontAttributeName value:firstNameFont range:NSMakeRange(0, contact.firstName.length)]; + [fullNameAttributedString addAttribute:NSFontAttributeName value:lastNameFont range:NSMakeRange(contact.firstName.length + 1, contact.lastName.length)]; + + [fullNameAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, contact.fullName.length)]; + return fullNameAttributedString; +} /* #pragma mark - Navigation diff --git a/Signal/src/view controllers/SettingsTableViewCell.h b/Signal/src/view controllers/SettingsTableViewCell.h index eae496741..97dbd9175 100644 --- a/Signal/src/view controllers/SettingsTableViewCell.h +++ b/Signal/src/view controllers/SettingsTableViewCell.h @@ -14,8 +14,5 @@ @property(nonatomic, strong) IBOutlet UISwitch* toggle; @property(nonatomic, strong) IBOutlet UILabel* state; -//Header cell -@property(nonatomic, strong) IBOutlet UIImageView* profileImageView; -@property(nonatomic, strong) IBOutlet UIButton * changeProfileImageViewButton; @end diff --git a/Signal/src/view controllers/SettingsTableViewCell.m b/Signal/src/view controllers/SettingsTableViewCell.m index 923dbf8b1..f00ad29ed 100644 --- a/Signal/src/view controllers/SettingsTableViewCell.m +++ b/Signal/src/view controllers/SettingsTableViewCell.m @@ -14,11 +14,7 @@ // Initialization code [self.toggle addTarget:self action:@selector(toggleSetting:) forControlEvents:UIControlEventValueChanged]; - - [self.profileImageView.layer setCornerRadius:50.0f]; - [self.profileImageView.layer setMasksToBounds:YES]; - - [self.changeProfileImageViewButton addTarget:self action:@selector(changeImageView:) forControlEvents:UIControlEventTouchUpInside]; + } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { @@ -37,11 +33,5 @@ } } -#pragma mark - Editing Profile --(void)changeImageView:(id)sender -{ - NSLog(@"hi"); - -} @end diff --git a/Signal/src/view controllers/SettingsTableViewController.m b/Signal/src/view controllers/SettingsTableViewController.m index 4aced198b..70c7a996c 100644 --- a/Signal/src/view controllers/SettingsTableViewController.m +++ b/Signal/src/view controllers/SettingsTableViewController.m @@ -10,13 +10,13 @@ #import "DJWActionSheet.h" #import "SettingsTableViewCell.h" -#define kProfileCellHeight 180.0f -#define kStandardCellHeight 60.0f +#define kProfileCellHeight 87.0f +#define kStandardCellHeight 60.0f -#define kNumberOfSections 2 +#define kNumberOfSections 2 #define kClearHistoryLogCellRow 4 -#define kSendDebugLogCellRow 6 +#define kSendDebugLogCellRow 6 typedef enum { @@ -114,16 +114,6 @@ typedef enum { break; } } - - else if (indexPath.section==kProfileSection) - { - //FIXME: self is to nil after this call o_x so can't show button - SettingsTableViewCell* profileCell = (SettingsTableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath]; - profileCell.changeProfileImageViewButton.hidden = !profileCell.changeProfileImageViewButton.hidden; - profileCell.changeProfileImageViewButton.userInteractionEnabled = !profileCell.changeProfileImageViewButton.userInteractionEnabled; - NSLog(@"hello"); - - } } diff --git a/Signal/src/view controllers/SignalsNavigationController.m b/Signal/src/view controllers/SignalsNavigationController.m index d36d5e375..c022e568c 100644 --- a/Signal/src/view controllers/SignalsNavigationController.m +++ b/Signal/src/view controllers/SignalsNavigationController.m @@ -37,6 +37,14 @@ [self.navigationBar addSubview:_socketStatusView]; } +-(void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:SocketOpenedNotification]; + [[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:SocketClosedNotification]; + [[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:SocketConnectingNotification]; + +} + #pragma mark - Socket Status Notifications -(void)initializeObserver diff --git a/Signal/src/view controllers/UITests/SignalsViewController.h b/Signal/src/view controllers/UITests/SignalsViewController.h index 3676f6de5..935bc92ae 100644 --- a/Signal/src/view controllers/UITests/SignalsViewController.h +++ b/Signal/src/view controllers/UITests/SignalsViewController.h @@ -11,15 +11,13 @@ #import "GroupModel.h" - @interface SignalsViewController : UIViewController -@property (nonatomic) Contact* contactFromCompose; -@property (nonatomic) GroupModel* groupFromCompose; +@property (nonatomic) Contact *contactFromCompose; +@property (nonatomic) GroupModel *groupFromCompose; -@property (nonatomic,strong) IBOutlet UITableView* _tableView; - -@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl; +@property (nonatomic, retain) IBOutlet UITableView *tableView; +@property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl; @end diff --git a/Signal/src/view controllers/UITests/SignalsViewController.m b/Signal/src/view controllers/UITests/SignalsViewController.m index 479921abd..43307279b 100644 --- a/Signal/src/view controllers/UITests/SignalsViewController.m +++ b/Signal/src/view controllers/UITests/SignalsViewController.m @@ -6,20 +6,28 @@ // Copyright (c) 2014 Open Whisper Systems. All rights reserved. // -#import "AppDelegate.h" #import "DemoDataFactory.h" #import "InboxTableViewCell.h" #import "MessagesViewController.h" #import "SignalsViewController.h" +#import "TSStorageManager.h" +#import "TSDatabaseView.h" #import "TSSocketManager.h" -#define CELL_HEIGHT 71.0f +#import +#import "YapDatabaseViewTransaction.h" +#import "YapDatabaseViewMappings.h" +#import "YapDatabaseViewConnection.h" +#import "YapDatabaseFullTextSearch.h" +#import "YapDatabase.h" + +#define CELL_HEIGHT 71.0f #define HEADER_HEIGHT 44.0f -static NSString *const kCellNibName = @"TableViewCell"; -static NSString *const kSegueIndentifier = @"showSegue"; +static NSString *const inboxTableViewCell = @"inBoxTableViewCell"; +static NSString *const kSegueIndentifier = @"showSegue"; @interface SignalsViewController () { @@ -28,20 +36,33 @@ static NSString *const kSegueIndentifier = @"showSegue"; } @property (strong, nonatomic) DemoDataModel *demoData; +@property (nonatomic, strong) YapDatabaseConnection *uiDatabaseConnection; +@property (nonatomic, strong) YapDatabaseViewMappings *threadMappings; @end @implementation SignalsViewController -- (void)viewDidAppear:(BOOL)animated{ - [TSSocketManager becomeActive]; -} - - (void)viewDidLoad { [super viewDidLoad]; - _dataArray = [DemoDataFactory data]; - numberOfCells = _dataArray.count; + [self tableViewSetUp]; + + [self.uiDatabaseConnection beginLongLivedReadTransaction]; + + self.threadMappings = [[YapDatabaseViewMappings alloc] initWithGroups:@[TSThreadGroup] + view:TSThreadDatabaseViewExtensionName]; + + [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction){ + [self.threadMappings updateWithTransaction:transaction]; + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:TSUIDatabaseConnectionDidUpdateNotification + object:nil]; + + [TSSocketManager becomeActive]; } - (void)didReceiveMemoryWarning { @@ -51,47 +72,51 @@ static NSString *const kSegueIndentifier = @"showSegue"; -(void)tableViewSetUp { - self._tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; + self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; + return (NSInteger)[self.threadMappings numberOfSections]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return (NSInteger)numberOfCells; + return (NSInteger)[self.threadMappings numberOfItemsInSection:(NSUInteger)section]; } -- (InboxTableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - return [self inboxFeedCellForIndexPath:indexPath]; - } +- (InboxTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { + + InboxTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:inboxTableViewCell]; + TSThread *thread = [self threadForIndexPath:indexPath]; + + if (!cell) { + cell = [[InboxTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:inboxTableViewCell]; + cell.delegate = self; + } + + [cell configureWithThread:thread]; + [cell configureForState:_segmentedControl.selectedSegmentIndex == 0 ? kInboxState : kArchiveState]; + + return cell; +} + +- (TSThread*)threadForIndexPath:(NSIndexPath*)indexPath { + + __block TSThread *thread = nil; + [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + thread = [[transaction extension:TSThreadDatabaseViewExtensionName] objectAtIndexPath:indexPath withMappings:self.threadMappings]; + }]; + + return thread; +} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return CELL_HEIGHT; } --(InboxTableViewCell*)inboxFeedCellForIndexPath:(NSIndexPath *)indexPath { - - InboxTableViewCell *cell = [self._tableView dequeueReusableCellWithIdentifier:kCellNibName]; - - - if (!cell) { - cell = [[InboxTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:kCellNibName]; - cell.delegate = self; - } - - DemoDataModel *recent = _dataArray[(NSUInteger)indexPath.row]; - [cell configureWithTestMessage:recent]; - [cell configureForState:_segmentedControl.selectedSegmentIndex == 0 ? kInboxState : kArchiveState]; - return cell; - -} - - #pragma mark - HomeFeedTableViewCellDelegate - (void)tableViewCellTappedDelete:(InboxTableViewCell*)cell { @@ -117,15 +142,15 @@ static NSString *const kSegueIndentifier = @"showSegue"; if ([segue.identifier isEqualToString:kSegueIndentifier]) { MessagesViewController * vc = [segue destinationViewController]; - NSIndexPath *selectedIndexPath = [self._tableView indexPathForSelectedRow]; + NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; if (selectedIndexPath) { - vc._senderTitleString = ((DemoDataModel*)_dataArray[(NSUInteger)selectedIndexPath.row])._sender; + vc.senderTitleString = ((DemoDataModel*)_dataArray[(NSUInteger)selectedIndexPath.row])._sender; } else if (_contactFromCompose) { - vc._senderTitleString = _contactFromCompose.fullName; + vc.senderTitleString = _contactFromCompose.fullName; } else if (_groupFromCompose) { - vc._senderTitleString = _groupFromCompose.groupName; + vc.senderTitleString = _groupFromCompose.groupName; } - + } } @@ -136,14 +161,106 @@ static NSString *const kSegueIndentifier = @"showSegue"; switch (_segmentedControl.selectedSegmentIndex) { case 0: numberOfCells=5; - [self._tableView reloadData]; + [self.tableView reloadData]; break; case 1: numberOfCells=3; - [self._tableView reloadData]; + [self.tableView reloadData]; break; } } + +#pragma mark Database delegates + +- (YapDatabaseConnection *)uiDatabaseConnection { + NSAssert([NSThread isMainThread], @"Must access uiDatabaseConnection on main thread!"); + if (!_uiDatabaseConnection) { + YapDatabase *database = TSStorageManager.sharedManager.database; + _uiDatabaseConnection = [database newConnection]; + [_uiDatabaseConnection beginLongLivedReadTransaction]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedNotification + object:database]; + } + return _uiDatabaseConnection; +} + +- (void)yapDatabaseModified:(NSNotification *)notification { + NSArray *notifications = notification.userInfo[@"notifications"]; + + NSArray *sectionChanges = nil; + NSArray *rowChanges = nil; + + [[self.uiDatabaseConnection ext:TSThreadDatabaseViewExtensionName] getSectionChanges:§ionChanges + rowChanges:&rowChanges + forNotifications:notifications + withMappings:self.threadMappings]; + + if ([sectionChanges count] == 0 && [rowChanges count] == 0){ + + return; + } + + [self.tableView beginUpdates]; + + for (YapDatabaseViewSectionChange *sectionChange in sectionChanges) + { + switch (sectionChange.type) + { + case YapDatabaseViewChangeDelete : + { + [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionChange.index] + withRowAnimation:UITableViewRowAnimationAutomatic]; + break; + } + case YapDatabaseViewChangeInsert : + { + [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionChange.index] + withRowAnimation:UITableViewRowAnimationAutomatic]; + break; + } + case YapDatabaseViewChangeUpdate: + case YapDatabaseViewChangeMove: + break; + } + } + + for (YapDatabaseViewRowChange *rowChange in rowChanges) + { + switch (rowChange.type) + { + case YapDatabaseViewChangeDelete : + { + [self.tableView deleteRowsAtIndexPaths:@[ rowChange.indexPath ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + break; + } + case YapDatabaseViewChangeInsert : + { + [self.tableView insertRowsAtIndexPaths:@[ rowChange.newIndexPath ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + break; + } + case YapDatabaseViewChangeMove : + { + [self.tableView deleteRowsAtIndexPaths:@[ rowChange.indexPath ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + [self.tableView insertRowsAtIndexPaths:@[ rowChange.newIndexPath ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + break; + } + case YapDatabaseViewChangeUpdate : + { + [self.tableView reloadRowsAtIndexPaths:@[ rowChange.indexPath ] + withRowAnimation:UITableViewRowAnimationNone]; + break; + } + } + } + + [self.tableView endUpdates]; +} @end diff --git a/Signal/src/view controllers/xibs/DialerViewController.xib b/Signal/src/view controllers/xibs/DialerViewController.xib index 09aadf0c9..60e3ff98d 100755 --- a/Signal/src/view controllers/xibs/DialerViewController.xib +++ b/Signal/src/view controllers/xibs/DialerViewController.xib @@ -1,5 +1,5 @@ - + @@ -77,39 +77,39 @@ - + - + - - + + - + - + + @@ -108,7 +129,7 @@ - + @@ -118,7 +139,7 @@ - + @@ -128,7 +149,7 @@ - + @@ -137,10 +158,20 @@ - + + @@ -151,6 +182,7 @@ + @@ -160,6 +192,8 @@ + + @@ -170,6 +204,7 @@ + diff --git a/Signal/src/views/ContactTableViewCell.h b/Signal/src/views/ContactTableViewCell.h index 6c1f30b43..3069854c5 100644 --- a/Signal/src/views/ContactTableViewCell.h +++ b/Signal/src/views/ContactTableViewCell.h @@ -14,6 +14,9 @@ @property (nonatomic, strong) IBOutlet UIButton *callButton ; @property (nonatomic, strong) IBOutlet UIButton *messageButton; +@property BOOL shouldShowContactButtons; + - (void)configureWithContact:(Contact *)contact; + @end diff --git a/Signal/src/views/ContactTableViewCell.m b/Signal/src/views/ContactTableViewCell.m index 05b9c67f9..8762aa911 100644 --- a/Signal/src/views/ContactTableViewCell.m +++ b/Signal/src/views/ContactTableViewCell.m @@ -14,6 +14,16 @@ self = [NSBundle.mainBundle loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0]; _contactPictureView.layer.borderColor = [[UIColor lightGrayColor] CGColor]; _contactPictureView.layer.masksToBounds = YES; + self.selectionStyle = UITableViewCellSelectionStyleGray; + + if (!_shouldShowContactButtons) + { + _callButton.hidden = YES; + _callButton.enabled = NO; + _messageButton.hidden = YES; + _callButton.enabled = NO; + } + return self; } @@ -22,7 +32,7 @@ } - (void)configureWithContact:(Contact *)contact { - + _associatedContact = contact; _nameLabel.attributedText = [self attributedStringForContact:contact]; @@ -38,14 +48,14 @@ [_contactPictureView addConstraint:[NSLayoutConstraint constraintWithItem:_contactPictureView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0f constant:0]]; } - if (contact.isRedPhoneContact) + if (contact.isRedPhoneContact && _shouldShowContactButtons) { _callButton.imageView.image = [UIImage imageNamed:@"call_dark"]; } else { [_callButton addConstraint:[NSLayoutConstraint constraintWithItem:_callButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0f constant:0]]; } - if (contact.isTextSecureContact) + if (contact.isTextSecureContact && _shouldShowContactButtons) { _messageButton.imageView.image = [UIImage imageNamed:@"signal"]; } else { diff --git a/Signal/src/views/DialerButtonView.m b/Signal/src/views/DialerButtonView.m index fb05893c8..51ddac5b8 100644 --- a/Signal/src/views/DialerButtonView.m +++ b/Signal/src/views/DialerButtonView.m @@ -16,8 +16,15 @@ - (void)setSelected:(BOOL)isSelected { if (isSelected) { - //self.backgroundColor = [UIUtil transparentLightGrayColor]; - //self.layer.borderWidth = 0.5f; + + UIColor *color = [UIColor blackColor]; + self.layer.shadowColor = [color CGColor]; + self.layer.shadowRadius = 15.0f; + self.layer.shadowOpacity = 1.0f; + self.layer.shadowOffset = CGSizeZero; + self.layer.masksToBounds = NO; + + } else { self.backgroundColor = [UIColor clearColor]; self.layer.borderWidth = 0.0f; diff --git a/Signal/test/textsecure/CryptographyTests.mm b/Signal/test/textsecure/CryptographyTests.mm index c5ed7e2e7..6a3e3d2d2 100644 --- a/Signal/test/textsecure/CryptographyTests.mm +++ b/Signal/test/textsecure/CryptographyTests.mm @@ -19,7 +19,14 @@ @interface Cryptography (Test) +(NSData*) truncatedSHA256HMAC:(NSData*)dataToHMAC withHMACKey:(NSData*)HMACKey truncation:(int)bytes; +(NSData*)encryptCBCMode:(NSData*) dataToEncrypt withKey:(NSData*) key withIV:(NSData*) iv withVersion:(NSData*)version withHMACKey:(NSData*) hmacKey withHMACType:(TSMACType)hmacType computedHMAC:(NSData**)hmac; -+(NSData*) decryptCBCMode:(NSData*) dataToDecrypt withKey:(NSData*) key withIV:(NSData*) iv withVersion:(NSData*)version withHMACKey:(NSData*) hmacKey withHMACType:(TSMACType)hmacType forHMAC:(NSData *)hmac; + ++(NSData*)decryptCBCMode:(NSData*)dataToDecrypt + key:(NSData*)key + IV:(NSData*)iv + version:(NSData*)version + HMACKey:(NSData*) hmacKey + HMACType:(TSMACType)hmacType + matchingHMAC:(NSData *)hmac; @end @implementation CryptographyTests @@ -48,7 +55,7 @@ XCTAssertTrue([mac isEqualToData:expectedHmac], @"Hmac of encrypted data %@, not equal to expected hmac %@", [mac base64EncodedString], [expectedHmac base64EncodedString]); - NSData* decryption=[Cryptography decryptCBCMode:encryption withKey:signalingKeyAESKeyMaterial withIV:iv withVersion:version withHMACKey:signalingKeyHMACKeyMaterial withHMACType:TSHMACSHA1Truncated10Bytes forHMAC:mac]; + NSData* decryption=[Cryptography decryptCBCMode:encryption key:signalingKeyAESKeyMaterial IV:iv version:version HMACKey:signalingKeyHMACKeyMaterial HMACType:TSHMACSHA1Truncated10Bytes matchingHMAC:mac]; NSString* decryptedMessage = [[NSString alloc] initWithData:decryption encoding:NSUTF8StringEncoding]; XCTAssertTrue([decryptedMessage isEqualToString:originalMessage], @"Decrypted message: %@ is not equal to original: %@",decryptedMessage,originalMessage); diff --git a/Signal/test/textsecure/TSMessageStorageTests.m b/Signal/test/textsecure/TSMessageStorageTests.m index ba7397b39..542aee3aa 100644 --- a/Signal/test/textsecure/TSMessageStorageTests.m +++ b/Signal/test/textsecure/TSMessageStorageTests.m @@ -34,9 +34,11 @@ - (void)setUp { [super setUp]; - self.thread = [TSContactThread threadWithContactId:@"aStupidId"]; - - [self.thread save]; + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + self.thread = [TSContactThread threadWithContactId:@"aStupidId" transaction:transaction]; + + [self.thread saveWithTransaction:transaction]; + }]; TSStorageManager *manager = [TSStorageManager sharedManager]; [manager purgeCollection:[TSMessage collection]]; @@ -82,7 +84,7 @@ - [[TSStorageManager sharedManager].databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { for (uint64_t i = timestamp; i<100; i++) { TSIncomingMessage *fetchedMessage = [TSIncomingMessage fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:timestamp] transaction:transaction]; @@ -97,7 +99,7 @@ [self.thread remove]; - [[TSStorageManager sharedManager].databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { for (uint64_t i = timestamp; i<1000; i++) { TSIncomingMessage *fetchedMessage = [TSIncomingMessage fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:timestamp] transaction:transaction]; NSAssert(fetchedMessage == nil, @"Message should be deleted!");