Compare commits

...

1675 commits

Author SHA1 Message Date
Benoit Martins
c5c970d177 Fix logging in app extension 2026-01-15 17:45:32 +01:00
Benoit Martins
986276c04f Updated CHANGELOG & bumped version code to 6.1.0 (5) 2026-01-15 09:30:48 +01:00
Benoit Martins
221f0b10d7 Refresh view when config is applied 2026-01-12 16:32:42 +01:00
Benoit Martins
aed6876065 Remove videoCaptureEnabled and videoDisplayEnabled from CoreContext init 2026-01-09 16:47:56 +01:00
Benoit Martins
4f7e4b0c36 Fix CallView when the friend has only a phone number 2026-01-09 14:12:03 +01:00
Benoit Martins
6575a4b0f2 Updated CHANGELOG & bumped version code to 6.1.0 (4) 2026-01-06 16:29:35 +01:00
Benoit Martins
9723c0de04 Allow mentioning participants in conversation 2026-01-06 12:22:22 +01:00
Benoit Martins
990d2f36af Add mentions to DynamicLinkText in ChatBubbleView 2026-01-05 12:26:58 +01:00
Benoit Martins
8d5c0ce79b Add intents extension 2025-12-29 17:09:50 +01:00
Benoit Martins
61931138b2 Remove SDK message queued workaround 2025-12-23 16:48:26 +01:00
Benoit Martins
1dbbe6a53d Add support for MWI (voicemail) push notifications 2025-12-18 16:57:35 +01:00
Benoit Martins
4c45a9bb1e Disable video calls when core.videoEnabled is false 2025-12-18 10:42:28 +01:00
Benoit Martins
4feae7fccd Temporarily disable queued and pendingDelivery message handling awaiting SDK fix 2025-12-18 09:54:30 +01:00
Benoit Martins
1501dae019 Update SPM dependencies 2025-12-17 16:55:58 +01:00
Benoit Martins
84ec09173c Display message when a ChatMessage is queued 2025-12-17 16:20:36 +01:00
Benoit Martins
4cd63b53b2 Allow add-contact UI when disableAddContact is disabled 2025-12-17 15:36:54 +01:00
Benoit Martins
d4b10d38ae Use CorePreferences contactsFilter for contact filtering 2025-12-17 11:48:51 +01:00
Benoit Martins
6827bdc1dc Update UI on config change 2025-12-16 15:57:54 +01:00
Benoit Martins
ed08190ff4 Reset CallKit UUID on invite resend 2025-12-15 13:21:12 +01:00
Benoit Martins
57b7b857bc Replace contactAddress with params.identityAddress for defaultAccount 2025-12-12 14:40:03 +00:00
Benoit Martins
f16a0f42ae Add Message Waiting Indication 2025-12-12 14:40:03 +00:00
Christophe Deschamps
c7ddf2d8d0 Search for message to update after updating eventLog Ids 2025-12-09 17:56:11 +01:00
Benoit Martins
7decb12a3f Updated CHANGELOG & bumped version code to 6.1.0 (3) 2025-12-09 10:52:33 +01:00
Benoit Martins
da1abd75ae Update Git commit, branch, and tag info 2025-12-08 13:46:22 +01:00
Benoit Martins
33b379285f Updated CHANGELOG & bumped version code to 6.1.0 (2) 2025-12-08 11:52:40 +01:00
Benoit Martins
b45a328ad4 Updated translations from Weblate 2025-12-08 11:29:15 +01:00
Benoit Martins
c9f2915ca0 Add white progress indicator dot during seeking 2025-12-05 15:59:04 +01:00
Benoit Martins
fe8432f128 Add a bottom sheet in RecordingsListFragment and display an empty state when the list is empty 2025-12-05 15:57:53 +01:00
Benoit Martins
36fa752ccf Add seeking support to the audio record player 2025-12-03 23:04:51 +01:00
Benoit Martins
0f8df65dff Merge remote-tracking branch 'refs/remotes/origin/master'
#Conflicts:
#	LinphoneApp.xcodeproj/project.pbxproj
2025-12-02 15:53:56 +01:00
Benoit Martins
221e3cbb4b Add recording player 2025-12-02 15:30:12 +01:00
Benoit Martins
2b64c26518 Add automatic Git commit, branch, and tag info for Help views 2025-12-01 15:12:03 +01:00
Benoit Martins
5492a3e3a9 Update the unread message counter in onMessageRetracted 2025-12-01 14:33:59 +01:00
Benoit Martins
773102e4bd Fix the French translation of message_content_deleted 2025-12-01 13:45:49 +01:00
Benoit Martins
b462657a77 Add recording list 2025-11-28 17:32:59 +01:00
Benoit Martins
5d13a2b49d Stop composing when the user stops typing 2025-11-26 10:44:19 +01:00
Benoit Martins
7bdb8fa92d Update last message text in conversation list 2025-11-26 09:34:40 +00:00
Benoit Martins
0daba4fe03 New message deletion feature 2025-11-26 09:34:40 +00:00
Benoit Martins
07dbf407b0 Update PopupView UI 2025-11-26 09:34:40 +00:00
Benoit Martins
7972fd7c1f Add message editing feature 2025-11-26 09:34:40 +00:00
Benoit Martins
fa1f8386b4 Refresh presence info in history detail 2025-11-20 17:49:14 +01:00
Benoit Martins
a421d90d0c Refresh displayed friend when the contacts list is updated 2025-11-20 10:37:25 +01:00
Benoit Martins
b904f71f79 Displaying core call logs instead of account call logs when the user has only one account 2025-11-18 10:52:41 +01:00
Benoit Martins
e748a001bf Fix the prefix handling in interpretUrl when calling a phone number and add this in Settings 2025-11-17 15:29:45 +01:00
Benoit Martins
4fbb43f38c Fix SIP contacts filter 2025-11-17 13:44:59 +01:00
Benoit Martins
bcee4439f5 Updated CHANGELOG & bumped version code to 6.1.0 (intermediate version) 2025-11-13 11:10:53 +01:00
Benoit Martins
b49445d50d Update translations from Weblate 2025-11-13 10:26:35 +01:00
Benoit Martins
a3d2c74592 Update SPM dependencies 2025-11-05 10:10:05 +01:00
Benoit Martins
4f6dc2c0c7 Update Launch Screen (Spash Screen) 2025-11-04 15:37:11 +01:00
Benoit Martins
08ab9a1078 Use searchChatRoomByIdentifier instead of searchChatRoom in the changeDisplayedChatRoom 2025-11-03 12:06:32 +01:00
Benoit Martins
db72bdf242 Disable video button in audio-only mode during a call 2025-11-03 09:29:19 +01:00
Benoit Martins
9413f6f5dc Update encryption when call state changes 2025-10-30 17:52:42 +01:00
Benoit Martins
7237a5f4a7 Disable mediaEncryptionMandatory when mediaEncryption is set to None 2025-10-30 15:20:18 +01:00
Benoit Martins
8c9784a21d Store magicSearch.allContacts to display the entire contact list when the app starts 2025-10-30 15:04:19 +01:00
Benoit Martins
bb4134ede0 Enable phone number calls in contact details 2025-10-30 10:59:46 +01:00
Benoit Martins
8cd322ff0e Move disable_chat_feature to the UI section 2025-10-29 16:38:04 +01:00
Benoit Martins
f8b7e3b319 Fix international prefix reset in settings 2025-10-29 16:05:57 +01:00
Benoit Martins
aefa334038 Prevent editing when contact is read-only (LDAP contacts) 2025-10-29 08:28:08 +00:00
Benoit Martins
9559701a5e Remove addLdap from LdapViewModel since core.createLdapWithParams already adds it to the list 2025-10-29 08:28:08 +00:00
Benoit Martins
5bb757d150 Edit CardDav friend 2025-10-29 08:28:08 +00:00
Benoit Martins
ac6b478eb1 Edit carddav friend 2025-10-29 08:28:08 +00:00
Benoit Martins
41f9db8199 Add Ldap and Cardav settings 2025-10-29 08:28:08 +00:00
Benoit Martins
4b3d99245f Update account params if necessary in CoreContext 2025-10-20 15:19:19 +02:00
Benoit Martins
aae7c290be Enable core push notifications by default 2025-10-09 12:05:00 +02:00
Christophe Deschamps
0a06644473 Dynamic update of colours upon theme change 2025-10-04 08:59:52 +02:00
Christophe Deschamps
b75db70d19 Added reactive bridge for swift UI in Colour Themes 2025-10-04 08:59:46 +02:00
Christophe Deschamps
9beadaadd9 Theme - Display an optional picture in Help/About view specified by an URL (config entry ui/theme_about_picture_url) 2025-10-02 13:14:45 +00:00
Christophe Deschamps
888b75a2d4 Theme - Colors 2025-10-02 13:14:45 +00:00
Benoit Martins
068b93cf1c Hide SIP domains in suggestion list 2025-10-02 14:10:10 +02:00
Benoit Martins
e9eebbd45a Hide SIP addresses via settings 2025-10-01 15:08:37 +02:00
Benoit Martins
1c3680df65 Fix crash on defaultDomain with invalid UTF-8 strings 2025-10-01 09:25:09 +02:00
Benoit Martins
1389565b83 Remove auth info when logging out of an account 2025-09-30 17:53:19 +02:00
Benoit Martins
4fde1933dd Updated CHANGELOG & version code from release/6.0 branch 2025-09-26 16:27:27 +02:00
Benoit Martins
a33a8666ae Fix EditContactFragment view and allow '+' in number dialer 2025-09-26 16:02:55 +02:00
Benoit Martins
3b2ce2ed4b Fix dial plan selector and dial plan default 2025-09-26 16:02:55 +02:00
Benoit Martins
4cf1dbd8b5 Add advanced settings to third-party SIP account login view 2025-09-25 16:21:05 +02:00
Benoit Martins
1d0df11c61 Update translations from Weblate 2025-09-22 16:58:58 +02:00
Benoit Martins
ee1c09e98f Fix threading issues in saveImage and saveFriend in ContactsManager 2025-09-22 15:17:33 +02:00
Benoit Martins
8bd84ca8a5 New Fix crash when editing a contact by safely unwrapping friend/photo 2025-09-22 11:55:12 +02:00
Benoit Martins
1e53619eaa Revert "Fix crash when editing a contact by safely unwrapping friend/photo"
This reverts commit 112029d0df.
2025-09-22 10:25:05 +02:00
Benoit Martins
112029d0df Fix crash when editing a contact by safely unwrapping friend/photo 2025-09-19 16:49:33 +02:00
Benoit Martins
8737bcb40d Change French translation of manage_account_settings 2025-09-19 16:25:08 +02:00
Benoit Martins
5837e5e85d Disable meetings view when audio/video conference factory address is missing 2025-09-19 16:09:12 +02:00
Benoit Martins
e81699052a Stop requesting device list in AccountModel initializer 2025-09-19 11:37:03 +02:00
Benoit Martins
147682a0e5 Disable push notifications when pushNotificationAllowed is false 2025-09-19 11:16:17 +02:00
Benoit Martins
0dfdb5551c Update config files 2025-09-19 11:16:17 +02:00
Benoit Martins
880967d2e3 Fix meeting scheduler 2025-09-16 16:32:56 +02:00
Benoit Martins
b36f220911 Update friend list subscriptions on Core queue 2025-09-15 15:52:59 +02:00
Benoit Martins
a2564c4cc0 Compute notifications count in core queue 2025-09-15 15:34:43 +02:00
Benoit Martins
d3984b4b1a Fix call video display (nativePreviewWindow and nativeVideoWindow) 2025-09-15 15:18:21 +02:00
Benoit Martins
91c6f7a311 Fix call video display 2025-09-15 14:27:03 +02:00
Benoit Martins
de9656d94d Fix issue with meeting scheduling 2025-09-15 13:35:50 +02:00
Benoit Martins
43d63ae081 Reset the displayed chat room also when the chat room is empty 2025-09-15 12:11:02 +02:00
Benoit Martins
c7f7606859 Fix crash on core.queue by safely reading Strings from config 2025-09-15 11:36:07 +02:00
Benoit Martins
54ca929f88 Ensure call termination is executed on the Core queue 2025-09-15 11:16:44 +02:00
Benoit Martins
c6291f61d6 Add a burger button to open the side menu 2025-09-15 11:10:03 +02:00
Benoit Martins
42997d6891 Change the layout icon in the conference call 2025-09-15 10:51:31 +02:00
Benoit Martins
014e7c575e Updated CHANGELOG & version code from release/6.0 branch 2025-09-12 14:12:39 +02:00
Benoit Martins
773696260b Update translations from Weblate 2025-09-12 14:08:47 +02:00
Benoit Martins
304f46ba02 Add Done button toolbar to number pads 2025-09-11 18:14:13 +02:00
Benoit Martins
e0229fde0f Fix avatar photo refresh 2025-09-11 17:59:58 +02:00
Benoit Martins
108df56148 Fix onEphemeralMessageTimerStarted callback 2025-09-11 17:50:30 +02:00
Benoit Martins
c7a9edf25f Fix crash in updateEncryption by safely handling optional currentCall 2025-09-11 16:53:02 +02:00
Benoit Martins
90f2ad7e58 Fix friend list refresh triggered by onPresenceReceived 2025-09-11 16:31:14 +02:00
Benoit Martins
1485e7a574 Fix sorted list in MagicSearch when friend is nil 2025-09-11 10:52:41 +02:00
Benoit Martins
8f131ad335 Fix crash when adding or removing SIP addresses and phone numbers in EditContactFragment 2025-09-05 16:51:21 +02:00
Benoit Martins
bc1c737973 Use saveImage on core queue 2025-09-05 15:49:24 +02:00
Benoit Martins
926107061a Update textToImage to generate image on the core queue 2025-09-05 15:25:19 +02:00
Benoit Martins
3aa9419c5d Fix awaitDataWrite execution on main queue 2025-09-05 15:19:44 +02:00
Benoit Martins
a5bef93587 Send DTMF on the core queue 2025-09-05 14:38:50 +02:00
Benoit Martins
525e705b59 Prevent crash by copying Friend addresses and phone numbers before removal 2025-09-05 14:19:29 +02:00
Benoit Martins
a7e2ebb600 Ensure core is On before stopping it on background entry 2025-09-04 16:40:34 +02:00
Benoit Martins
14635250f8 Use point_to_point string for encrypted calls in conference 2025-09-04 15:16:03 +02:00
Benoit Martins
357418287c Add help view to login page 2025-09-04 15:00:52 +02:00
Benoit Martins
3c56f09130 Hide VFS setting 2025-09-04 15:00:09 +02:00
Benoit Martins
5b6e2e1c0a Fix textToImage crash 2025-09-04 12:00:09 +02:00
Benoit Martins
53a135a4b6 Update CHANGELOG.md 2025-09-02 09:53:08 +00:00
Benoit Martins
5035c6a924 Update README.md 2025-09-02 08:32:02 +00:00
Benoit Martins
8511a46985 Merge remote-tracking branch 'refs/remotes/origin/master' 2025-09-01 16:22:08 +02:00
Benoit Martins
240116edfe Update build version to (101) 2025-09-01 16:02:39 +02:00
Benoit Martins
92aada9537 Remove build number from version info 2025-09-01 16:01:28 +02:00
Benoit Martins
140f6d5e2b Remove "Beta" from User-Agent and Version info 2025-09-01 15:43:12 +02:00
Benoit Martins
e3106a3f50 Update build version to (100) 2025-09-01 15:26:46 +02:00
Benoit Martins
72ac7e25f8 Update AppIcon 2025-09-01 15:24:00 +02:00
Benoit Martins
1e6df2cd62 Update build version to (85) 2025-09-01 14:41:07 +02:00
Benoit Martins
5ff4484ec5 Update SPM dependencies 2025-09-01 14:40:25 +02:00
Benoit Martins
f7b64b365f Update translations from Weblate 2025-09-01 12:34:49 +00:00
Benoit Martins
53ab111d32 Remove markAsRead prints 2025-09-01 13:14:09 +02:00
Benoit Martins
7ddc584a2a Fix markAsRead for conversation 2025-09-01 13:12:38 +02:00
Benoit Martins
8079921236 Fix iPad half sheet 2025-08-31 22:40:21 +02:00
Benoit Martins
06b76b2935 Fix Share extension 2025-08-30 17:09:11 +02:00
Benoit Martins
106e628e41 Fix contacts list 2025-08-30 13:32:09 +02:00
Benoit Martins
c54fda28f3 Share extension support URL, UIImage and Data items 2025-08-28 10:49:30 +02:00
Benoit Martins
3ce27ad496 Fix Share extension with unsaved screenshot 2025-08-27 15:52:50 +02:00
Benoit Martins
750c27001f Refresh call view when a user starts a group call in the conversation view 2025-08-27 14:27:56 +02:00
Benoit Martins
a5db77fd7c Update build version to (84) 2025-08-26 12:28:32 +02:00
Benoit Martins
3c3f3549ab Add meeting invitation message in conversation list 2025-08-26 12:21:51 +02:00
Benoit Martins
3b2f97db6c Fix phone number in registration popup 2025-08-26 11:19:58 +02:00
Benoit Martins
9325485da3 Fix CallKit title when receiving a call 2025-08-26 11:09:11 +02:00
Benoit Martins
a11d23af33 Update build version to (83) 2025-08-25 17:14:38 +02:00
Benoit Martins
65f965385c Hide group chat and group call buttons when settings are disabled 2025-08-25 17:02:30 +02:00
Benoit Martins
6d81455b56 Do onEnterBackground in async core queue 2025-08-25 16:17:13 +02:00
Benoit Martins
1a19012613 Use the disableChatFeature variable from SharedMainViewModel instead of CorePreference 2025-08-25 16:04:37 +02:00
Benoit Martins
cdad4a05bd Safely using magicSearch in MagicSearchSingleton 2025-08-25 15:34:39 +02:00
Benoit Martins
f15ef58613 Fix conversation subject in the conversation list 2025-08-25 14:46:12 +02:00
Benoit Martins
0e254f4371 Fix unread messages count 2025-08-25 13:59:08 +02:00
Benoit Martins
7f9e1cc2c9 Update SPM dependencies 2025-08-25 11:54:22 +02:00
Benoit Martins
ab3cf55f49 Update build version to (82) 2025-08-01 15:36:01 +02:00
Benoit Martins
80a8d24730 Fix "Encrypted Conversation" banner in chatrooms 2025-08-01 15:30:10 +02:00
Benoit Martins
82d1af7a2c Update build version to (81) 2025-07-31 17:49:44 +02:00
Benoit Martins
c6d58693eb Add "Encrypted Conversation" banner in chatrooms 2025-07-31 17:42:28 +02:00
Benoit Martins
64a3876a95 Fix conversation search in forward view 2025-07-31 09:50:16 +02:00
Benoit Martins
647e51380c Fix disabled button color in CallView 2025-07-29 18:29:04 +02:00
Benoit Martins
a7bab90efb Fix various display issues in CallView 2025-07-29 16:54:58 +02:00
Benoit Martins
bfd85489ff Add isJoining state to manage active speaker status 2025-07-29 15:03:38 +02:00
Benoit Martins
2d2e9d7c21 Update video call icon 2025-07-29 11:54:28 +02:00
Benoit Martins
19eb44882f Fix keyboard when replying to a message 2025-07-29 00:09:54 +02:00
Benoit Martins
5b4d1bee69 Open keyboard when replying to a message 2025-07-28 23:55:45 +02:00
Benoit Martins
1910536fd6 Fix notification service 2025-07-28 23:10:22 +02:00
Benoit Martins
4bc9b2a783 Fix unread message and missed call counters 2025-07-28 22:24:04 +02:00
Benoit Martins
1ab630c0f5 Fix bottom sheets 2025-07-28 21:54:39 +02:00
Benoit Martins
43ebb20646 Reuse conversation model when sending and receiving messages 2025-07-28 20:44:35 +02:00
Benoit Martins
7e22ae310e Fix FlexiApi register 2025-07-28 13:54:21 +02:00
Benoit Martins
fe1e68f197 Fix BottomSheet height in CallView 2025-07-28 09:55:02 +02:00
Benoit Martins
6626a0d1a1 Fix setup du SingleSignOnManager 2025-07-25 11:52:12 +02:00
Benoit Martins
6b88006faa Fix chat creation in the call view 2025-07-25 11:03:59 +02:00
Benoit Martins
beee998627 Disable isEndToEndEncryptedChatAvailable check when creating a conference 2025-07-24 16:36:19 +02:00
Benoit Martins
bf4e6fd23c Disable picture-in-picture mode 2025-07-24 14:39:46 +02:00
Benoit Martins
9d861a7b81 Hide AddParticipantsFragment on check click 2025-07-24 11:54:14 +02:00
Benoit Martins
24501f3ce2 Hide AddParticipantsFragment on check click in MeetingView 2025-07-24 11:42:25 +02:00
Benoit Martins
c3e3af65b5 Fix PopupLoadingView for one-to-one and group calls 2025-07-24 11:25:24 +02:00
Benoit Martins
db66abc5b9 Add remove attachment button before sending 2025-07-24 10:47:56 +02:00
Benoit Martins
4767f6deea Display the deleteChatRoom option in the ConversationsList bottom sheet when the conversation is read-only 2025-07-23 12:33:24 +02:00
Benoit Martins
ad80fb3cfb Display participant count in Conversation info screen 2025-07-23 12:17:05 +02:00
Benoit Martins
ac4839dcae Fix 'Galerie' in French translation 2025-07-23 11:58:27 +02:00
Benoit Martins
dc03349aae Fix display of ephemeral message duration and icon 2025-07-23 11:28:31 +02:00
Benoit Martins
927ef5fbbc Remove static sharedCoordinator from UIList and ensure a new Coordinator is created for every instance 2025-07-23 10:34:38 +02:00
Benoit Martins
5e267dc2de Insert the user's reaction at the top of the reactions list 2025-07-23 09:46:32 +02:00
Benoit Martins
93094b1bec Fix one-to-one call start 2025-07-22 18:18:36 +02:00
Benoit Martins
917d22b1ec Fix add participant process in group call and group conversation 2025-07-22 14:48:31 +02:00
Benoit Martins
e2432683ae Fix "Add Participant" button on call screen 2025-07-22 11:37:14 +02:00
Benoit Martins
ad736c8fc5 Refresh contact list when Add Participant fragment is closed 2025-07-22 10:33:18 +02:00
Benoit Martins
b775f41ae0 Include phone number in lastSearchFriend results 2025-07-22 09:23:25 +02:00
Benoit Martins
914177000b Debounce ContactLoaded notification to reduce redundant calls 2025-07-21 23:32:34 +02:00
Benoit Martins
a7e1a8b210 Show 'Mark as read' option in bottom sheet when unreadMessagesCount > 0 2025-07-21 15:26:50 +02:00
Benoit Martins
992bd6c369 Remove the fake "Today" meeting model when a filter is applied 2025-07-21 15:20:47 +02:00
Benoit Martins
d3a3e91361 Fix date picker of ScheduleMeetingFragment 2025-07-21 14:58:42 +02:00
Benoit Martins
8cbc4682e9 Add padding to description TextField in ScheduleMeetingFragment 2025-07-21 13:58:00 +02:00
Benoit Martins
0217c167dc Fix contact search in MagicSearch 2025-07-21 13:50:15 +02:00
Benoit Martins
af5e25262c Fix add participants fragment 2025-07-21 11:47:06 +02:00
Benoit Martins
64a72c0704 Fix time zone picker in the schedule meeting fragment 2025-07-21 10:34:41 +02:00
Benoit Martins
ff8fb2d179 Update CHANGELOG.md 2025-07-21 07:48:14 +00:00
Benoit Martins
36ac07fefa Update build version to (90) 2025-07-17 09:52:43 +02:00
Benoit Martins
d170e1e52e Fix paused call view 2025-07-16 17:46:41 +02:00
Benoit Martins
d17a9bbe4c Fix avatar display in conversation list 2025-07-15 16:36:35 +02:00
Benoit Martins
fcaedf8c02 Prevent image tap on long press selection 2025-07-15 14:55:50 +02:00
Benoit Martins
fd7242d9bb Hide mediasIsLoading fragment when image or file picker returns an empty list 2025-07-15 12:27:02 +02:00
Benoit Martins
707f8aa3b9 Add message resend feature 2025-07-15 12:15:57 +02:00
Benoit Martins
67041c20f8 Fix conflict between swipe and long press on message 2025-07-15 11:51:29 +02:00
Benoit Martins
2a04fb7254 Fix remoteAddress string in call view 2025-07-15 11:02:06 +02:00
Benoit Martins
abe0f2db1b Add IMDN sheet to selected message view 2025-07-15 10:51:54 +02:00
Benoit Martins
c6179c973c Add emoji picker 2025-07-11 15:43:29 +02:00
Benoit Martins
cfcd55a622 Update build version to (79) 2025-07-10 15:26:22 +02:00
Benoit Martins
8ee693a092 Replace setNewPassword with updateAuthInfo in PopupUpdatePassword 2025-07-10 15:16:59 +02:00
Benoit Martins
37b913d692 Update build version to (78) 2025-07-10 13:59:11 +02:00
Benoit Martins
b4d342479b Show Linphone RC config file content 2025-07-10 12:34:57 +02:00
Benoit Martins
4b87be84bd Update defaultAccount on logout 2025-07-10 11:59:47 +02:00
Benoit Martins
737a9880b6 Check permissions before displaying the PermissionsFragment view 2025-07-10 11:42:03 +02:00
Benoit Martins
e981d5e0fe Fix French translations in AssistantPermissions view 2025-07-10 10:41:08 +02:00
Benoit Martins
1c858a4d9b Handle pending URL when core is started in AssistantView 2025-07-10 09:46:11 +02:00
Benoit Martins
05d955b698 Update default account if core is in GlobalState.on 2025-07-09 13:31:45 +02:00
Benoit Martins
cb26bc0bae Add banner for account error state 2025-07-09 13:09:31 +02:00
Benoit Martins
9692a310d5 Fix default account avatar refresh when switching between multiple accounts 2025-07-09 00:29:52 +02:00
Benoit Martins
60352dbc23 Enable support for multiple account 2025-07-09 00:07:27 +02:00
Benoit Martins
c97e0045c8 Fix SideMenuAccountRow UI for failed connection state 2025-07-08 14:07:37 +02:00
Benoit Martins
fe261f3127 Add popup for updating password 2025-07-08 13:27:01 +02:00
Benoit Martins
2b79b95079 Set videoEnabled to false when audio call starts 2025-07-08 09:28:00 +02:00
Benoit Martins
ec44690cfe Disable chat messages when chat feature setting is disabled 2025-07-07 22:16:38 +02:00
Benoit Martins
0335d4efaf Fix fullscreen mode in CallView 2025-07-07 18:56:28 +02:00
Benoit Martins
3aba3bc975 Add a link to the user guide in the help view 2025-07-01 17:58:09 +02:00
Benoit Martins
fd100e8378 Remove setting registerEnabled to false when registration fails 2025-07-01 11:06:23 +02:00
Benoit Martins
401c4c048e Fix text field refresh when using speech-to-text 2025-06-30 17:04:48 +02:00
Benoit Martins
9d9f46f4e7 Fix message bubble display for text messages with media 2025-06-30 10:48:58 +02:00
Benoit Martins
2788bb2132 Update build version to (77) 2025-06-26 10:28:53 +02:00
Benoit Martins
cba7621413 Set publishEnabled to false by default in app extension, and enable it on main app 2025-06-26 10:27:26 +02:00
Benoit Martins
c0916af3ce Decrease shared extension minimum deployment target to iOS 15.0 2025-06-26 10:08:54 +02:00
Benoit Martins
1d7a10c16b Replace TRUEPREDICATE with explicit NSExtensionActivationRule to comply with App Store requirements 2025-06-25 17:44:54 +02:00
Benoit Martins
43094e66a4 Update build version to (76) 2025-06-25 17:23:02 +02:00
Benoit Martins
faf84164a4 Add shared extension 2025-06-25 17:17:35 +02:00
Benoit Martins
54fa7be51d Scroll to today's meeting when the meeting view appears 2025-06-25 09:27:28 +02:00
Benoit Martins
dc722938c1 Update SPM dependencies 2025-06-24 17:02:39 +02:00
Benoit Martins
2a365f3baa Set coreQueue in sharedCore init 2025-06-24 16:15:27 +02:00
Sylvain Berfini
64dc7b5efe Update translations from Weblate 2025-06-24 12:22:21 +00:00
Benoit Martins
8db22b6b52 Fix removing account when registration fails 2025-06-24 12:09:38 +02:00
Benoit Martins
decb2ef753 Hide chatroom joined message notifications and fix NotificationService 2025-06-23 16:52:52 +02:00
Benoit Martins
1ecc1232a1 Fix getChatRoomId and conference join/leave callbacks 2025-06-23 12:13:14 +02:00
Benoit Martins
8731387351 Use last message timestamp in conversation view instead of chatroom last update time 2025-06-20 15:25:55 +02:00
Benoit Martins
7f16eb7ec2 Fix multiple initializations of LinphoneApp and ContentView 2025-06-20 14:55:29 +02:00
Benoit Martins
8b53f55e7a Refactored other views 2025-06-18 16:57:41 +02:00
Benoit Martins
8aa5b32787 Refactored MeetingsView 2025-06-18 14:53:01 +02:00
Benoit Martins
0d149c7b54 Refactored ConversationFragment 2025-06-17 22:57:43 +02:00
Benoit Martins
dcd80e14bc Refactored ConversationsView 2025-06-13 15:39:25 +02:00
Benoit Martins
44f8ee4ae1 Fix unnecessary avatar refresh 2025-06-12 17:35:42 +02:00
Benoit Martins
c90fef2c56 Fixed several main thread hangs 2025-06-12 15:46:50 +02:00
Benoit Martins
3883d89aa7 Refactored CallView 2025-06-10 18:25:29 +02:00
Benoit Martins
b4a19c9fd0 Refactored AccountProfile 2025-06-10 15:15:49 +02:00
Benoit Martins
06847bc82e Refactored HistoryView (Part 2) 2025-06-09 16:10:17 +02:00
Benoit Martins
f534ccb560 Refactored HistoryView 2025-06-06 11:30:28 +02:00
Benoit Martins
865f889a3c Refactored ContactsView (Part 2) 2025-06-02 18:17:05 +02:00
Benoit Martins
cd223dcf06 Refactored ContactsView 2025-05-27 16:54:42 +02:00
Benoit Martins
0bc0eb8e19 update CoreContext.doOnCoreQueue 2025-05-23 15:50:27 +02:00
Benoit Martins
9465f7bc68 Removed outdated warning log 2025-05-20 16:17:01 +02:00
Benoit Martins
80efed4f0a Update README 2025-05-20 16:14:58 +02:00
Benoit Martins
645144a938 Update README 2025-05-20 15:56:17 +02:00
Benoit Martins
0b51bd55ce Log to Crashlytics in background thread 2025-05-20 10:50:45 +02:00
Benoit Martins
0fceedc0aa Merge branch 'master' into release/6.0 2025-05-19 17:33:37 +02:00
Benoit Martins
323987f1d9 Restore GoogleService-Info.plist files and remove them from .gitignore 2025-05-19 13:38:49 +02:00
Benoit Martins
90d79c01db Untrack GoogleService-Info.plist files 2025-05-19 13:25:28 +02:00
Benoit Martins
dd4284162c Fix Swift Package Manager
Change App name to LinphoneApp
Update build version to (74)
2025-05-19 11:20:16 +02:00
Benoit Martins
c8dc64b7fd Update msgNotificationService/GoogleService-Info.plist 2025-05-13 16:15:40 +00:00
Benoit Martins
db437bccf3 Update GoogleService-Info.plist 2025-05-13 16:14:54 +00:00
Benoit Martins
de03c3e759 Update .gitignore 2025-05-13 18:12:04 +02:00
Benoit Martins
9c2ce60b04 Use Swift Package Manager instead Cocoapods 2025-05-13 15:49:41 +02:00
Benoit Martins
0da7f36619 Fix provisioning click URI handler (after core has started) 2025-05-12 15:57:11 +02:00
Benoit Martins
4f1fcbbcf6 Added file picker, updated unsecured chatroom icon, and replaced floating button with a scroll-down icon in the chatroom 2025-05-09 16:09:05 +02:00
benoit.martins
7d6b2d8e0b Refactoring of addChatRoom and removeChatRoom functions 2025-05-02 14:54:44 +02:00
benoit.martins
713526ac57 Use SDK chatroom filter 2025-05-02 13:36:54 +02:00
benoit.martins
fdfc7b2af9 Fix crash on first load of chatrooms 2025-05-02 13:07:06 +02:00
benoit.martins
6eaaf3c9c5 Update chatroom filter 2025-04-30 18:11:21 +02:00
Benoit Martins
3d6338effa Remove linphone.db file if it exists 2025-04-29 15:24:01 +02:00
Benoit Martins
896a908f3f Add copyDatabaseFileToDocumentsDirectory function 2025-04-28 17:30:35 +02:00
QuentinA
1215ae0950 When loading/adding an account where pushEnabled != remotePushEnabled, force remotePushEnable to match the value of pushEnabled 2025-04-28 11:39:26 +02:00
Benoit Martins
97eec83915 Initialize ConversationModel in the main thread 2025-04-28 11:38:49 +02:00
Benoit Martins
f85e7772c8 Remove mIterateSuscription var 2025-04-24 12:44:19 +02:00
Benoit Martins
16da763e5e Enable Auto-Iteration 2025-04-24 12:03:57 +02:00
Benoit Martins
90231749c4 Fix provisioning click URI handler 2025-04-24 10:03:54 +02:00
Benoit Martins
49736388cf Persist last visited tab and restore it on launch 2025-04-22 16:31:41 +02:00
benoit.martins
eb41590ed0 Add Localizable file for msgNotificationService 2025-04-13 23:38:24 +02:00
benoit.martins
05fc902790 Remove toast notification for validated QR code 2025-04-13 23:20:34 +02:00
benoit.martins
7219731c0e Fix vCard contact list 2025-04-13 23:16:46 +02:00
Benoit Martins
5989887723 Add core delegate in contactsManager to get and remove friends from the list 2025-04-04 17:35:26 +02:00
Benoit Martins
b83ae7fde6 Add new localizable files 2025-04-04 15:13:19 +02:00
Benoit Martins
21b8f02e65 Remove older localizable file 2025-04-04 15:07:15 +02:00
Christophe Deschamps
0179c12b07 Moved to SPM stable branch (release/5.4 sdk) 2025-03-25 16:42:50 +01:00
Christophe Deschamps
03bd42d750 Move from Pod to SPM for linphone-sdk 2025-03-25 13:50:00 +00:00
benoit.martins
512ca5afe8 Update build version to (73) 2025-03-14 11:35:36 +01:00
benoit.martins
f2615b89e0 Fix outgoing conference call initiation 2025-03-14 11:33:17 +01:00
benoit.martins
5cadd63d1e Schedule conferences with end-to-end encryption enabled and chat channel activated 2025-03-12 17:19:32 +01:00
Benoit Martins
6b9857b11b Fix deletion of ephemeral messages 2025-03-11 16:41:58 +01:00
Benoit Martins
a760a98366 Fix crashes when sending the first message and receiving the event log 2025-03-11 15:54:07 +01:00
Benoit Martins
b7ef60692d Use new core.createChatRoom() that replaces the older version 2025-03-11 11:35:16 +01:00
Benoit Martins
5c14429eda Use createConferenceParams instead of createDefaultChatRoomParams to create a ChatRoom 2025-03-07 17:26:11 +01:00
Benoit Martins
2f95e7b4d3 Add searchForContactsWithoutCoreThread function 2025-03-07 17:24:58 +01:00
Benoit Martins
273c77edbe Moved mountain image to the bottom of all Login views 2025-03-06 16:45:18 +01:00
Benoit Martins
0b81887728 Add IMDN Threshold 2025-03-04 11:46:55 +01:00
Benoit Martins
63a1886ff5 Refactor fetchContacts and textToImage methods for better thread handling 2025-02-25 17:15:54 +01:00
Benoit Martins
2a6abbe183 Refactor attachment update logic in addChatMessageDelegate 2025-02-25 11:20:01 +01:00
Benoit Martins
ed6f3215b9 Fix friend.consolidatedPresence calls in addFriendDelegate on the core thread 2025-02-25 10:56:45 +01:00
Benoit Martins
ad893ab16e Fix FileTransferDone crash 2025-02-24 17:28:40 +01:00
Benoit Martins
7ae256b566 Fix crash in conversationModel.getChatRoomSubject when avatarListModel is null 2025-02-24 16:14:58 +01:00
Benoit Martins
acdd201bbe Add stack navigationViewStyle to StartCallFragment 2025-02-24 15:21:13 +01:00
Benoit Martins
ce24ddc919 Use Conference object in StartCallViewModel for group call init 2025-02-24 15:16:11 +01:00
Benoit Martins
ad48ff8bca Fix display of event messages 2025-02-24 14:26:47 +01:00
Benoit Martins
095705ad37 Use Conference object instead of ConferenceScheduler for group call initiation 2025-02-24 12:10:03 +01:00
Benoit Martins
1510a1b045 Refactor the updateChatRoom and updateChatRoomsList functions in ConversationsListViewModel to fix crashes 2025-02-19 17:16:00 +01:00
Benoit Martins
abf294625a Fix crash in deleteMessage method of ConversationViewModel 2025-02-19 15:59:17 +01:00
Benoit Martins
0c573e6e5c Add conditions to ensure eventLog.chatMessage is not nil to prevent potential crashes 2025-02-19 15:44:38 +01:00
Benoit Martins
ac4ea27a78 Add more nullability checks in getNewMessages function 2025-02-17 16:43:02 +01:00
Benoit Martins
a524d3c362 Fix user avatar issue 2025-02-17 14:18:19 +01:00
benoit.martins
f1fcb9129c Fixed the bug that prevented users from logging out 2025-02-07 18:21:05 +01:00
benoit.martins
b376328f33 Update build version to (70) 2025-02-06 23:55:20 +01:00
benoit.martins
413e1b4082 Store and use default account avatar to improve display speed 2025-02-06 23:53:46 +01:00
benoit.martins
56f732144d Fix notification click redirection to chatroom 2025-02-06 22:34:44 +01:00
benoit.martins
db24bd842f Merge remote-tracking branch 'refs/remotes/origin/fix/beta_fixes'
#Conflicts:
#	Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift
2025-02-06 20:21:06 +01:00
Benoit Martins
be53335b67 Bug fixes for the public beta 2025-02-06 17:52:34 +01:00
benoit.martins
0bc9aa977c Fix displayed chat room reset 2025-02-05 15:39:24 +01:00
Benoit Martins
ad54e09253 Fix displayed chat room reset 2025-02-04 17:47:02 +01:00
Benoit Martins
4641ef680c Refactor computeChatRoomsList for better performance 2025-02-03 17:27:42 +01:00
Benoit Martins
46f5f21216 Fix contact refresh 2025-01-31 17:52:41 +01:00
Benoit Martins
00bbf41f9a Edit contact in main thread 2025-01-31 15:31:44 +01:00
Benoit Martins
cf109f9787 Allow participantDevice to be nullable in onActiveSpeakerParticipantDevice callback 2025-01-31 14:11:31 +01:00
Benoit Martins
a3c20e3ae7 Avoid using multiple threads in the conversation model 2025-01-30 16:41:10 +01:00
Benoit Martins
a9854bc378 Optimize computeChatRoomsList execution frequency 2025-01-30 13:35:18 +01:00
Benoit Martins
20da49167c Refactor event log check in getNewMessages for better readability and safety 2025-01-30 13:33:06 +01:00
Benoit Martins
b71267eed5 Removed automatic download activation on application launch 2025-01-29 17:18:15 +01:00
Benoit Martins
d353a9416e Added nil check for content.name in foreach loop 2025-01-29 17:14:38 +01:00
Benoit Martins
4d10b44da5 Fix display of call counter 2025-01-29 16:59:41 +01:00
Benoit Martins
7e1e3adf8d Add a check to avoid out-of-bounds index error in ContentView.swift 2025-01-29 16:16:41 +01:00
Benoit Martins
e74df76301 Reduced conversation list refresh to once, triggered after fetching all contacts 2025-01-29 15:23:10 +01:00
Benoit Martins
34ff5bcf16 Refactor resetDisplayedChatRoom function for better performance and to avoid crashes 2025-01-29 09:55:54 +01:00
Benoit Martins
e3dd3f5a86 Prevent index out of range in conversationMessagesSection rows 2025-01-27 16:45:53 +01:00
Benoit Martins
3ca2bca27c Ensure eventLogId update is performed on the main thread 2025-01-27 09:51:36 +01:00
Benoit Martins
9a208e36b2 Fix display of selected participants 2025-01-27 09:32:11 +01:00
Benoit Martins
ac0e70f719 Add help view 2025-01-23 16:29:56 +01:00
QuentinArguillere
940c3519a6 Fix french translations for call settings 2025-01-21 17:27:23 +01:00
QuentinArguillere
1047a01fd4 Add info toasts to meeting creation/edition 2025-01-21 17:20:23 +01:00
QuentinArguillere
a130e83d60 Update for french translation 2025-01-21 17:20:22 +01:00
QuentinArguillere
93abf64da6 Hide/show PIP window on active speaker call view appear/disappear 2025-01-21 17:16:51 +01:00
QuentinArguillere
e01989c9c9 Fix PiP window initial size, remove debugtraces logs 2025-01-21 17:16:45 +01:00
QuentinArguillere
511c6e4093 Implement PiP for video calls 2025-01-21 17:16:40 +01:00
QuentinArguillere
b3d83c1580 Do not trigger onEnterBackground // onEnterForeground corecontext event when there is a call in progress. This avoids a UI deadlock from iOS video filters when entering foreground with video capture active 2025-01-21 17:16:34 +01:00
QuentinArguillere
0b910ca190 Remove unnecessary synchronous dispatch queue 2025-01-21 17:16:28 +01:00
QuentinArguillere
ae1180c222 Remove unneeded dispatch queue in magicsearch 2025-01-21 17:16:23 +01:00
QuentinArguillere
b40110f919 Trigger onEnterBackground if we are in background when all calls are terminated 2025-01-21 17:16:18 +01:00
Benoit Martins
f538301efa Hide the recording list entry from the side menu 2025-01-21 14:49:37 +01:00
Benoit Martins
8ec47edf25 Add audio and video codecs 2025-01-21 11:56:06 +01:00
Benoit Martins
10a400351a Disable audio device settings 2025-01-20 16:57:02 +01:00
Benoit Martins
7f2c276b6a Fix phone number linked to SIP address 2025-01-20 13:20:27 +01:00
Benoit Martins
9b31eb3d99 Add advanced settings view 2025-01-16 12:07:00 +01:00
Benoit Martins
eb68b50a43 Add settings view 2025-01-14 17:31:19 +01:00
Benoit Martins
fe0d0f166c Refactoring of Toggle and TextField in Account Settings 2025-01-10 11:14:50 +01:00
Benoit Martins
19d0be524b Add outboundProxy setter to the account settings 2025-01-10 10:34:27 +01:00
Benoit Martins
45def92bfa Update build version to (65) 2025-01-10 09:48:03 +01:00
Benoit Martins
57c823ba4e Removed unused translation strings 2025-01-09 16:29:22 +01:00
Benoit Martins
0aba4044a1 Add foreground entry listener to refresh conversation list 2025-01-09 16:17:22 +01:00
Benoit Martins
992afa16cf Replaced all null address.username with address.asStringUriOnly 2025-01-09 16:17:22 +01:00
Benoit Martins
6d116b6cec Add account settings view 2025-01-09 16:17:20 +01:00
Benoit Martins
35eb8cb8df Logout on the account profile page 2025-01-09 16:15:34 +01:00
Benoit Martins
11053b2ca3 Add devices list in Account profile 2025-01-09 16:12:14 +01:00
Benoit Martins
e383826e91 Add logout button to AccountProfileFragment 2025-01-09 16:12:14 +01:00
Benoit Martins
35f32d623c Moved removeAuthInfo to "failed" state to prevent removing auth info when deactivating an account in CoreContext 2025-01-09 16:12:14 +01:00
Benoit Martins
b7446f6d26 Fix avatar and displayname in ConversationInfoFragment 2025-01-09 16:12:14 +01:00
Benoit Martins
fdd0925184 Fix nil username participant in ConversationModel 2025-01-09 16:12:14 +01:00
Benoit Martins
5c71c34801 Fix displayname in AccountProfileFragment 2025-01-09 16:12:14 +01:00
Benoit Martins
e4b90b58e8 Update the internationalPrefix when a dial plan is selected in the account profile 2025-01-09 16:12:14 +01:00
Benoit Martins
8609f880fb Update default profile picture when changing display name 2025-01-09 16:12:14 +01:00
Benoit Martins
0e635ec9fc Remove NavigationView in ContentView 2025-01-09 16:12:11 +01:00
Benoit Martins
284b0433d8 Change Account profile 2025-01-09 15:21:11 +01:00
QuentinArguillere
97f5a2270d Set default internationalPrefix to 33 // FRA, and use it for calls and chat 2025-01-09 15:02:29 +01:00
Benoit Martins
9421135fac Change account photo 2025-01-09 15:02:29 +01:00
Benoit Martins
7d394f5313 Fix forward message 2024-12-16 10:41:32 +01:00
QuentinArguillere
c2c5b26d4b Add missing french translations 2024-12-12 14:39:00 +01:00
QuentinArguillere
a68c9f5da8 Add all missing english translations for keys 2024-12-12 11:49:15 +01:00
QuentinArguillere
8d96b08f14 Add all missing translation keys (not the corresponding translations yet) 2024-12-10 18:08:07 +01:00
QuentinArguillere
715b92ab3f Update call translations 2024-12-09 16:50:39 +01:00
QuentinArguillere
82008d5a5f Update Login translations 2024-12-09 16:50:39 +01:00
QuentinArguillere
e32e22de76 Fix translation for general terms and privacy policy 2024-12-09 16:50:39 +01:00
Benoit Martins
bd769e71bb Update build version to (64) 2024-12-05 09:48:36 +01:00
benoit.martins
9366a2f13a Change log_collection_upload_server_url and file_transfer_server_url values 2024-12-04 15:38:27 +01:00
benoit.martins
8cd335e649 Add Account Profile 2024-12-04 15:36:58 +01:00
QuentinArguillere
2e4b0dc1e4 Update build version to (63) 2024-12-02 10:16:49 +01:00
Benoit Martins
17c91784ad Simplify and clarify avatar handling logic with safer unwrapping 2024-11-29 11:29:44 +01:00
Benoit Martins
9f796aa412 Update testflight build to (62) 2024-11-28 16:20:27 +01:00
Benoit Martins
4cfea6ba80 Fix Media content in bubble message 2024-11-28 16:16:28 +01:00
Benoit Martins
1763f21359 Fix media list rendering in chat bubble 2024-11-28 16:16:28 +01:00
Benoit Martins
f51e92adee Refactor file path extraction for getNewFilePath 2024-11-28 16:16:27 +01:00
QuentinArguillere
8fb0b8a5df Add conversations translations 2024-11-28 16:16:27 +01:00
QuentinArguillere
6ca88dfb0f Add history translations 2024-11-28 16:16:27 +01:00
QuentinArguillere
3171f0d97d Update translations in contact menu 2024-11-28 16:16:27 +01:00
QuentinArguillere
7c42e7ed5c Translations for Welcome view and some various buttons 2024-11-28 16:16:27 +01:00
QuentinArguillere
533cb11b24 Translations for History contact fragment 2024-11-28 16:16:27 +01:00
QuentinArguillere
e59c9efb09 Permission translations 2024-11-28 16:16:27 +01:00
QuentinArguillere
3f154651ea Replace text with translation keys in Meeting waiting room, meetings list, meeting scheduling fragments 2024-11-28 16:16:27 +01:00
QuentinArguillere
c6c25ce88b Make sure device name used in core userAgent does not containt apostrophes 2024-11-28 16:16:27 +01:00
QuentinArguillere
faa748fd8c Update testflight build to (61) 2024-11-28 16:16:25 +01:00
Benoit Martins
7ea925e233 Update testflight build to (60) 2024-11-20 12:06:57 +01:00
QuentinArguillere
fb47e4b577 Update testflight build to (59) 2024-11-19 17:54:03 +01:00
QuentinArguillere
17e7c05576 Added Shortcuts feature to the side menu, read from the config 2024-11-19 17:37:13 +01:00
Benoit Martins
60d006248b Merge remote-tracking branch 'refs/remotes/origin/feature/conversations'
#Conflicts:
#	Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift
2024-11-19 17:22:50 +01:00
Benoit Martins
aad4b89e3f Fix nil access in background queue with temporary variables 2024-11-19 17:21:27 +01:00
Benoit Martins
a07f69e1df Update the ephemeralExpireTime only if the index is within bounds of the message rows 2024-11-19 15:32:18 +00:00
Benoit Martins
d47cd3b06c Fix content list in message bubble 2024-11-19 15:32:18 +00:00
Benoit Martins
4b17ecb173 Revert ShareSheetController deletion 2024-11-19 15:32:18 +00:00
Benoit Martins
1c9210ceb2 Fix QuickLookPreview 2024-11-19 15:32:18 +00:00
Benoit Martins
94e387dac2 Message can be deleted when selected 2024-11-19 15:32:18 +00:00
Benoit Martins
d1489d2287 Fix message bubble for text files 2024-11-19 15:32:18 +00:00
Benoit Martins
bde4d0622e Add file player 2024-11-19 15:32:18 +00:00
Benoit Martins
8491ce02ed Remove message refresh when conversation appears 2024-11-19 15:32:18 +00:00
Benoit Martins
ecea020da3 Enable meeting creation from a conversation with auto-filled details 2024-11-19 15:32:18 +00:00
Benoit Martins
d4b6fe6d8e Allow admins to update conversation participants list 2024-11-19 15:32:18 +00:00
Benoit Martins
bff25fc3f2 Allow admins to update conversation subject 2024-11-19 15:32:18 +00:00
Benoit Martins
a839c7d643 Add participant list in conversation info fragment 2024-11-19 15:32:18 +00:00
Benoit Martins
75588af0e2 Add nil check for self.displayedConversation in ComputeComposingLabel 2024-11-19 15:32:18 +00:00
Benoit Martins
70405b0f1b Fix updating of chat room list 2024-11-19 15:32:18 +00:00
Benoit Martins
26476c0606 Update the ephemeralExpireTime only if the index is within bounds of the message rows 2024-11-19 16:31:30 +01:00
Benoit Martins
c6c0793b59 Fix content list in message bubble 2024-11-19 15:59:49 +01:00
Benoit Martins
311e245861 Revert ShareSheetController deletion 2024-11-18 14:27:10 +01:00
Benoit Martins
50d8bfaf15 Fix QuickLookPreview 2024-11-18 14:17:16 +01:00
QuentinArguillere
03f1ca2a4a Make canceled meetings unclicable in meetings list 2024-11-15 09:51:20 +01:00
Benoit Martins
f3491bf9c5 Message can be deleted when selected 2024-11-15 09:51:00 +01:00
Benoit Martins
97bfdaab04 Fix message bubble for text files 2024-11-14 18:09:27 +01:00
Benoit Martins
9a78e75722 Add file player 2024-11-14 17:47:26 +01:00
Benoit Martins
f548037fa2 Remove message refresh when conversation appears 2024-11-14 17:44:24 +01:00
Benoit Martins
f6813f7d97 Enable meeting creation from a conversation with auto-filled details 2024-11-14 10:15:57 +01:00
Benoit Martins
de59f3e889 Allow admins to update conversation participants list 2024-11-13 16:42:07 +01:00
Benoit Martins
8e13089798 Allow admins to update conversation subject 2024-11-12 15:08:39 +01:00
Benoit Martins
00a8e964b1 Add participant list in conversation info fragment 2024-11-08 16:35:21 +01:00
QuentinArguillere
aa10440bc9 Make preview video draggable in simple calls 2024-11-08 11:38:03 +01:00
QuentinArguillere
34d125eff6 Fix videopreview image stretching in simple calls 2024-11-08 11:38:03 +01:00
Benoit Martins
a5e822c94d Add nil check for self.displayedConversation in ComputeComposingLabel 2024-11-06 15:57:44 +01:00
QuentinArguillere
ec3053a780 Update build to (58) 2024-11-06 15:19:12 +01:00
Benoit Martins
4b2f10280e Fix updating of chat room list 2024-11-06 13:34:47 +01:00
QuentinArguillere
d84f10de39 Update build to (58) 2024-11-05 18:11:04 +01:00
Benoit Martins
baf1fcc0b9 Add Conversation info fragment 2024-11-05 17:57:15 +01:00
Benoit Martins
0a162390a3 Add ephemeral message selector view 2024-11-05 17:57:10 +01:00
Benoit Martins
bd8a89a9d3 Changes isMuted value in ConversationFragment 2024-11-05 17:57:05 +01:00
QuentinArguillere
4a369dbb23 Mute notifications from muted chatrooms (bg and fg) 2024-11-05 17:56:58 +01:00
Benoit Martins
3000304543 Update build version to (57) 2024-11-05 17:29:44 +01:00
QuentinArguillere
51ac365db7 disable CI 2024-11-04 18:00:59 +01:00
QuentinArguillere
4201395b4a Update CI job-ios tag to macos-xcode15 2024-11-04 17:50:43 +01:00
QuentinArguillere
1f46fa240a rename "linphone" to "Linphone" in gitlab-ci file 2024-11-04 11:51:28 +01:00
QuentinArguillere
01e14dd06b Merge remote-tracking branch 'linphone-6-0/master' into feature/transition_to_version_6_0 2024-11-04 11:46:57 +01:00
QuentinArguillere
dfdaf9cfac Cleanup whole repository for 6.0 upgrade 2024-10-31 17:17:35 +01:00
Benoit Martins
6d3577379f Simplify optional check for chatRooms 2024-10-25 16:28:34 +02:00
Benoit Martins
d27ff560e9 Fix displayed chat room mute menu 2024-10-25 16:25:11 +02:00
Benoit Martins
6336d4fae9 Remove all objectWillChange 2024-10-25 14:45:21 +02:00
Benoit Martins
ac8253e47e Fix refresh conversation item in list 2024-10-25 14:44:56 +02:00
Benoit Martins
73ea3362b0 Add Menu in chatroom 2024-10-24 17:55:11 +02:00
Benoit Martins
ed619e58e1 Fix group call creation 2024-10-24 15:09:11 +02:00
Benoit Martins
15b511a388 Merge branch 'testflight/56' 2024-10-22 15:07:26 +02:00
Benoit Martins
1b02fafc43 Update build version to (56) 2024-10-22 14:37:51 +02:00
Benoit Martins
349a290ec5 Merge branch 'master' 2024-10-22 14:24:26 +02:00
Benoit Martins
1bce467959 Add DynamicLinkText component for clickable URLs in chat bubbles 2024-10-22 12:04:59 +02:00
Benoit Martins
d7d1b195c6 Fix fullscreen video mode in oneone call 2024-10-21 13:47:48 +00:00
Benoit Martins
37b70f4f32 Fix meeting waiting room when headphone is connected 2024-10-21 13:47:48 +00:00
Benoit Martins
1615f5caa9 Fix view layout when app returns to foreground 2024-10-21 13:47:48 +00:00
Benoit Martins
6b2a6573be Hide keyboard when displaying calls 2024-10-21 13:47:48 +00:00
Benoit Martins
3fb50958b3 Add local network authorization 2024-10-21 13:47:48 +00:00
Benoit Martins
26e2defbe3 Add call button to the chatroom view 2024-10-21 13:47:48 +00:00
Benoit Martins
532332ad94 Fix insertion of multiple messages 2024-10-21 13:47:48 +00:00
Benoit Martins
c41d38679f Fix fullscreen video mode in oneone call 2024-10-21 15:43:48 +02:00
Benoit Martins
e4c64cc4af Fix meeting waiting room when headphone is connected 2024-10-21 14:43:34 +02:00
QuentinArguillere
efa34110c2 Display chat notification when app is on foreground if the message comes from elsewhere that the currently displayed chatroom 2024-10-21 14:08:05 +02:00
Benoit Martins
b523315e82 Fix view layout when app returns to foreground 2024-10-21 11:23:31 +02:00
Benoit Martins
79dc832684 Hide keyboard when displaying calls 2024-10-21 11:09:34 +02:00
Benoit Martins
4f3699e72b Add local network authorization 2024-10-21 10:59:02 +02:00
QuentinArguillere
cc1bcd1666 Update build version to (55) 2024-10-21 10:08:12 +02:00
Benoit Martins
0933b71618 Add call button to the chatroom view 2024-10-18 17:32:36 +02:00
QuentinArguillere
67b5f7f563 Remove publisher from corecontext 2024-10-17 16:44:17 +02:00
QuentinArguillere
8f66998a03 Update build to (54) 2024-10-17 16:44:08 +02:00
Benoit Martins
42821c983a Fix insertion of multiple messages 2024-10-17 16:29:00 +02:00
QuentinArguillere
fa6034a426 Add LossRate and JitterBufferSize to call stats 2024-10-16 18:34:33 +02:00
Benoit Martins
3203cb3ccc Add Meeting invite 2024-10-16 15:13:29 +00:00
Benoit Martins
27e0757c5f Change params.videoDirection to SendRecv when video is started 2024-10-16 15:13:29 +00:00
Benoit Martins
d3ca95b46f Use eventLogId instead of eventLog to prevent crashes on background/foreground transitions 2024-10-16 15:13:29 +00:00
Benoit Martins
54f1c2a27d Move enteredForeground variable to CoreContext and add a check before using prepareBottomSheetForDeliveryStatus 2024-10-16 15:13:29 +00:00
QuentinArguillere
eaefc50626 Update build version to (53) 2024-10-11 18:19:08 +02:00
Benoit Martins
51ca670369 Fixed resetDisplayedChatRoom, added event callbacks and increased minimum bubble size 2024-10-11 16:03:50 +02:00
Benoit Martins
1957fa7b15 Made "enteredForeground" variable accessible to all conversation views and added a check for its value before performing chatroom.compose 2024-10-11 16:03:50 +02:00
Benoit Martins
764b8f860c Conference message bubble 2024-10-11 16:03:50 +02:00
Benoit Martins
a8f7756241 Add conference message bubble 2024-10-11 16:03:50 +02:00
Benoit Martins
a13f44e189 Fix ImdnOrReactionsSheet for iOS 15 2024-10-11 16:03:50 +02:00
Benoit Martins
33fae2447b Minor redesign of messages 2024-10-11 16:03:50 +02:00
Benoit Martins
2b80c5b78b Ephemeral message 2024-10-11 16:03:50 +02:00
Benoit Martins
2eee40a7ae Check index validity before accessing conversation list 2024-10-11 16:03:50 +02:00
QuentinArguillere
137abcfe74 When deleting all meetings from the list, also remove the "No meeting today" line 2024-10-11 15:12:08 +02:00
QuentinArguillere
00187e97a2 Fix "No meeting today" line not appearing if all meetings in the list are in the past 2024-10-11 15:01:01 +02:00
QuentinArguillere
0b28aa5179 Fix condition typo that prevented meeting creation 2024-10-10 15:50:43 +02:00
QuentinArguillere
4666678f37 Update build to (52) 2024-10-10 12:03:09 +02:00
QuentinArguillere
f41a236d1b Remove debug traces, fixe indent 2024-10-10 11:51:32 +02:00
QuentinArguillere
f3271778cc Comment self.objectWillChange.send() in ConversationViewModel 2024-10-08 17:33:38 +02:00
QuentinArguillere
33c67e78b9 Add debugtraces to investigate crash in resetDisplayedChatroom 2024-10-08 17:30:10 +02:00
QuentinArguillere
d2afeb483a Update build version to (51) 2024-10-08 17:29:25 +02:00
QuentinArguillere
5d330ce7dc Set message to error state if statusTmp is nil 2024-10-08 13:57:08 +02:00
Benoit Martins
9bbd554547 Check if chatRoom.peerAddress is not nil in didReceive NotificationService 2024-10-04 11:28:02 +02:00
Benoit Martins
c58610d6f8 Prevents asStringUriOnly on a nullable address 2024-10-04 11:26:22 +02:00
Benoit Martins
423fb56401 Check whether the new message received is different from the first message in the list 2024-10-04 09:09:31 +02:00
QuentinArguillere
d1148cca1c Update build version to (50) 2024-10-03 14:43:41 +02:00
Benoit Martins
b79541295f Change of message id used for condition in resetDisplayedChatRoom 2024-10-03 14:30:15 +02:00
QuentinArguillere
be09800b5a Move (almost) all chatroom delegate management into changeDisplayedChatRoom 2024-10-03 12:19:16 +02:00
QuentinArguillere
bbce741911 Update version to (49) 2024-10-03 10:40:16 +02:00
QuentinArguillere
423d9a7ac5 Include Localizable in msgNotificationService target (conflict error removed it earlier) 2024-10-03 10:34:03 +02:00
Benoit Martins
86cd7f452e Add click notification listener to open app in the chat room 2024-10-02 14:48:40 +02:00
QuentinArguillere
dc4c3833f7 Remove delegate being added twice 2024-10-01 10:56:20 +02:00
QuentinArguillere
062aea1df3 Fix build 2024-10-01 10:56:11 +02:00
Benoit Martins
5ea8c2917f Add new messages received when app moves to the foreground 2024-09-30 18:05:39 +02:00
Benoit Martins
aa5b0abd67 Add banner when users are writing (composing) 2024-09-30 18:03:12 +02:00
Benoit Martins
233ff399ff Add event message 2024-09-30 18:01:32 +02:00
Benoit Martins
b715cf1cfd Add function to format bytes as readable string in KB, MB or GB 2024-09-30 17:56:45 +02:00
QuentinArguillere
e0e0970481 Update version to (45) 2024-09-30 17:46:59 +02:00
QuentinArguillere
ce9021df3b Add Localizable file to sources for msgNotificationService 2024-09-30 17:44:21 +02:00
QuentinArguillere
a1b580b78a Fix reaction in app extension for 1-1 chatrooms 2024-09-30 16:26:25 +02:00
QuentinArguillere
9308c4d104 Add usernotifications filtering entitlement to app extension 2024-09-30 16:23:58 +02:00
QuentinArguillere
e380431767 Replace chatMessageSuscriptions with delegates in ConversationViewModel 2024-09-27 10:42:46 +02:00
QuentinArguillere
6034d41a10 Replace chatRoomSuscriptions with delegates in ConversationViewModel 2024-09-27 10:37:45 +02:00
QuentinArguillere
035f74f59e Replace publisher with delegate in ConversationForwardMessageViewModel 2024-09-26 16:27:36 +02:00
QuentinArguillere
cb58b50e84 Replace publisher with delegate in StartConversationViewModel 2024-09-26 16:20:16 +02:00
QuentinArguillere
62ab791cd0 Replace publisher with delegate in ContactsManager 2024-09-26 15:44:23 +02:00
QuentinArguillere
9f7c4e7304 Fix various warnings 2024-09-26 14:45:31 +02:00
QuentinArguillere
62aaf57b3f Replace publisher with delegate in StartCallViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
57d4e3cc1f Replace publisher with delegate in CallViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
72e8ecfd7e Replace publisher with delegate in MeetingsListViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
8bfcb185d7 Replace publisher with delegate in HistoryListViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
502747d72e Replace publisher with delegate in MeetingViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
bcd5792c86 Replace publisher with delegate in MagicSearchSingleton 2024-09-26 14:45:31 +02:00
QuentinArguillere
3261cebd5f Replace publisher with delegate in AccountModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
70267b6d3b Replace publisher with delegate in ContactViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
8d8966407a Replace publisher with delegate in ContactAvatarModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
a25441a467 Replace publisher with delegate in ConversationListViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
17e3633cb6 Replace publisher with delegate in RegisterViewModel 2024-09-26 14:45:31 +02:00
QuentinArguillere
8af6977085 Display toast when network change state. Also, remove "hasDefaultAccount" key from coreContext, instead check if accounts is empty. 2024-09-26 12:01:55 +02:00
QuentinArguillere
4fa2d92382 Remove "all day meeting" option in meeting scheduling 2024-09-26 11:55:59 +02:00
Benoit Martins
1693c21e2e Add voice recording feature 2024-09-24 10:59:54 +02:00
Benoit Martins
68f740658b Added back round corners to main lists in portrait mode
(keep round top bar in landscape)
2024-09-24 10:59:54 +02:00
Benoit Martins
d6293be80f Message bubbles for different file types 2024-09-24 10:59:52 +02:00
QuentinArguillere
29d3770280 Fix build 2024-09-10 15:12:03 +02:00
Benoit Martins
b56912b729 Fix addChatMessageDelegate crash
Check if  index is smaller than the size of the list
2024-09-10 14:25:26 +02:00
QuentinArguillere
69242599f8 In corecontext, replace postOnCoreQueue by CoreDelegate. This allows us to have callbacks triggered immediately and not at at later time asynchronously 2024-09-10 14:20:29 +02:00
QuentinArguillere
473c486ccf Remove debugtraces. Update version to (41) 2024-09-09 17:21:22 +02:00
QuentinArguillere
ae4dcda49b Remove international prexif updates when registering 2024-09-09 17:19:49 +02:00
QuentinArguillere
6478fbf03e Avoid using sync when dispatching to main queue (risk deadlock when entering foreground) 2024-09-09 17:18:05 +02:00
QuentinArguillere
b2a7a11dba Remove comments and light refactor. Update version from 38 to 40 2024-09-09 10:57:33 +02:00
QuentinArguillere
64763565da When remote video is enabled, switch to fullscreen 2024-09-09 10:57:33 +02:00
QuentinArguillere
66500e42b5 Error management for meeting scheduling: unreachable network, missing subject/participant, fail to send some or all ICS invitations 2024-09-09 10:53:18 +02:00
QuentinArguillere
df8f515601 Display error toast instead of spinning forever when trying to login for the first time with no network connected 2024-09-09 10:53:18 +02:00
QuentinArguillere
321e1065ac Network management: add variable networkStatusIsConnected in CoreContext.
Use this new variable to proceed to account removal when failed to register while network is
2024-09-09 10:53:18 +02:00
QuentinArguillere
26cbad1e46 Rework logout : do not delete authinfo before the registration is in Cleared state 2024-09-09 10:53:18 +02:00
Benoit Martins
cec5d99915 Changed asyncAfter delays from 0.2 to 0.3 2024-09-09 10:28:05 +02:00
Benoit Martins
1674a4127b Fix getAvatarModelFromAddress crash 2024-09-09 10:12:56 +02:00
Benoit Martins
fa44e97232 Fix unread message counter 2024-09-09 09:42:18 +02:00
Benoit Martins
89eb159a50 Add a bottom sheet to display reactions 2024-09-06 14:29:16 +02:00
Benoit Martins
5ed0fc1f76 Add a bottom sheet to display delivery status 2024-09-04 17:26:29 +02:00
Benoit Martins
c2f9f34ba8 Add forwarded message 2024-09-03 16:14:55 +02:00
QuentinArguillere
8261e8d5c1 If a meeting has been cancelled, then mark it as such in the meetings list 2024-09-01 12:22:29 +02:00
QuentinArguillere
22d37cfce9 Update and cancel meeting : now properly send ICS through chat 2024-09-01 12:16:14 +02:00
QuentinArguillere
8059dd4470 Add NSCalendarsUsageDescription and NSCalendarsWriteOnlyAccessUsageDescriptions to info.plist 2024-09-01 12:08:18 +02:00
QuentinArguillere
96d8a879b8 Fix build 2024-08-31 09:05:05 +02:00
QuentinArguillere
356803051f WIP - add meeting to calendar 2024-08-31 09:05:05 +02:00
QuentinArguillere
2b371db0fe Remove unused function loadExistingConferenceInfoFromUri 2024-08-31 09:05:01 +02:00
QuentinArguillere
b75c756991 Add NSCalendarsUsageDescription and NSCalendarsWriteOnlyAccessUsageDescriptions to info.plist 2024-08-31 09:03:31 +02:00
QuentinArguillere
e95045dab4 Fix most warnings (remaining: @sendables and deprecated calls) 2024-08-31 09:01:39 +02:00
Benoit Martins
923c290fa0 Added the floating button to the UIList (UIKit list) 2024-08-30 15:49:00 +02:00
Benoit Martins
be414f3c14 Change of UIList coordinator to a singleton 2024-08-29 11:42:18 +02:00
Benoit Martins
24435dcb92 Add participant name to reply message bubble 2024-08-28 10:37:10 +02:00
Benoit Martins
ace392528b Add eventLog to ui message object for message list 2024-08-27 16:55:04 +02:00
Benoit Martins
e792810c3c Change imdn icon 2024-08-22 16:11:40 +02:00
Benoit Martins
e01a27f538 Fix chat room switching in landscape mode 2024-08-22 15:53:19 +02:00
Benoit Martins
c821b960ed Set deliver_imdn to false 2024-08-22 12:12:58 +02:00
QuentinArguillere
4eaee9d36d Add Crashlytics script build phase to msgNotificationService target in pbxproj 2024-08-22 10:16:28 +02:00
Benoit Martins
179fbaff14 GlobalState.Off check removed from core initialization 2024-08-21 17:25:59 +02:00
QuentinArguillere
1abc35de0c Remove all access to core.Accounts from main thread. Directly store [AccountModel] in coreContext published variable 2024-08-21 17:25:59 +02:00
Benoit Martins
885c14ef9c Fix crash when sending a message and crash in conversation list 2024-08-21 16:10:28 +02:00
Benoit Martins
e870b74758 Click on the reply message to scroll to it 2024-08-21 15:47:51 +02:00
Benoit Martins
846a938498 Add reply bubble message 2024-08-20 10:07:19 +02:00
Benoit Martins
3ba5fd5f38 Add swipe action in message list 2024-08-20 10:07:19 +02:00
Benoit Martins
8045c4af2d Fix crash when scrolling in chat room 2024-08-20 10:07:19 +02:00
Benoit Martins
5d27d11c06 Change name of activateAudioSession parameter 2024-08-20 10:07:17 +02:00
Benoit Martins
f5c074e0bc Fix updateUIView crash when get old messages in ConversationViewModel 2024-08-20 10:05:59 +02:00
Benoit Martins
5c82815644 Add reaction feature 2024-08-20 10:05:59 +02:00
Benoit Martins
6742904342 Fix UI change from history view to message 2024-08-20 10:05:59 +02:00
Benoit Martins
4667301464 Add a click listener to the message to display the emoji selector and message functions 2024-08-20 10:05:59 +02:00
Benoit Martins
39363f1096 Fix downloaded image crash and display error image instead 2024-08-20 10:05:59 +02:00
Benoit Martins
00eb9c4f7c Fix start conversation view in landscape 2024-08-20 10:05:59 +02:00
Benoit Martins
69c3648c15 Fix first message sent in chatroom 2024-08-20 10:05:59 +02:00
Benoit Martins
76d4a8cdb3 Access to conversation from a call 2024-08-20 10:05:59 +02:00
Benoit Martins
2e2dac6807 Access to conversation from the history detail 2024-08-20 10:05:59 +02:00
Benoit Martins
c78a77268e Access to conversation from the contact 2024-08-20 10:05:59 +02:00
Benoit Martins
e0d5254648 Create group conversation 2024-08-20 10:05:59 +02:00
benoit.martins
da68a15694 Create conversation 2024-08-20 10:05:59 +02:00
Benoit Martins
4ec30c477d Add a search filter for the conversation list 2024-08-20 10:05:59 +02:00
QuentinArguillere
8f8877b759 Reset core scheduler before cancelling meetings 2024-08-19 17:53:48 +02:00
QuentinArguillere
aee88f8c87 Localizable strings 2024-08-19 17:53:48 +02:00
QuentinArguillere
153c2ae238 Fix license 2024-08-19 17:53:48 +02:00
QuentinArguillere
6143724f0c Add "meeting_plus" icon 2024-08-19 17:53:48 +02:00
QuentinArguillere
62db361b13 Remove Subject and Description text focus when tapping elsewhere on the screen in meeting creation / edition 2024-08-19 17:53:48 +02:00
QuentinArguillere
3ef0db8645 Cancel without popup when deleting a meeting where we are not the organizer 2024-08-19 17:53:48 +02:00
QuentinArguillere
fcce09843e Meeting cancellation: only delete meeting when pressing one of the confirmation popup buttons. 2024-08-19 17:53:48 +02:00
QuentinArguillere
d729f7570a Fix top button alignment in meetings view 2024-08-19 17:53:48 +02:00
QuentinArguillere
e94611273a Fix typo that deleted the end date string of a meeting 2024-08-19 17:53:48 +02:00
QuentinArguillere
4e2a7d4158 Rework timezone picker to avoid animation lag when displaying schedule meeting view 2024-08-19 17:53:48 +02:00
Benoit Martins
30d9baf766 Remove AVAudioSession start and stop in call view 2024-08-19 15:32:21 +02:00
QuentinArguillere
ca7bedfd14 Fix animation when displaying meeting details 2024-08-13 11:27:07 +02:00
QuentinArguillere
a851537428 Light rework of timezone management: we only use it and store it during Meeting creation/edition. After, we reset and display everything based on current device timezone 2024-08-13 11:26:51 +02:00
QuentinArguillere
bd3b8d8731 Fix flexiApi push parameter for push token reception : need to adapt the pn-provider to the build (DEBUG or not) 2024-08-13 11:24:35 +02:00
QuentinArguillere
69a878d245 Add forgoten localizable file update for timezones 2024-08-13 09:53:44 +02:00
QuentinArguillere
c5f780eead Upgrade meeting description UI (better text field for longer text, added maximum size) 2024-08-13 09:53:29 +02:00
QuentinArguillere
3588d97116 Add TimeZone management in meeting scheduling/editing 2024-08-13 09:52:19 +02:00
QuentinArguillere
6c072aafa0 Fix build (activatedAudioSession parameter name changed) 2024-08-13 09:51:24 +02:00
QuentinArguillere
8692d628f5 Add TimeZone extension to produce a formated string of the form "GMT+x:00 - Timezone Identifier" 2024-08-13 09:51:05 +02:00
QuentinArguillere
f21831ab2c Fix margin and unused fields 2024-08-02 09:40:26 +02:00
Benoit Martins
65a98c6030 Set default Bluetooth device when available in MeetingWaitingRoom 2024-07-10 14:12:59 +02:00
Benoit Martins
8d425c40e6 Fix fullcreen mode in one to one calls 2024-07-10 13:51:51 +02:00
Benoit Martins
06557fa3a3 Fix display of incoming call type (Audio or Video) 2024-07-10 12:25:58 +02:00
Benoit Martins
340db54af1 Set value when initializing AudioRouteBottomSheet 2024-07-10 12:12:22 +02:00
Benoit Martins
1ee6ef3150 Disable auto answer replacing calls 2024-07-10 11:41:02 +02:00
Benoit Martins
afa7496e82 Change text in views when lists are empty 2024-07-09 17:38:26 +02:00
Benoit Martins
a96ae05dd6 Fix conference pause and resuming 2024-07-09 16:51:35 +02:00
Benoit Martins
7bae9fd342 Add participants during a conference call 2024-07-09 14:05:40 +02:00
Benoit Martins
39c7c6a4b1 Change values of EditContactViewModel.resetValues in main thread 2024-07-08 11:22:07 +02:00
Benoit Martins
b84e116336 Change texts in call view when history list is empty 2024-07-08 10:43:27 +02:00
Benoit Martins
c750a8cfb2 Display all calls when call history filter is empty 2024-07-08 09:50:08 +02:00
Benoit Martins
ea921badfb Replace DispatchQueue.global() instead DispatchQueue.main 2024-07-05 15:21:10 +02:00
Benoit Martins
21ab16271c Reduce size of bottom sheet when a button is clicked in callview 2024-07-04 12:01:18 +02:00
Benoit Martins
f2312a2e36 Add call merge feature 2024-07-04 10:46:49 +02:00
Benoit Martins
befad07719 Add sip address selector for contact view 2024-07-03 17:22:01 +02:00
Benoit Martins
09ea819b55 Add error message below text fields in Register view 2024-07-03 14:16:33 +02:00
Benoit Martins
b92690865f Change recording toast icon 2024-07-03 10:52:30 +02:00
Benoit Martins
8afe787d2a Remove disable_chat_feature check in Notification service 2024-07-03 10:16:47 +02:00
Benoit Martins
4884997db6 Fix dialer in startcallview 2024-07-03 09:38:17 +02:00
Benoit Martins
b5e3f72cf6 Fix display of multiple calls 2024-07-02 16:11:59 +02:00
Benoit Martins
bdd38a80b6 Disable auto capitalization and auto correction in the global search bar 2024-07-01 16:47:44 +02:00
Benoit Martins
3994129177 Use num keypad in the contact edit view 2024-07-01 16:30:13 +02:00
Benoit Martins
cef2e693ea Linphone Video displayed in Callkit notification when a video call is received 2024-07-01 16:19:00 +02:00
Benoit Martins
858094ecc5 Use the Linphone logo in the callkit view 2024-07-01 14:51:59 +02:00
Benoit Martins
6bb74b028d Can use username with domain in login view 2024-07-01 14:29:26 +02:00
Christophe Deschamps
ef56935228 Collect side menu account info on core thread 2024-07-01 11:19:36 +02:00
QuentinArguillere
e3a04b9b2f Adjust paddings in meetings list view 2024-06-28 15:48:06 +02:00
QuentinArguillere
bb3cf12498 Fix meeting cell corner radius 2024-06-28 15:48:06 +02:00
QuentinArguillere
5b3f412bb7 Implement meetings bottom sheet and meeting details delete action 2024-06-28 15:48:06 +02:00
Benoit Martins
5b5a5d88fa Fix contact views 2024-06-28 15:35:32 +02:00
Benoit Martins
268bff0ca3 Display toast of authenticated device when ZRTP SAS is validated 2024-06-28 11:33:45 +02:00
Benoit Martins
4b46322264 Change ZRTP SAS UI 2024-06-28 11:13:26 +02:00
QuentinArguillere
8875e2ba54 Reset conference scheduler before scheduling a new one, or it will only edit the previous one 2024-06-25 18:18:55 +02:00
QuentinArguillere
2221d14ffc Fix build 2024-06-25 17:42:22 +02:00
QuentinArguillere
85be73b84f meetings list - scroll to "Today" on appear and when pressing the top right calendar button 2024-06-25 17:22:19 +02:00
QuentinArguillere
9c949e632d Remove the delayed color for add aprticipants view 2024-06-25 17:22:19 +02:00
QuentinArguillere
ffe8c0fd45 Add filtering for conferences 2024-06-25 17:22:19 +02:00
QuentinArguillere
89367bb7cd Various padding and display update, and hold ScheduleMeetingFragment in a scrollview to make it scrollable in landscape view 2024-06-25 17:22:19 +02:00
QuentinArguillere
82d1d15779 Enable "share" button for conference URI in meeting details view 2024-06-25 17:22:19 +02:00
QuentinArguillere
282310f6c2 Fix participant list in meeting details view : if myself isn't the organizer, then I was displayed twice and the actual organizer was missing 2024-06-25 17:22:19 +02:00
QuentinArguillere
e74b2dd4f3 Rename "ScheduleMeetingViewModel" to "MeetingViewModel" 2024-06-25 17:22:19 +02:00
QuentinArguillere
570007c2c6 Implement conference details view with edit option. 2024-06-25 17:22:19 +02:00
QuentinArguillere
0aeef2f022 Placeholder : join the meeting waiting room when taping a meeting from the least 2024-06-25 17:22:19 +02:00
QuentinArguillere
16a034e50d Remove debug traces 2024-06-25 17:22:19 +02:00
QuentinArguillere
ae57bcc60c Add shadowed rounded rectangle boxes, ajust alignments 2024-06-25 17:22:18 +02:00
QuentinArguillere
c19f2283c7 Start of the new meetings view 2024-06-25 17:22:18 +02:00
QuentinArguillere
dbba065933 Add more formated date info in MeetingsListItemModel, and switch back to regular sorted array for conference data mangemenet 2024-06-25 17:22:18 +02:00
QuentinArguillere
2b441f3557 Upgrade MeetingListsItemModel to have a preformatted month and week string to be displayed in the meetings list view 2024-06-25 17:22:18 +02:00
Benoit Martins
b5d98cc45a Start group call 2024-06-25 15:20:53 +02:00
Benoit Martins
9befe0695a Add callbacks to each request for AccountManagerServices 2024-06-25 15:03:39 +02:00
Benoit Martins
02a89a08c3 Add Account creation feature (Register)
Fix unreadMessagesCount when displayedConversation is null
Change user agent
2024-06-20 16:46:58 +02:00
Benoit Martins
2c28474ca5 Add register view 2024-06-20 16:46:54 +02:00
Christophe Deschamps
02e6baf9ba Highlihght side menu default account 2024-06-17 13:14:47 +02:00
Christophe Deschamps
dfcd501dc3 Side menu 2024-06-17 10:28:39 +00:00
Benoit Martins
9e314aa205 Fix friends presence 2024-06-13 14:31:48 +02:00
Benoit Martins
c441e2cb43 Fix chatRoom refresh in background 2024-06-13 14:31:48 +02:00
Benoit Martins
a9eb5caad4 Fix onChatRoomStateChanged callback when app moves in background 2024-06-13 12:28:52 +00:00
Benoit Martins
7fb63c19dd ZRTP Changes 2024-06-11 16:52:07 +02:00
QuentinArguillere
eca85b80ad Need to start core in the core initialization in order to instanciate the PushRegistry and be able to process the voip push 2024-06-11 16:50:44 +02:00
Christophe Deschamps
e0374d458d Fix callto uri handler 2024-06-11 11:49:28 +02:00
Christophe Deschamps
ef471b2e1d Added callto scheme URI handler 2024-06-11 11:40:56 +02:00
Benoit Martins
0fff983b0a Change download directory 2024-06-10 14:51:22 +02:00
Benoit Martins
e91e722587 Revert "Fix image in chat"
This reverts commit 0e00819a67.
2024-06-07 09:44:31 +02:00
Benoit Martins
fafedeef42 Fix display name for incoming calls 2024-06-06 16:03:16 +02:00
Benoit Martins
8e3bd3b5ab Merge branch 'master' 2024-06-06 15:45:39 +02:00
QuentinArguillere
dbb667fd9e Extract forgotten Linphone objects that were being used in the main queue 2024-06-06 15:36:41 +02:00
QuentinArguillere
290d842843 Replace all postOnMainQueue by postOnCoreQueue 2024-06-06 15:11:49 +02:00
Benoit Martins
0e00819a67 Fix image in chat 2024-06-06 14:31:36 +02:00
Christophe Deschamps
2d0f50d11a Single Sign On 2024-06-05 17:48:13 +02:00
Benoit Martins
0cf8346c89 Fix phone numbers 2024-06-05 15:03:02 +02:00
Benoit Martins
2ef76ae47b Merge branch 'master' 2024-06-04 15:54:20 +02:00
Benoit Martins
b885963d7a Fix media download in ConversationViewModel 2024-06-04 15:42:19 +02:00
Benoit Martins
5215256f72 Fix getFriendWithAddress crash (check if friend lists are empty) 2024-06-04 15:05:25 +02:00
Benoit Martins
bd9e4a000f Fix remote Conf Video crash 2024-06-04 14:25:30 +02:00
Benoit Martins
b3fa81b537 Fix bubble display in iOS 15 2024-06-04 14:23:45 +02:00
Benoit Martins
1b879a5c61 Fix avatar refresh after image download 2024-06-04 14:03:53 +02:00
Benoit Martins
088f3a7506 Fix conversation unread counters 2024-05-31 17:21:23 +02:00
Christophe Deschamps
bd29389a40 URI Handlers 2024-05-31 12:38:58 +00:00
Benoit Martins
1e16dbaa61 Run getFriendWithAddress in the core queue if necessary 2024-05-30 16:45:55 +02:00
Benoit Martins
c69ca4c971 Enable FEC 2024-05-30 14:33:03 +02:00
Benoit Martins
45714fa633 Fix image resizing when keyboard is open 2024-05-30 14:21:23 +02:00
Benoit Martins
00a7f305a5 Check core state before using an asynchronous function
Fix markAsRead crash
2024-05-30 11:50:59 +02:00
Benoit Martins
7dca3300e1 Fix avatar crash 2024-05-29 16:58:01 +02:00
Benoit Martins
fad30689b4 Fix outgoing video call 2024-05-28 16:57:40 +02:00
Benoit Martins
ad701fb952 Refactor history views 2024-05-28 15:58:18 +02:00
Benoit Martins
9f3aeb63ac Fix orientation image 2024-05-24 14:37:08 +02:00
Benoit Martins
57c8efe310 Disable FEC 2024-05-24 11:16:08 +02:00
Benoit Martins
476f1f22ef Fix sending multimedia messages 2024-05-23 17:23:10 +02:00
Benoit Martins
e94065ee2e Fix onCallStateChanged crash 2024-05-23 11:37:10 +02:00
Benoit Martins
e7707c0b2b Send media 2024-05-22 17:25:17 +02:00
Benoit Martins
d0feb5b047 Taking photos with camera in conversation view 2024-05-22 14:43:40 +02:00
Benoit Martins
472bf46938 Add photo picker to conversation view 2024-05-22 12:21:58 +02:00
Benoit Martins
0682489645 Add video preview in message bubble 2024-05-21 10:29:22 +02:00
Benoit Martins
84ad957568 Add multi image message 2024-05-20 15:21:05 +02:00
Benoit Martins
ae19bad388 Add IMDN and Date in ChatBubbleView 2024-05-17 15:06:20 +02:00
Benoit Martins
415cf274b1 Fix conversation for iOS 15 2024-05-17 11:17:00 +02:00
Benoit Martins
a011e7643b Add avatar to group chat
Check first message received per participant
2024-05-16 15:03:25 +02:00
Benoit Martins
d7a7615616 FIx avatar in conversation list 2024-05-15 10:07:19 +02:00
Benoit Martins
5beb5c088c Joining the waiting room when calling a conference 2024-05-14 10:32:24 +02:00
Benoit Martins
14daf5bd40 Fix message list animation 2024-05-13 17:25:42 +02:00
Benoit Martins
b46c2ef778 Enable Remote Push 2024-05-13 11:40:15 +02:00
Benoit Martins
965ae0e35a Merge branch 'master' 2024-05-13 11:26:14 +02:00
Benoit Martins
cb8af8deea Fix image and gif size 2024-05-13 11:23:43 +02:00
Benoit Martins
eeb8c94c69 Start and stop core in sync queue 2024-05-10 10:25:34 +02:00
Benoit Martins
ad58d80939 Fix when conversationsListTmp.first is nil 2024-05-07 17:47:32 +02:00
Benoit Martins
d2d8c9cd8d Fix statistics 2024-05-07 16:30:48 +02:00
Benoit Martins
18c4b46d63 Dismiss bottom sheet in call view 2024-05-07 16:17:19 +02:00
Benoit Martins
2ba2e40958 Change call view in landscape mode 2024-05-07 14:32:59 +02:00
Benoit Martins
69165aa3ed Prevent screen lock during a call 2024-05-06 16:27:17 +02:00
Benoit Martins
6d8dfbf1a1 Fix fullscreen mode in call view 2024-05-06 15:33:29 +02:00
Benoit Martins
ec842f2830 Set default front camera 2024-05-06 10:38:49 +02:00
Benoit Martins
4eafaa1dc6 Check whether the default account is null when the core state is ON to set the hasDefaultAccount value 2024-05-06 10:15:36 +02:00
Benoit Martins
7da5b9567f Disable upper case for sip address and check if payloadType is null 2024-05-03 16:43:24 +02:00
Benoit Martins
45f2475634 Fix meeting button in navigation bottom bar 2024-05-03 15:35:23 +02:00
Benoit Martins
2306d338a8 Display conference date in meeting waiting room 2024-05-03 14:50:33 +02:00
Benoit Martins
517ff07904 Call view fixes 2024-05-03 10:43:51 +02:00
Benoit Martins
cfe3bef32d Add green call banner 2024-05-02 15:38:55 +02:00
Benoit Martins
32dc6ea345 Audio/video call statistics 2024-05-02 14:16:02 +02:00
Benoit Martins
4949ca329a Call encryption statistics 2024-05-02 09:46:23 +02:00
Benoit Martins
46c41c1218 Fix when participant device is nil 2024-04-30 11:48:16 +02:00
Benoit Martins
f6e935c65f Add audio only mode to conference call view
Enable FEC
Fix active speaker video
2024-04-30 11:35:10 +02:00
QuentinArguillere
5c5fd2ad8d Stop/start core on background/foreground 2024-04-30 10:42:11 +02:00
QuentinArguillere
19da4e0d64 Extract AddParticipantsViewModel from the ScheduleMeetingViewModel to be used for other future views 2024-04-30 10:27:52 +02:00
Benoit Martins
1f0c3fa5f7 Add mosaic mode to conference call view 2024-04-29 16:38:07 +02:00
QuentinArguillere
b16372c420 Replace defaultAccount by boolean hasDefaultAccount in CoreContext 2024-04-29 12:05:58 +02:00
QuentinArguillere
0e818ee772 Fix build with dispatch queue renaming 2024-04-29 12:05:08 +02:00
Benoit Martins
960d421ae7 Fix call view on iPhone SE 2024-04-24 17:03:52 +02:00
Benoit Martins
0a2d4a1682 Add participant list fragment to the call view 2024-04-24 12:33:25 +02:00
Benoit Martins
582c1b1d66 Remove core.removeAccount from the main queue 2024-04-23 16:07:05 +02:00
Benoit Martins
16c386dcc8 Check internet connection before deleting accounts 2024-04-23 11:49:31 +02:00
QuentinArguillere
f99f1c6d32 fix build 2024-04-22 17:05:09 +02:00
Benoit Martins
deeef8507c Merge remote-tracking branch 'refs/remotes/origin/master' 2024-04-22 17:02:37 +02:00
Benoit Martins
a34a426827 Fix presence of phone numbers and updated subscription once for friends lists 2024-04-22 17:01:56 +02:00
QuentinArguillere
e6e1087d85 Disable remote push 2024-04-22 16:53:45 +02:00
QuentinArguillere
6dfc870624 fix some padding, update meeting list to add the newly created conference when exiting scheduler menu 2024-04-22 15:58:17 +02:00
Benoit Martins
0ab7450b46 Fix native preview video in conf 2024-04-22 15:53:14 +02:00
Benoit Martins
6c10018788 Fix participant list in conf 2024-04-22 14:40:26 +02:00
Benoit Martins
f106f54021 Add a temporary meeting list 2024-04-22 13:50:14 +02:00
Benoit Martins
2b574cd896 Fix call view 2024-04-22 10:06:05 +00:00
QuentinArguillere
9bdd3c088e Reset scheduler data when opening a new conf scheduling view 2024-04-22 11:43:55 +02:00
QuentinArguillere
4647b00b9e Delete code that disabled conference features for previous versions 2024-04-22 11:43:55 +02:00
QuentinArguillere
0f57545a2a Update build version to 10 2024-04-22 11:43:55 +02:00
QuentinArguillere
352cfae6f5 Fix date adjustments when scheduling meeting 2024-04-19 17:43:34 +02:00
QuentinArguillere
269eeba480 Implement MeetingsFragment and MeetingsView 2024-04-19 16:49:03 +02:00
QuentinArguillere
08f164fc88 Remove temporary participantmodel from meetingviewmodel 2024-04-19 16:42:45 +02:00
QuentinArguillere
924a7413fa Integrate meetingsview in the main view, and implement date and participant selection in meeting scheduling 2024-04-19 15:54:00 +02:00
QuentinArguillere
36bfadcfde Update pbxproj with new files 2024-04-19 15:47:25 +02:00
QuentinArguillere
0730e9b738 Restore groupchat and lime specs 2024-04-19 15:47:25 +02:00
QuentinArguillere
20f7d54c01 Add skeleton for MeetingsView MeetingsFragment 2024-04-19 15:47:25 +02:00
QuentinArguillere
d21c026bc9 Implement AddParticipantsFragment 2024-04-19 15:47:25 +02:00
QuentinArguillere
da75af008e Fix build : did not initalize ParticipantModel name 2024-04-19 15:47:25 +02:00
QuentinArguillere
62a027b397 Continue ScheduleMeetingViewModel impelmentation: ConferenceScheduler listeners, schedule(), update(), addparticipants(), and fillConferenceInfo() 2024-04-19 15:47:25 +02:00
QuentinArguillere
728678a02c update getAvatarModelFromAddress function to handle case where the address does not match any friend 2024-04-19 15:47:25 +02:00
QuentinArguillere
f320769b12 Add static func getAvatarModelFromAddress to ContactAvatarModel 2024-04-19 15:47:25 +02:00
QuentinArguillere
b3a602c330 Fix indentation in ContactAvtarModel 2024-04-19 15:47:25 +02:00
QuentinArguillere
866bc9dd81 Add onConferenceInfoReceived subscription 2024-04-19 15:47:25 +02:00
QuentinArguillere
1e4d8f55a7 Implement MeetingViewModel 2024-04-19 15:47:25 +02:00
QuentinArguillere
0432c9799d Start schedule meeting fragment and model 2024-04-19 15:47:25 +02:00
QuentinArguillere
550859d51d Start implementing ScheduleMeetingViewModel and fragments, update pbxproj 2024-04-19 15:47:25 +02:00
QuentinArguillere
5f22d7e473 Implementing MeetingsListItemModel and MeetingsListViewModel 2024-04-19 15:47:25 +02:00
QuentinArguillere
ee735ceace Implement meetingmodel 2024-04-19 15:47:25 +02:00
QuentinArguillere
dd7661e851 Add Meetings related files for (models, viewmodels, assets...) 2024-04-19 15:47:25 +02:00
Benoit Martins
0d210dea6d Fix display of confs in story fragments 2024-04-19 15:36:12 +02:00
Benoit Martins
ea18eaa3d6 Fix meeting address joined 2024-04-19 13:55:26 +02:00
Benoit Martins
d96abf1514 Add pause status to conf view 2024-04-19 13:49:21 +02:00
Benoit Martins
b62a806359 Add conf view when the user is alone 2024-04-19 11:46:43 +02:00
Benoit Martins
a37972abaf Disable core restart when switching from foreground to background mode 2024-04-19 10:03:13 +02:00
Benoit Martins
cd1ae4c19d Fix Active speaker view 2024-04-19 09:58:10 +02:00
Benoit Martins
c350def616 Add muted and joining icons in conf call 2024-04-17 15:48:23 +02:00
Benoit Martins
2133934e28 Fix participant devices in meeting call view 2024-04-16 17:11:32 +02:00
Benoit Martins
601be3ebed Add Meeting Waiting Room 2024-04-16 10:43:38 +02:00
Benoit Martins
0299640c2c Use participant device in conf call view 2024-04-09 17:52:42 +02:00
Benoit Martins
6c59bd6581 Asymmetrical video call 2024-04-09 14:00:41 +02:00
Benoit Martins
f771bdc790 FIx active speaker mode 2024-04-08 15:22:59 +02:00
Benoit Martins
027cb1ec2d Add participants list and active speaker to the conference call view 2024-04-02 17:07:54 +02:00
Benoit Martins
ab3b883442 Init conference call view 2024-03-22 16:45:29 +01:00
Benoit Martins
bf4e4042d3 Merge remote-tracking branch 'refs/remotes/origin/master'
Conflicts:
	Linphone/Core/CoreContext.swift
	Linphone/Localizable.xcstrings
	Linphone/UI/Assistant/Viewmodel/AccountLoginViewModel.swift
2024-03-14 15:29:31 +01:00
Benoit Martins
f3d2f1cf6a Fix messages list in iOS 15 2024-03-14 15:21:42 +01:00
Benoit Martins
75ae95007b Merge remote-tracking branch 'refs/remotes/origin/feature/conversations_tableview'
Conflicts:
	Linphone/UI/Main/Conversations/Fragments/ChatBubbleView.swift
2024-03-14 09:04:01 +01:00
benoit.martins
0d74e6651a Add gifs support 2024-03-13 15:08:52 +01:00
Benoit Martins
a822a0895d Add gifs support 2024-03-12 17:24:49 +01:00
Benoit Martins
af3a0fbd31 Add image bubble message 2024-03-11 17:00:15 +01:00
Benoit Martins
73d6f805d3 Test Table view for messages list 2024-03-08 15:50:10 +01:00
QuentinArguillere
8d6f096582 Disable background notification process for now (will be used later for account creation token processing) 2024-03-07 12:01:04 +01:00
QuentinArguillere
533bc26d6d Réactivation des settings de lime et de conférence au login des comptes 2024-03-05 17:40:02 +01:00
QuentinArguillere
56caacfe1c Ajout des traductions anglaises et françaises pour les clefs IM_MSG et GC_MSG 2024-03-05 17:39:33 +01:00
QuentinArguillere
66361d7309 Use centralised Config file in app extension 2024-03-05 16:22:23 +01:00
QuentinArguillere
8e5a3b703f Add "disable_chat_feature=0" key to rc files 2024-03-05 16:21:39 +01:00
QuentinArguillere
3b20c47f1d For crashlytics : add informations in the msgNotificationService googleService-info.plist file 2024-03-05 16:20:00 +01:00
QuentinArguillere
c2a1f7bc28 Now stop/starts the core when entering background/foreground. Also moved the presence related code inside this new trigger for phase change 2024-03-05 16:19:39 +01:00
QuentinArguillere
a0fdd54b70 Add NSSupportsSuddentTermination key set to FALSE in info.plist 2024-03-05 16:17:57 +01:00
QuentinArguillere
944115fb4d Add linphonerc-factory and GoogleService-Info.plist to msgNotificationService app extension 2024-03-05 16:17:23 +01:00
Benoit Martins
d8d867d798 Fix messages list in conversation 2024-03-04 15:45:07 +01:00
Benoit Martins
be09968a31 Replace ChatRoom class with ConversationModel to update conversation views 2024-02-28 17:03:59 +01:00
Benoit Martins
4196fed865 Add message bubbles 2024-02-27 10:24:18 +01:00
QuentinArguillere
0d4efd7a19 Restore groupchat and lime spec 2024-02-26 18:12:09 +01:00
QuentinArguillere
c0a16e62be Switch app Core to SharedCore, which will be required to have a working AppExtension 2024-02-26 18:06:29 +01:00
QuentinArguillere
ea1420356d Move firebase initialisation from appdelegate didFinishLaunchingWithOptionsto Corecontext init, which is called earlier 2024-02-26 18:05:19 +01:00
QuentinArguillere
fd9ede62f8 Add ApplicationWillTerminate and ApplicationWillResignActive App delegate functions 2024-02-26 18:04:32 +01:00
Benoit Martins
3d6888b8ba Init Conversation (Chat room) view 2024-02-21 17:15:30 +01:00
QuentinArguillere
b999f2f1e3 Import linphone 5.2 msgNotificationService implementation 2024-02-20 10:33:02 +01:00
QuentinArguillere
89d4926798 Enable remote push notification by default in the assistant file 2024-02-19 17:11:59 +01:00
QuentinArguillere
3461b096eb Add push notification permission request 2024-02-19 17:11:45 +01:00
QuentinArguillere
fd61bca29f Add remote push notification support, which will be required to receive and process the account creation token 2024-02-19 17:11:34 +01:00
QuentinArguillere
6c77fe7850 Add msgNotificationService app extension 2024-02-19 17:08:10 +01:00
Benoit Martins
90624e633a Merge remote-tracking branch 'refs/remotes/origin/feature/conversations' 2024-02-19 08:40:40 +01:00
benoit.martins
56e93a77a7 Missed calls counter added to bottom navigation bar 2024-02-16 19:47:19 +01:00
Christophe Deschamps
c02dcc754e Fix message display missing when going from a conversation with few messages (not enough to fill screen) to conversation with many messages 2024-02-16 08:05:24 +01:00
Christophe Deschamps
9094c9cea8 Fix crash when calling on simulators 2024-02-15 17:32:57 +01:00
Christophe Deschamps
621eca1893 Hide broadcast add button in conference history detail 2024-02-15 17:32:41 +01:00
Benoit Martins
d91996c351 Missed calls counter added to bottom navigation bar 2024-02-15 16:49:06 +01:00
Benoit Martins
61c2c048bb Fix conversations list view when receiving a message or a new chat room 2024-02-15 15:19:46 +01:00
benoit.martins
cacc61252d Add ConversationsList bottom sheet 2024-02-14 17:59:21 +01:00
benoit.martins
da9d90e368 Add chat room callbacks 2024-02-14 13:52:11 +01:00
QuentinArguillere
98da1d956f Disable background camera for PIP 2024-02-13 17:36:51 +01:00
QuentinArguillere
b9dadb51f4 Disable local push notifications 2024-02-13 16:31:49 +01:00
Benoit Martins
dc84803a17 Add conversations list 2024-02-13 15:23:00 +01:00
Christophe Deschamps
85ebe742cb Open call history when tapping on a missed call notification 2024-02-13 13:06:46 +01:00
Christophe Deschamps
89cae39b6d Force device orientation check before updating view (fix bug of UI Tab bar taking full screen when opening app after it was started from an incoming call 2024-02-13 13:05:07 +01:00
Christophe Deschamps
012b96798c Tapping a message notification when app is not started open conversation 2024-02-13 11:40:33 +01:00
Benoit Martins
60d128f4f2 Call view changes 2024-02-12 10:14:10 +01:00
Benoit Martins
f0b19b8fd3 Don't open media preview with voice recording 2024-02-08 16:25:52 +01:00
Benoit Martins
e467312008 Refresh uploaded medias 2024-02-08 16:04:15 +01:00
Benoit Martins
4c475925b8 Delete file in logs mail and replace with logs uri 2024-02-08 11:59:55 +01:00
Benoit Martins
122a9c4a57 Fix transferred image content type 2024-02-06 13:20:35 +01:00
Benoit Martins
caa3543202 Change bottom sheet in call view, add animatated caret in bottom sheet 2024-02-05 14:03:35 +01:00
Benoit Martins
efc912965a Merge remote-tracking branch 'refs/remotes/origin/release/5.2' 2024-02-05 13:21:47 +01:00
Benoit Martins
132465b5a5 Fix collectionViewImageGrid with text and scroll to bottom when chat room view is disapear 2024-02-05 13:21:11 +01:00
Benoit Martins
e53d9ab406 Merge remote-tracking branch 'refs/remotes/origin/release/5.2' 2024-02-05 12:53:15 +01:00
Benoit Martins
3b894f2653 Fix collectionViewImageGrid with text and scroll to bottom when chat room view is disapear 2024-02-05 12:52:35 +01:00
benoit.martins
c3df599069 Merge remote-tracking branch 'refs/remotes/origin/release/5.2' 2024-02-02 22:24:56 +01:00
benoit.martins
6295b0f319 Fix image clicking in VFS mode and reply display 2024-02-02 22:23:21 +01:00
Benoit Martins
5b3c8d4d1a Add green call banner 2024-01-31 14:51:34 +01:00
Benoit Martins
3513afc8c7 Fix image clicking in VFS mode and reply display 2024-01-30 13:43:50 +01:00
benoit.martins
433e28e945 Add transfer call and attended transfer 2024-01-29 15:32:21 +01:00
Benoit Martins
4048fa3075 Add transfer call feature 2024-01-29 12:37:23 +01:00
QuentinArguillere
d91aa94c9a Fix build for sdk master : pushRegistryDispatchQueue is no longer in the wrapper, we need to use the C function instead 2024-01-26 15:33:06 +01:00
Benoit Martins
ffb60daaea Fix setHeldOtherCalls when current call is paused, remove setHeldOtherCallsWithCore function 2024-01-25 14:52:04 +01:00
Benoit Martins
5ab64968e3 Add a badge counter for call list in call view 2024-01-25 12:14:14 +01:00
benoit.martins
4320f9dcce Add bottom sheet in calls list fragment 2024-01-25 11:15:41 +01:00
Benoit Martins
05cc8277d8 Add calls list in call view 2024-01-25 11:13:06 +01:00
Benoit Martins
55631bf4f4 Start a new call when another call is in progress 2024-01-25 11:11:00 +01:00
QuentinArguillere
7b93ff8998 Fix build for sdk 5.3.10 and above -- "_get_identity" no longer exists and should not have been used in the first place 2024-01-25 10:22:30 +01:00
QuentinArguillere
df2da7c774 Upgrade deployment target to 13.0, update provisioning profiles 2024-01-25 10:21:51 +01:00
QuentinArguillere
fbd578ea37 Add dialer in call view 2024-01-23 13:20:34 +01:00
Benoit Martins
dedd68326a Disable AVAudioSession at application startup 2024-01-23 13:18:07 +01:00
QuentinArguillere
9ef28d00f6 Add ZRTP Popup 2024-01-23 13:17:57 +01:00
QuentinArguillere
99b4868f7e Add specific CoreDelegate to process the PushIncoming state of incoming calls. This is currently required, because Publisher-type callbacks are queue and not instantly called, which does not work when we have to report incoming calls for callkit before iOS kills us. 2024-01-22 17:22:12 +01:00
QuentinArguillere
35fdb0de9b Add encryption strings to info.plist for testflight distribution 2024-01-18 11:28:22 +01:00
QuentinArguillere
1c87718854 Fix typo 2024-01-16 21:18:52 +01:00
QuentinArguillere
e23309765a Remove lime, groupchat, conference, ephemeral capabilities from core. Also remove conference factory from account when we login. THIS SHOULD BE UNDONE WHEN PROCEEDING TO NEXT STEP OF THE 6.0 RELEASE 2024-01-16 21:18:39 +01:00
QuentinArguillere
bca8612eab Finish crashlytics integration. Add "CRASH ME" button in contacts view, uncomment when testing to make sure it's properly connected 2024-01-16 21:04:59 +01:00
Benoit Martins
33b07f1440 Fix account deletion when network is disconnected and can delete account in the side view 2024-01-16 20:58:57 +01:00
Benoit Martins
2e5ba428a0 Fixes for first release 2024-01-16 20:57:53 +01:00
Benoit Martins
2fc711b63f Merge branch 'feature/call_features_custom_bottom_sheet' into 'master'
Custom bottom sheet in call view

See merge request BC/private/linphone-iphone-6.0!18
2024-01-15 15:25:53 +00:00
Benoit Martins
054d622491 Resolve merge conflicts after git rebase 2024-01-15 16:15:41 +01:00
Benoit Martins
bd631a7237 Merge branch 'master'
Conflicts:
	Linphone/Core/CoreContext.swift
	Linphone/Info.plist
	Linphone/LinphoneApp.swift
	Linphone/UI/Call/CallView.swift
	Linphone/UI/Call/ViewModel/CallViewModel.swift
	Linphone/UI/Main/ContentView.swift
2024-01-15 15:41:49 +01:00
Benoit Martins
e9784ddc61 Add custom bottom sheet in call view 2024-01-15 15:31:25 +01:00
Quentin Arguillere
9c020f94f9 Merge branch 'feature/call_features' into 'master'
Various features for testflight upload and version 1 testing

See merge request BC/private/linphone-iphone-6.0!17
2024-01-15 10:13:06 +00:00
Benoit Martins
937444c5d0 Fix video display in call view 2024-01-12 17:27:16 +01:00
QuentinArguillere
2f1bd572b0 Add USE_CRASHLYTICS flag management to podfile, and fix crashlytics log build 2024-01-12 17:27:16 +01:00
QuentinArguillere
6bf6aa3aa6 Add encryption parameters to info.plist for upload on appstoreconnect 2024-01-12 17:27:16 +01:00
QuentinArguillere
1b498258a3 Crahslytics - add GoogleService-Info.plist 2024-01-12 17:27:16 +01:00
QuentinArguillere
3f4e8d79cf Add crashlytics (WIP) 2024-01-12 17:27:16 +01:00
QuentinArguillere
4efc28da9e Update push provider - use "apns.dev" or "apns" depending on wether we're using a DEBUG or RELEASE build 2024-01-12 17:27:16 +01:00
QuentinArguillere
e66a0802f5 Update podfile to use 5.4.0-alpha sdk 2024-01-12 17:27:16 +01:00
QuentinArguillere
aa1c585024 Remove mentions of macOS in the xcodeproj 2024-01-12 17:27:16 +01:00
Benoit Martins
aa18757a48 Disable useless buttons in call view 2024-01-12 17:27:16 +01:00
Benoit Martins
12f9829331 Add user agent 2024-01-12 17:27:16 +01:00
Benoit Martins
5aaf01250b Fix side menu buttons 2024-01-12 17:27:16 +01:00
Benoit Martins
04dbce540c Fixes 2024-01-12 17:27:16 +01:00
QuentinArguillere
1ddf2602b9 Fix or disable several swiftlint warnings 2024-01-12 17:27:16 +01:00
Benoit Martins
d97f07942f Refresh view when call is paused 2024-01-12 17:27:16 +01:00
Benoit Martins
8469e8583e Toast display when user records call 2024-01-12 17:27:15 +01:00
Benoit Martins
96bdf5150c Record call 2024-01-12 17:27:15 +01:00
Benoit Martins
7abacc3caf Fixes 2024-01-11 09:56:37 +01:00
QuentinArguillere
e2a7ac7f56 Fix or disable several swiftlint warnings 2024-01-09 16:50:40 +01:00
Benoit Martins
ea1382e801 Refresh view when call is paused 2024-01-09 16:42:11 +01:00
Benoit Martins
1b44d902b1 Toast display when user records call 2024-01-09 12:21:07 +01:00
Benoit Martins
5c7d76a572 Merge branch 'feature/video_call' into 'master'
Video call

See merge request BC/private/linphone-iphone-6.0!16
2024-01-08 15:58:00 +00:00
Benoit Martins
db7ccff9f5 Record call 2024-01-08 16:57:26 +01:00
Benoit Martins
341d8171a0 Add video call, fullscreen mode and automatic video acceptance 2024-01-08 13:35:14 +01:00
Benoit Martins
3046336e57 Init video call 2024-01-05 16:53:35 +01:00
Benoit Martins
5173b655f2 Merge branch 'feature/start_call' into 'master'
Start call / Mute / Edit Audio route

See merge request BC/private/linphone-iphone-6.0!15
2024-01-05 08:38:21 +00:00
Benoit Martins
111fef6603 Edit audio route and add an audio reminder 2024-01-03 16:34:04 +01:00
QuentinArguillere
bcf4eefe35 Fix swiftlint warnings 2024-01-02 17:33:54 +01:00
QuentinArguillere
d0ae11c880 Update publishers to manage the subscriptions manually 2024-01-02 17:27:16 +01:00
Benoit Martins
81448d8006 Init audio route 2024-01-02 16:57:31 +01:00
QuentinArguillere
d98ecb8f37 Update changelog, xcodprojversion, and podfile, for 5.2.1 release 2023-12-28 11:43:02 +01:00
QuentinArguillere
ccc1e52538 Disable the "send databases" option in advanced settings 2023-12-28 11:39:22 +01:00
Libor Filípek
6603702fe0 Update Czech and Japanese translations)
Translation: Linphone iPhone/linphone-ios.localizablestrings
Translate-URL: https://weblate.linphone.org/projects/linphone-iphone/localizable/cs/
2023-12-28 10:45:34 +01:00
benoit.martins
63d83b13f6 Fix bottom sheet in call view 2023-12-27 18:10:28 +01:00
Benoit Martins
cc6d599ec5 Fixes 2023-12-22 16:56:59 +01:00
QuentinArguillere
1253cccbcc Update CHANGELOG and Podfile for release 5.2 2023-12-21 16:51:16 +01:00
benoit.martins
99e3643ba4 Fix empty file 2023-12-20 09:46:59 +01:00
QuentinArguillere
d89e616f37 Add startCall utilities to TelecomManager 2023-12-19 17:34:59 +01:00
Benoit Martins
f7f9ee32b6 Init outgoing call 2023-12-19 17:08:23 +01:00
Benoit Martins
6cf84fdd37 Fix file display during transfer, disable message information when the message is not sent, refresh of recording file when download is complete 2023-12-19 16:56:40 +01:00
Benoit Martins
723227b87e Fixes Test Plan 5.2 2023-12-15 16:45:56 +01:00
Benoit Martins
bb9f850704 Hide broadcast mode in settings 2023-12-12 16:45:37 +01:00
Benoit Martins
70ff69aa63 Fix UIImage when content.filePath is nil 2023-12-12 13:13:54 +01:00
Benoit Martins
035149bd47 Fix callbacks 2023-12-12 12:00:32 +01:00
QuentinArguillere
3bb0d06787 Add ProviderDelegate and TelecomManager for Callkit integration 2023-12-12 11:42:56 +01:00
QuentinArguillere
2a1bd88741 Allow push notifications in the app, and update account and core settings to allow VOIP push parameters generation for register 2023-12-10 11:08:21 +01:00
QuentinArguillere
76b7681bf4 Add logs app group entitlements which fixes the log collection crash 2023-12-09 23:16:44 +01:00
Quentin Arguillere
4e44d764f8 Merge branch 'feature/logs' into 'master'
Add various utility files, and specifically Log

See merge request BC/private/linphone-iphone-6.0!13
2023-12-09 18:41:51 +00:00
QuentinArguillere
8523f110d7 Disable log file collection because of crash, to be fixed 2023-12-09 19:27:34 +01:00
QuentinArguillere
26dd731f84 Add Log 2023-12-09 18:34:04 +01:00
QuentinArguillere
52b4bd9f56 Add FileUtils 2023-12-09 18:16:45 +01:00
QuentinArguillere
5b3176c031 Add AudioRouteUtils 2023-12-09 17:55:39 +01:00
QuentinArguillere
8e6df8867a Add CoreExtension 2023-12-09 17:54:27 +01:00
QuentinArguillere
50f8564981 Add Extensions folder to Utils. Move 'Color', 'Int' and 'Text' extensions inside. Add ConfigExtension and new 'group.org.linphone.phone.logs' app group 2023-12-09 17:52:45 +01:00
QuentinArguillere
d3cc7091ac Alphabetically sort utility files 2023-12-09 17:33:40 +01:00
Quentin Arguillere
1dde8873a8 Merge branch 'feature/start_call_view' into 'master'
Merge tous les changements de benoit : call history, History call details, presence, start call view

See merge request BC/private/linphone-iphone-6.0!12
2023-12-09 12:27:17 +00:00
Benoit Martins
77951adaa1 Fix contact image 2023-12-05 17:00:30 +01:00
Benoit Martins
e47a04c5d9 Start new call view 2023-12-05 15:50:09 +01:00
Benoit Martins
2db146787e Fix release 5.2 2023-12-05 10:51:09 +01:00
Benoit Martins
8b14538fcd Send own presence 2023-12-01 10:20:31 +01:00
Benoit Martins
7b476904cb Fix presence 2023-11-30 17:23:38 +01:00
QuentinArguillere
422f84e92d Fixes for 5.2 release
FIx

Fix PipController

Other fixes (Reported on AppStoreConnect)
2023-11-28 23:44:28 +01:00
Benoit Martins
07b2c1e04e Add assistant config files (linphone and third party)
Fix presence
2023-11-24 16:48:04 +01:00
Benoit Martins
b576785399 Send and clear logs 2023-11-23 17:21:49 +01:00
Benoit Martins
a209349f95 Fix rebase 2023-11-23 12:11:43 +01:00
benoit.martins
84da8a367b Fix Presence 2023-11-22 15:42:18 +01:00
Benoit Martins
d7da763dae Refresh calllogs list when receive callback 2023-11-21 14:16:06 +01:00
Benoit Martins
0142a9146b Display toast when user copy adress or delete call logs in History views 2023-11-20 17:00:19 +01:00
Benoit Martins
81a9dd9124 Converting SharedMainViewModel class into singleton 2023-11-20 13:29:22 +01:00
Benoit Martins
773d9584f4 History call detail with calllogs 2023-11-20 10:03:59 +01:00
Benoit Martins
375c8b0ce6 Add history call detail 2023-11-16 16:59:10 +01:00
Benoit Martins
ce9f6c454c Add history call list 2023-11-16 15:26:19 +01:00
Benoit Martins
5cf66f2853 Add presence icon for Avatar 2023-11-15 10:03:02 +01:00
Quentin Arguillere
ae1ea15558 Merge branch 'feature/contact_create_and_edit' into 'master'
Contact create and edit

See merge request BC/private/linphone-iphone-6.0!7
2023-11-14 13:53:23 +00:00
QuentinArguillere
6b5e456242 Light refactoring of ContactsManager.swift : remove observableobject, fix typos, add traces 2023-11-14 14:37:53 +01:00
Christophe Deschamps
568b9eaae2 Fix crash upon refreshing register (handle new registration state LinphoneRegistrationRefreshing) 2023-11-13 17:29:40 +01:00
benoit.martins
ada6065b21 Share contact vcard 2023-11-10 10:48:41 +01:00
QuentinArguillere
1d38941383 Fix crash caused by callid now being an optional string that can be nil rather than just empty 2023-11-09 14:59:45 +01:00
Benoit Martins
3b625b9063 FIx rebase 2023-11-09 13:54:57 +01:00
Benoit Martins
19da1739f0 Merge branch 'master'
Conflicts:
	Linphone/Contacts/ContactsManager.swift
	Linphone/LinphoneApp.swift
	Linphone/UI/Main/ContentView.swift
2023-11-09 11:47:41 +01:00
Benoit Martins
8aae1b2020 Edit native contact test 2023-11-09 11:06:42 +01:00
Benoit Martins
5d0ce2c8f3 Add edit view for native contact 2023-11-07 17:02:03 +01:00
Quentin Arguillere
53b190a5c8 Merge branch 'feature/core_thread_extraction' into 'master'
Merge feature/contact branch + extract linphone core to be used exclusively on a specific core queue

See merge request BC/private/linphone-iphone-6.0!6
2023-11-07 11:03:17 +00:00
Benoit Martins
abd5461f54 Add edit contact view 2023-11-06 15:16:41 +01:00
QuentinArguillere
a3befe61cf Move all Core related code to another dispatch queue. requires sdk built with feature/swift_wrapper_async_helpers 2023-11-03 17:31:59 +01:00
QuentinArguillere
3fe7dd8884 Pod deintegrate 2023-11-03 16:21:21 +01:00
Benoit Martins
ac7f4da260 Fix QRCode provisioning 2023-10-30 16:16:41 +01:00
Benoit Martins
a71d86e34f Add all images 2023-10-30 14:31:49 +01:00
Benoit Martins
2292512e4d Add contact fragment (detail) 2023-10-30 12:07:31 +01:00
benoit.martins
5dc38b6c91 add bottom sheet to add a friend to the favorites list 2023-10-27 17:09:11 +02:00
benoit.martins
219ee2d438 Changes ContactsManager 2023-10-27 10:44:00 +02:00
Benoit Martins
b7f8f4a2c6 Merge branch 'feature/main_view' into 'master'
Main view

See merge request BC/private/linphone-iphone-6.0!4
2023-10-26 07:23:52 +00:00
benoit.martins
9ef96bbd78 Add contacts list 2023-10-25 17:32:51 +02:00
benoit.martins
34ff4d642d Fix displayName is nil for event message 2023-10-19 23:31:04 +02:00
Benoit Martins
7e0b3347f1 Add new UIlabel for other emoji reactions 2023-10-19 10:48:21 +02:00
Benoit Martins
91d933827b Fix preview and media viewer 2023-10-19 10:48:14 +02:00
benoit.martins
146682e555 Add side menu 2023-10-19 10:02:08 +02:00
QuentinArguillere
e4a16c804b Update version to 5.2.0 (1) 2023-10-17 17:37:23 +02:00
QuentinArguillere
baf17d6919 Add core CodecPriorityPolicy automatic settings for existing accounts of previous versions 2023-10-17 17:34:50 +02:00
QuentinArguillere
6ff33bb0d9 Fix build 2023-10-17 17:11:59 +02:00
Benoit Martins
8f733195d4 Add home page 2023-10-17 16:54:41 +02:00
QuentinArguillere
0f2cb9143f pod deintegrate in pbxproj 2023-10-17 13:54:24 +02:00
Benoit Martins
2e77d7bc84 Fixed iOS notifications when it's an emoji reaction
Fixed new nullable variable in wrapper
2023-10-17 13:53:44 +02:00
Benoit Martins
f28a38d838 Add message delegate (callback) in reaction sheet view 2023-10-17 12:38:55 +02:00
Benoit Martins
99445a04c4 Show our reaction if any in long press menu + remove it if selected again
Fix scrolling for reactionsListTableView
2023-10-17 12:37:59 +02:00
Benoit Martins
43e91ae33d Add project.pbxproj for new file ReactionCell.swift 2023-10-17 12:36:08 +02:00
Benoit Martins
1c2b726016 Add reactions list in bottom sheet 2023-10-17 12:34:34 +02:00
benoit.martins
3a065eaac8 Add itemViewController in SheetViewController 2023-10-17 12:34:34 +02:00
benoit.martins
368a8e1bf4 Add SheetViewController (Bottom Sheet) for emoji reactions 2023-10-17 12:34:31 +02:00
benoit.martins
b12c508e69 Add ChatMessageReaction callback 2023-10-17 12:31:47 +02:00
Benoit Martins
30a350b0dc Add emoji reactions feature 2023-10-17 12:31:47 +02:00
Christophe Deschamps
91614236e8 Handle [misc]max_calls configuration flag inside the application 2023-10-17 12:24:41 +02:00
QuentinArguillere
4b88022c44 deintegrate pods in pbxproj 2023-10-17 12:23:32 +02:00
Christophe Deschamps
74303f7130 Do not create local push notifications inside muted chatrooms 2023-10-17 12:23:32 +02:00
Christophe Deschamps
35f4dec79f Refactoring of LocalPushProvider + Aggregation mecanism (3 seconds by default) 2023-10-17 12:23:32 +02:00
Christophe Deschamps
b966c34868 LocalPush - Fix label not displaying at first app install 2023-10-17 12:23:32 +02:00
Christophe Deschamps
31c57e5b28 Local Push Notification - Network extension 2023-10-17 12:23:30 +02:00
QuentinArguillere
1fb44f32f0 pod deintegrate in linphone.xcodeproj 2023-10-17 11:53:48 +02:00
QuentinArguillere
ff9924df32 Fix build using linphone_account_get_call_logs_for_address instead of deprecated linphone_core_get_call_history_for_address 2023-10-17 10:59:50 +02:00
Quentin Monnier
f8562a45de add picture in picture for single video calls when the view goes in background (waiting apple permission to enable video capture in picture in picture video calls) 2023-10-17 10:57:52 +02:00
Benoit Martins
0ed4f948ca Braodcast setting added
and fix sdk master changes for non-nil values
2023-10-17 10:13:22 +02:00
Benoit Martins
056a71d887 Fix VoipConferenceActiveSpeakerView when the user is a listener 2023-10-17 10:11:47 +02:00
Benoit Martins
3bd7a7f19c Display the "user is now admin" popup in the participant list only 2023-10-17 10:11:47 +02:00
Benoit Martins
f25211a9f1 Add Speaker label in Participant list
Fix ConferenceWaitingRoomView
2023-10-17 10:11:47 +02:00
Benoit Martins
669736cc20 Fix ConferenceCallView when the user is a listener 2023-10-17 10:11:47 +02:00
benoit.martins
03aec21ded Change UI when user isn't a speaker in callview 2023-10-17 10:11:47 +02:00
Benoit Martins
2c47087a80 Change background color of account cell in side menu 2023-10-17 10:11:47 +02:00
Benoit Martins
6f88231cdd Display conference speakers only 2023-10-17 10:11:46 +02:00
Benoit Martins
be8062ff9b Fix ConferenceSchedulingSummaryView for Broadcast
Add broadcast changes in ICSBubbleView and ScheduledConferencesCell
2023-10-17 10:11:46 +02:00
Benoit Martins
9b4cf3aaab Changes for broadcast infos in ScheduledConferencesCell 2023-10-17 10:11:46 +02:00
Benoit Martins
7c79e1bea7 Hide mode label and mode picker in meeting editor 2023-10-17 10:11:46 +02:00
Benoit Martins
8c0f52c28e Add broadcast mode in conference scheduling views 2023-10-17 10:11:42 +02:00
Benoit Martins
2abc2e6500 Navigation bar added 2023-10-12 17:01:31 +02:00
Benoit Martins
d7663de622 Merge branch 'init_project' into 'master'
Init project + Login

See merge request BC/private/linphone-iphone-6.0!1
2023-10-12 14:23:20 +02:00
Benoit Martins
ad09a2511a Add request permission view 2023-10-12 14:02:41 +02:00
Benoit Martins
adc8b00d6d Use SwiftLint 2023-10-12 14:00:37 +02:00
Benoit Martins
3669674eae Several fixes
Fix iPad and landscape views
2023-10-12 14:00:37 +02:00
Benoit Martins
b967b67598 Add QRCode Scanner View 2023-10-12 14:00:37 +02:00
Benoit Martins
55d7bf8de7 Add third party sip account views 2023-10-12 14:00:37 +02:00
benoit.martins
7bc754195b Add Profile mode view and change popupview for reuse 2023-10-12 14:00:37 +02:00
Benoit Martins
ae5f3a6c41 Add Welcome View 2023-10-12 14:00:37 +02:00
benoit.martins
e0d77cdb06 New Linphone styles, changes in Login view 2023-10-12 14:00:37 +02:00
Benoit Martins
fb212eeb9f Change AssistantView 2023-10-12 14:00:37 +02:00
Benoit Martins
392be31c5c Add localizable strings for translation 2023-10-12 14:00:37 +02:00
Benoit Martins
731b6bd66b Fix CoreContext ObservableObject, add Noto Sans Font and Montain.svg 2023-10-12 14:00:32 +02:00
Benoit Martins
32452cbeeb Delete UserInterfaceState.xcuserstate 2023-09-25 16:19:59 +02:00
Benoit Martins
0b72427247 Delete xcschememanagement and change gitignore 2023-09-25 15:58:57 +02:00
QuentinArguillere
5f09c25eee Fix typo in podfile 2023-09-22 16:33:22 +02:00
QuentinArguillere
2e02db69a8 Change bundle identifier to org.linphone.phone 2023-09-22 16:32:57 +02:00
QuentinArguillere
284739639a Add gitignore 2023-09-22 16:15:10 +02:00
QuentinArguillere
3eb289b274 Remove Podfile.lock and Pods dependense from xcodeproj 2023-09-22 16:13:06 +02:00
QuentinArguillere
551f2b5068 Remove Linphone.xcworkspace from repository 2023-09-22 16:07:45 +02:00
benoit.martins
daeec87404 Added Xcode Project 2023-09-22 14:49:56 +02:00
Quentin Arguillere
f1c2a672a5 Initial commit 2023-09-22 12:15:50 +00:00
NPL
04adc613a6 Update translation for Czech and Japanese 2023-09-05 11:50:28 +02:00
QuentinArguillere
0c4eab494b Refactorize create_account flexiapi workflow to include the recover_account functions too 2023-09-01 16:00:31 +02:00
Christophe Deschamps
9a01ab5025 Prevent phone number normalisation when dial_prefix_for_calls_and_chats is disabled on the default account 2023-09-01 12:09:33 +02:00
QuentinArguillere
fdbadd3b70 Fix master build for sdk 5.3 2023-08-28 17:21:45 +02:00
Christophe Deschamps
95a939e73e Missed call log - added Aborted and Early aborted conditions 2023-08-22 14:21:44 +00:00
QuentinArguillere
3e428ac8cf Update xcodeproj to 5.2.0 2023-08-22 11:40:22 +02:00
QuentinArguillere
c943477f65 update translations from the weblate. Also added to the linphone.xcodeproj the Localisable.string files for : pl, ese, sv, pt_BR, zh-TW, zh-CN, it, uk, tr, ka, ez_AR, cs, hu 2023-08-21 17:47:24 +02:00
QuentinArguillere
5b0d6b7ada Remove old use of UIColor.secondarySystemBackgroundColor that is only available on iOS 13 or higher 2023-08-21 17:46:11 +02:00
QuentinArguillere
3b878b9fa6 Updated changelog for 5.1.0 release 2023-08-21 17:45:58 +02:00
QuentinArguillere
c58cbad002 Temporarely revert "Add LinphoneRegistrationRefreshing status to the registration state switches to avoid crash" because the 5.3.0 SDK does not have this enum yet.
This reverts commit 1192b80906.
2023-08-17 16:12:01 +02:00
Christophe Deschamps
f13e13326f Fix calls not working after core is destroyed by the app (remote prov) 2023-08-17 15:42:30 +02:00
Benoit Martins
f023a1b108 Remove lime warning popup 2023-08-17 15:42:25 +02:00
Benoit Martins
1fef65020d Reload the entire collectionView when a presence notification is received 2023-08-17 15:42:20 +02:00
Benoit Martins
9a9a9bf002 Check if contact.friend is not nil in updatePresenceImage 2023-08-17 15:42:14 +02:00
Benoit Martins
6863ea3f10 Fix background color of ContentMessageView when display mode (Dark and Light mode) is switched 2023-08-17 15:42:06 +02:00
Benoit Martins
2d9c4c8c78 Change color of voice recording in dark mode 2023-08-17 15:37:36 +02:00
Benoit Martins
247d3047e4 Fix pdf viewer in VFS mode 2023-08-17 15:37:30 +02:00
Benoit Martins
abf2d63b5b Fix voice recording in VFS mode 2023-08-17 15:35:36 +02:00
QuentinArguillere
1192b80906 Add LinphoneRegistrationRefreshing status to the registration state switches to avoid crash 2023-08-17 15:35:02 +02:00
QuentinArguillere
a5d421f9f9 Commented the part that removed the recordingView subviews, which seemed to break the voice recording UI. 2023-08-17 15:34:55 +02:00
QuentinArguillere
697c719659 Rename "visible" parameter to "hidden" to better match the purpose of the function 2023-08-17 15:34:48 +02:00
QuentinArguillere
39f76dc874 Added CopyableLabel.swift file to the xcodeproj to re-enable the "long press to copy" action for sip adresses and contact names 2023-08-17 15:21:42 +02:00
QuentinArguillere
6e398ffb3a Stop the core when app is terminated to make sure the Main Core doesn't stay in Shutdown state, which would block the App Extension when receiving push notifications 2023-08-17 15:13:23 +02:00
QuentinArguillere
fd566c5a01 Changes for linphone SDK master 2023-07-24 15:23:46 +02:00
Benoit Martins
94a31d774e Fix ephemeral timer in MultilineMessageCell 2023-07-21 13:39:06 +02:00
Benoit Martins
c0d0aedfba Fix click on secure badge 2023-07-21 11:00:32 +02:00
Benoit Martins
735ecf739a Remove linphone_chat_message_cbs_set_participant_imdn_state_changed callback in UIChatCell 2023-07-20 11:43:40 +02:00
Benoit Martins
d54e71bb1c Fix Message View 2023-07-20 11:00:12 +02:00
Benoit Martins
b38d858692 Fix Secure badge 2023-07-20 10:57:19 +02:00
Benoit Martins
4645b776ee Fix secureBadge with safeArea
Fix presence in ContactsListTableVIew
2023-07-20 10:57:19 +02:00
Benoit Martins
3c15f7ff20 Remove updateIMDNList in UIChatCell and hide drop down menu when app moved to background/foreground 2023-07-20 10:57:19 +02:00
Benoit Martins
3b1462cbe1 Check if contactAddress.friend is not nil 2023-07-20 10:57:01 +02:00
Benoit Martins
07489f68f9 Fix Message View 2023-07-20 10:55:58 +02:00
Benoit Martins
194ddcabf8 Revert "UI changes in conversation view"
This reverts commit 9741c844f2.
2023-07-20 10:29:30 +02:00
Benoit Martins
2789c59c6b Revert "Fix MessageView"
This reverts commit 4f31af47a3.
2023-07-20 10:29:28 +02:00
Benoit Martins
5113a74839 Revert "The topbar in chatConversationViewSwift remains displayed when the keyboard is open"
This reverts commit 3265e27eb1.
2023-07-20 10:29:27 +02:00
Benoit Martins
806975edeb Revert "Fix secureBadge with safeArea"
This reverts commit 32f264d8e4.
2023-07-20 10:29:26 +02:00
Benoit Martins
0ede98bcf6 Revert "Check if contactAddress.friend is not nil"
This reverts commit 91be4e530b.
2023-07-20 10:29:25 +02:00
Benoit Martins
51df1a836c Revert "Remove updateIMDNList in UIChatCell and hide drop down menu when app moved to background/foreground"
This reverts commit 20ef204f42.
2023-07-20 10:29:23 +02:00
QuentinArguillere
58ccee0a39 Use flexiapi account creator 2023-07-17 16:59:53 +02:00
Benoit Martins
20ef204f42 Remove updateIMDNList in UIChatCell and hide drop down menu when app moved to background/foreground 2023-07-17 14:16:51 +02:00
Benoit Martins
91be4e530b Check if contactAddress.friend is not nil 2023-07-12 17:00:14 +02:00
Benoit Martins
32f264d8e4 Fix secureBadge with safeArea
Fix presence in ContactsListTableVIew
2023-07-12 15:30:28 +02:00
Benoit Martins
3265e27eb1 The topbar in chatConversationViewSwift remains displayed when the keyboard is open 2023-07-12 14:43:35 +02:00
Benoit Martins
4f31af47a3 Fix MessageView 2023-07-12 10:55:39 +02:00
Benoit Martins
9741c844f2 UI changes in conversation view 2023-07-11 17:22:56 +02:00
QuentinArguillere
0d602260be Merge release/5.1 into master.
This includes the rework of the chat conversation in Swift, and every fixes since the 5.0 release.
2023-07-07 15:07:44 +02:00
Christophe Deschamps
329193d2fa Fix chat room creation view split 2022-10-21 17:26:12 +02:00
Christophe Deschamps
becc375f12 Update new class header 2022-10-21 10:57:51 +02:00
Christophe Deschamps
70a85bcaa7 Set unique file name per message to avoid local display conflicts 2022-10-21 10:57:45 +02:00
Christophe Deschamps
0964dcec5c Show tabbar in chat on iPads (no back button) 2022-10-19 10:36:23 +02:00
Christophe Deschamps
cec6e221b9 Fix conference creation button state in conference list 2022-10-19 10:34:56 +02:00
Christophe Deschamps
fc47f41aa2 Voipdialog anchor on iPads 2022-10-19 10:34:50 +02:00
Christophe Deschamps
7126085638 Bulk bug fixes conference 2022-10-19 10:33:52 +02:00
Christophe Deschamps
ef94fd8eb8 Conference creation on iPad 2022-10-19 10:32:56 +02:00
Christophe Deschamps
f2d7155aa2 Send cancel conference iCS 2022-10-19 10:32:45 +02:00
Christophe Deschamps
7b70ff88d4 Fix freeze tapping settings in waiting room 2022-10-12 17:30:43 +02:00
Christophe Deschamps
20053396cb Removed double tap listener on audio click / landscape 2022-10-12 07:27:32 +02:00
Christophe Deschamps
6c1beb6f06 Meeting edition fixes 2022-10-11 17:11:32 +02:00
Quentin Monnier
384c5ccf65 implement CallUITests classes (TestCases, TestPlans, Methods, Accessibility Identifiers) 2022-10-04 15:03:35 -04:00
Christophe Deschamps
d4e5c1fed8 Handle video/no video updates from Active Speaker 2022-10-03 14:56:55 +02:00
Christophe Deschamps
468706fb0e Fix display of conferences in history on ipads 2022-09-29 13:42:10 +02:00
Christophe Deschamps
2582bbf782 Fix AS layout not updating when joining a conf with more than 2 participants already 2022-09-29 13:23:01 +02:00
Christophe Deschamps
d96228ef44 Option to schedule meeting from group chat 2022-09-23 00:39:26 +02:00
Christophe Deschamps
8894132986 Send cancel information when deleting a meeting self-organized 2022-09-23 00:11:58 +02:00
Christophe Deschamps
7d9b79a9f8 Multiple deletion of meetings (function activated by long click on meeting cell) 2022-09-22 23:57:47 +02:00
Christophe Deschamps
cfb71d14c4 Swipe to delete on conferences view 2022-09-22 22:19:11 +02:00
Christophe Deschamps
726a4afdd1 Fix (for good) background color for Me participant + repositionned the Me sticker bottom right in AS Landscape iso top right 2022-09-19 16:04:12 +02:00
Christophe Deschamps
24b00bdd07 Send conference invitation via secure chat when possible 2022-09-19 15:43:10 +02:00
Christophe Deschamps
cd56030c41 Display a message when attempting to launch cancelled conference from history 2022-09-19 15:17:37 +02:00
Christophe Deschamps
3c453119b3 Added handling of meeting cancellation and edition 2022-09-19 11:36:47 +02:00
Christophe Deschamps
5e3906e578 Set special color for local participants in conference 2022-09-19 09:46:13 +02:00
Christophe Deschamps
89112ccc3e Added remote mute indicator in AS Conference view with 2 participants 2022-09-13 11:51:41 +02:00
Christophe Deschamps
9439819ca4 Removed retired Class UIVideoButton 2022-09-13 11:34:43 +02:00
Christophe Deschamps
44c2e97f92 Video conference : use video preview when alone and in active speaker view 2022-09-08 17:38:05 +02:00
Christophe Deschamps
7d8b511d3e Wrap display name of participants in conference grid mode 2022-09-08 13:15:33 +02:00
Christophe Deschamps
eeec7e38d7 Tidy up Avatar 2022-09-07 17:22:11 +02:00
Christophe Deschamps
9655948f35 Tentative fix for random crash forwarding a message 2022-08-25 19:56:06 +02:00
Christophe Deschamps
a6b7182bd0 Add more space to call view in landscape mode 2022-08-24 09:34:20 +02:00
Christophe Deschamps
1e886125b9 Conference Active Speaker adjustments :
- Leave local participant always first (portrait) or top (landscape)
- Layout for 0, 1 and more participants
2022-08-24 09:19:59 +02:00
Christophe Deschamps
6a29d1d0e2 Filter for terminated/scheduled conferences 2022-08-19 10:45:58 +02:00
Christophe Deschamps
f25423445f IMDM cell cosmetics 2022-08-18 19:09:48 +02:00
Christophe Deschamps
452bcc2aaf Display Meeting in recording list instead of conference server address 2022-08-18 19:06:51 +02:00
Christophe Deschamps
587e15a112 Display avatar icon instead of initials when username is a phone number 2022-08-18 18:48:03 +02:00
Christophe Deschamps
a66fe73aa9 Conference participants list cosmetics 2022-08-18 18:28:28 +02:00
Christophe Deschamps
417e93ca30 Meeting invitations bubble :
- Fix description displaying (dynamic height)
- Fix reply/forward header overlap
- Remove copy text option from contextual menu of ICS
- Improved chat bubble context menu icons quality
- Do not show IMDM option menu in 1-1 chat room
- Remove extra space at bottom of contextual menu in chat bubbles
2022-08-18 13:35:30 +02:00
Christophe Deschamps
afd22ede17 Send conference invitations only if scheduled for laster 2022-08-18 11:03:33 +02:00
Christophe Deschamps
b0f5efae59 Conference scheduling graphical fixes :
- mandatory indicator icon truncated
- text entry colors (hint/text)
- Send via option moved inside scheduling form
- mandatory indicator placement
- conference summary cosmetics
2022-08-18 10:15:03 +02:00
Christophe Deschamps
7e308427d0 - Ability to mute/unmute when outside a conference
- Call stats & Numpad views above controls
- Group call icon in call list cosmetic
- Calls List : fix icon size & layout issue on some iOS Devices
- Black background on video full screen conference
2022-08-17 20:46:12 +02:00
Christophe Deschamps
df1a2c3ea4 Fix conference resume button 2022-08-17 18:51:13 +02:00
Christophe Deschamps
b9430bffc2 Cosmetic on dots menu & micro icon on conversation view 2022-08-17 18:20:48 +02:00
Christophe Deschamps
0ccb7e4913 Conference Active Speaker view landscape mode 2022-08-17 17:56:27 +02:00
Christophe Deschamps
25aa487e58 Landscape layout in conference waiting room
If video is activated in waiting room with audio only mode selected, active speaker mode becomes selected
2022-08-16 12:12:42 +02:00
Christophe Deschamps
bb4c8bfe91 Fix local video content mode in 1-1 video calls 2022-08-16 10:37:10 +02:00
Christophe Deschamps
575b9d01c7 Prevent infinite loop on displaying ICS invitation 2022-08-16 10:35:18 +02:00
Quentin Monnier
2301a26758 bug fix :
-display/hide call stats when clicking on the network quality icon in the status bar of the Active Call View
2022-08-08 11:03:40 +02:00
Quentin Monnier
f8f9b99718 bug fix:
-resume the active call by clicking on the play button and not by clicking anywhere on the screen when it is paused
2022-08-08 11:03:40 +02:00
Quentin Monnier
3ba84b99d8 bug fix:
-shows the "backToCallButton" when accessing the "TransferCallView" and the "AddCallView" from the "ExtraButtonMenu" in active calls
-delete the first blank character in the entered DTMF
-disable the hide action of the "ExtraButtonMenu" when clicking between buttons, in the background
-closes the "NumpadView" and the "CallStatsView" when the call ends
-displays the "StatusBar" in "Incoming/OutgoingCallView"
-define the height of the "EneteredDtmfTextView" (no longer automatic since the blank character has been removed)
2022-08-08 11:03:40 +02:00
Christophe Deschamps
2c98100035 Merge branch 'master' of gitlab.linphone.org:BC/public/linphone-iphone 2022-07-27 17:42:09 +02:00
Christophe Deschamps
67e38623c1 Activate CallKit & Audio Session upon immediate conf locally created 2022-07-27 17:41:57 +02:00
Quentin Monnier
c7c950876d Revert "Update .gitlab-ci.yml file"
This reverts commit 4b873086ea
2022-07-25 16:04:19 +02:00
Quentin Monnier
4b873086ea Update .gitlab-ci.yml file 2022-07-25 13:56:05 +00:00
Christophe Deschamps
d524cbaaf0 Aligned speaking participant with Android 2022-07-23 02:07:59 +02:00
Christophe Deschamps
c8bc8793c6 Workarounds for active speaker: do not display 'me' device name when speaking + showing ourselves when alone 2022-07-22 12:09:10 +02:00
Christophe Deschamps
91b6334d34 Fix Toast not dismissing 2022-07-21 12:20:56 +02:00
Christophe Deschamps
c74f37e95d Added dropdown patch into Podfile 2022-07-13 10:24:46 +02:00
Christophe Deschamps
368d6fa90a ICS Reply 2022-07-11 23:42:52 +02:00
Christophe Deschamps
16a46d94dd Conference side menu icon 2022-07-11 23:42:34 +02:00
Christophe Deschamps
3268fc4b55 Fix locally paused state in view model 2022-07-11 22:56:16 +02:00
Christophe Deschamps
ec70c161f3 Adapt to latest sdk change related to conference + implemented joining spinner + refactored conference miniatures update 2022-07-11 20:51:51 +02:00
Christophe Deschamps
5040e6dae9 Dropdown picker more user-friendly 2022-07-03 18:56:34 +02:00
Christophe Deschamps
b55aa86ba4 Fix calendar event pre-set fields 2022-06-30 15:20:43 +02:00
Christophe Deschamps
d8389e0ac1 Added calendar sharing of ICS from bubble chat 2022-06-30 12:27:22 +02:00
Christophe Deschamps
b3f9c18f95 Prevent keyboard from hiding description field in conference scheduling view 2022-06-29 13:12:32 +02:00
Christophe Deschamps
9fe2a38455 Admin set/unset notification in conference 2022-06-29 08:52:22 +02:00
Christophe Deschamps
7d9c923a79 Fallback to AS if MaxPart > 6 only if Grid is active 2022-06-23 09:48:40 +02:00
Christophe Deschamps
67e20f3175 4.7.0 Build 4 2022-06-17 11:50:58 +02:00
Christophe Deschamps
7db3a0fe7b Voip Extra buttons background on iOS 12 2022-06-17 09:06:52 +02:00
Christophe Deschamps
89d93ee7d3 Set Deployment target back to 11 2022-06-17 08:47:05 +02:00
Christophe Deschamps
a610640f6f Fixed invalid conference time after conference edition 2022-06-17 08:31:21 +02:00
Christophe Deschamps
f86064d9b0 Added isMe() in adress extension 2022-06-16 17:26:22 +02:00
Christophe Deschamps
e7f3e840ce Display name in missed call when group call 2022-06-16 17:25:55 +02:00
Christophe Deschamps
b2a3077198 Group call creation tunnel fixes & cosmetics 2022-06-16 16:44:31 +02:00
Christophe Deschamps
238b0d3be5 Updated translation + code formatting 2022-06-16 15:51:34 +02:00
Christophe Deschamps
d157ffbd3d Added FR, DE, NL and RU translations from android + added tool to import from android (read me inside) 2022-06-16 13:17:01 +02:00
Christophe Deschamps
0cb680d8a8 Added missing Pods 2022-06-15 18:03:46 +02:00
Christophe Deschamps
524d429960 Merge new UI for Call and Conferences 2022-06-15 17:33:36 +02:00
Christophe Deschamps
54c3d391cb Improve Layout selection of conference 2022-06-15 15:08:30 +02:00
Christophe Deschamps
2f5789a6f6 Update linphone.xcscheme 2022-06-15 11:15:34 +02:00
QuentinArguillere
885b88e1c3 Change available actions for chatrooms. New actions are:
- 1-1: Contact / Mute / Delete / (DEBUG ONLY : chatroom infos)
- Encrypted 1-1: Contact / Devices / Ephemeral / Mute / Delete / (DEBUG ONLY : chatroom infos)
- Group: Infos / Mute / Delete / (DEBUG ONLY : chatroom infos)
- Encrypted Group: Infos / Devices / Ephemeral / Mute / Delete / (DEBUG ONLY : chatroom infos)

Mute action is not yet implemented
2022-06-15 10:07:19 +02:00
Christophe Deschamps
2f673c051d 4.7 (3) 2022-06-15 09:45:00 +02:00
Christophe Deschamps
9dfbcd8aaa Improve conference layout chooser on iPhone 6 2022-06-15 09:31:21 +02:00
Christophe Deschamps
c99352f0b1 Adjusted toast timeout 2022-06-15 08:24:40 +02:00
Christophe Deschamps
36e9bdf745 Added no participants label 2022-06-15 08:12:02 +02:00
Christophe Deschamps
03b14fc239 Updated english texts from Android (Conference -> Meetings) 2022-06-15 08:00:53 +02:00
Christophe Deschamps
aacee0b373 Goto chat from call 2022-06-14 23:20:22 +02:00
Christophe Deschamps
706850f0b9 Fix locallyPause view in conference 2022-06-14 22:35:07 +02:00
Christophe Deschamps
95449cc7c5 Display timer on outgoing call view 2022-06-14 22:18:59 +02:00
Christophe Deschamps
be80f0d342 Square miniature for active speaker 2022-06-14 21:57:55 +02:00
Christophe Deschamps
8d2ea6d037 Hide video button if audio only layout 2022-06-14 18:04:42 +02:00
Christophe Deschamps
0d63c3a14c Big Pause/Play buttons 2022-06-14 17:41:27 +02:00
Christophe Deschamps
faa378c8ea Hide conferences view when active call 2022-06-14 17:16:55 +02:00
Christophe Deschamps
0dfb387fb6 Conference edition 2022-06-14 17:00:51 +02:00
Christophe Deschamps
df6834beae Adjusted icon size for group call 2022-06-14 12:48:52 +02:00
Christophe Deschamps
5cfda32547 - Added small padding to back/next navitation buttons
- filtered out instant group calls from conference menu
2022-06-14 12:38:51 +02:00
Christophe Deschamps
0bfa04fce6 Added organiser into conference history detail 2022-06-14 12:28:18 +02:00
Christophe Deschamps
80c4b2e45e Remote mute indication 2022-06-14 12:05:57 +02:00
Christophe Deschamps
2f48008050 Group call from group chat 2022-06-14 11:47:12 +02:00
Christophe Deschamps
18910129b5 Update project.pbxproj for new classes 2022-06-13 19:58:08 +02:00
Christophe Deschamps
770c9252a2 xcodebuild fix on m1 chips 2022-06-13 19:22:39 +02:00
Christophe Deschamps
4e7db0c33e Update gitlabCI to use macmini-m1-xcode13 runner 2022-06-13 19:19:00 +02:00
Christophe Deschamps
876f22da36 Audio only layout & assorted fixes 2022-06-13 18:45:59 +02:00
Christophe Deschamps
ecad9c86b3 Incoming calls from Conference serveur handling - (CallKit) 2022-06-10 17:42:30 +02:00
Christophe Deschamps
64d33a67fb Pause label remove from active speaker stickers, et add spacing on grid ones 2022-06-10 12:21:53 +02:00
Christophe Deschamps
e8274983cd Join conference from history 2022-06-10 11:48:16 +02:00
Christophe Deschamps
cc4d8c8fe7 Add call padding 2022-06-10 11:32:04 +02:00
Christophe Deschamps
12e623e176 Change burger icon in call's list actions 2022-06-10 11:26:47 +02:00
Christophe Deschamps
8c9772ae4b Match Record button style with Pause button style 2022-06-10 11:16:19 +02:00
Christophe Deschamps
698bb7882a First/Last to join conference
Support simulator for play pause
Removed unused code (chat room access in conference)
2022-06-10 11:07:58 +02:00
Christophe Deschamps
8c66c4f96a - Updated scheduling/group call tunnel
- Synchronized ConferenceViewModel with Android
2022-06-09 11:51:39 +02:00
QuentinArguillere
44df5523ef Update changelog to include releases up to 4.6.4 2022-06-07 16:59:09 +02:00
QuentinArguillere
fe56c6d946 Fix crash that would occur when typing too fast in the chatroom creation search bar (race condition), and fix possible infinite loop when having some specific conditions in the phone contacts 2022-06-07 16:53:12 +02:00
QuentinArguillere
7caecad1fb Use the account’s identity rather than a generic hard coded string as basis when synchronizing params. This fixes the loss of “sips” identity when exiting the settings menu. 2022-06-07 16:52:16 +02:00
QuentinArguillere
877483201c Avoid potential crash in canAdmniEphemeral chatroom function 2022-06-07 16:48:22 +02:00
Christophe Deschamps
601a1450ea Fix account not persisted after login into linphon 2022-06-07 16:47:45 +02:00
QuentinArguillere
f762c8b018 Create a new French translation file form scratch 2022-05-25 15:39:14 +02:00
QuentinArguillere
dadd035bb2 fix french translation for 'about' view 2022-05-25 12:07:35 +02:00
QuentinArguillere
03f4bd62d2 replace '^M' end of lines with '\r' 2022-05-25 12:03:13 +02:00
QuentinArguillere
2a7260ed38 Revert 'help us translate' section in localizable strings 2022-05-25 11:18:21 +02:00
Christophe Deschamps
756bd123ea - Avoids reloading chat messages table view without reloading data first
- Removes redundant chat message reloading in configureForRoom
2022-05-23 09:54:49 +02:00
Christophe Deschamps
1a9c6060c2 Stop voice recording in progress if any before accepting a call 2022-05-20 09:22:06 +02:00
Christophe Deschamps
f33ed2f7f9 Accomodate SDK update 2022-05-15 21:56:04 +02:00
Christophe Deschamps
1f2aa259be Various conference adjustments 2022-05-15 21:55:40 +02:00
Christophe Deschamps
deb4fbb71e Preserve Call VC Single Instance in case of cache cleaning 2022-05-15 21:55:19 +02:00
Christophe Deschamps
f396cdf5a4 Fix account not persisted after login into linphon 2022-05-15 21:54:39 +02:00
Christophe Deschamps
bd1ea4a5e3 My Conferences view 2022-05-13 17:26:21 +02:00
Christophe Deschamps
176cfd8b4b Fix multiple instance of call view
Added further debug details
2022-05-13 11:22:09 +02:00
Christophe Deschamps
0ee549f5e2 Added more debug info 2022-05-13 09:20:01 +02:00
Christophe Deschamps
1c8fdb1924 Remove observers before reloading grid/as participants of a conference 2022-05-12 20:35:40 +02:00
Christophe Deschamps
9581d88f09 Fix Conference invitation sometime not displaying in chat thread 2022-05-12 14:19:52 +02:00
Christophe Deschamps
137eb6de29 Set appropriate visibility of Conference layout 2022-05-11 18:46:26 +02:00
Christophe Deschamps
d0d3f2e403 Update video window of conference participants upon stream availabililty 2022-05-11 14:48:14 +02:00
Christophe Deschamps
e9a960ec30 SDK upadte + 4.7 build2 2022-05-11 10:37:36 +02:00
Christophe Deschamps
e0af3af18b Various conference adjustments 2022-05-11 10:36:20 +02:00
Christophe Deschamps
8c8825790d SDK 5.2.0-alpha.153+9c69668a 2022-05-11 09:50:12 +02:00
Christophe Deschamps
2264103eee Fix active spearker detection method with API 2022-05-11 09:49:48 +02:00
Christophe Deschamps
88713cf1db Update log message 2022-05-10 16:10:20 +02:00
Christophe Deschamps
cf9cfe7b35 Various update on video conference 2022-05-10 11:01:51 +02:00
Christophe Deschamps
3bdab389f1 Update video window visibility 2022-05-09 18:58:34 +02:00
Christophe Deschamps
c844b36a47 Update video button state in conference 2022-05-09 18:04:00 +02:00
Christophe Deschamps
cc472ef0f9 Disable AudioOnly layout chooser for now 2022-05-09 17:56:09 +02:00
QuentinArguillere
e10cb36cad Add “Contact” part in the settings, allowing the addition, deletion and edition of LDAP configurations 2022-05-09 17:51:28 +02:00
QuentinArguillere
6ff68174b1 Update contact list and chat conversation creation view to use magic search 2022-05-09 17:06:25 +02:00
QuentinArguillere
41496d1ee1 Remove includes of linphoneapp-swift.h in *.h files 2022-05-09 17:05:50 +02:00
Christophe Deschamps
8f0bc8e3ea Fix video toggling whilst in conf 2022-05-09 16:30:22 +02:00
Christophe Deschamps
64a290ac4a SDK update & Layout API adjustement on Video Conference 2022-05-09 16:11:11 +02:00
Christophe Deschamps
08ce19533b Default recording device to device microphone when in a call 2022-04-29 11:12:19 +02:00
QuentinArguillere
7553f0b85f Disable reply actions for events that are not ChatMessages 2022-04-27 16:31:42 +02:00
Christophe Deschamps
1d2d6f7605 Use callkit to Pause/Resume 2022-04-25 18:31:07 +02:00
Christophe Deschamps
5c0092351f Renew VFS key if unable to find it 2022-04-15 11:42:07 +02:00
Christophe Deschamps
0ceb1f9043 Fix conference pausing on remote when pausing locally 2022-04-15 11:41:31 +02:00
QuentinArguillere
29266d8ab4 Fix build with SDK master 2022-04-14 11:08:44 +02:00
Christophe Deschamps
5f7b4f3bcd Clear mutable observers to avoid display issues when cell are recycled 2022-03-31 06:15:50 +02:00
Christophe Deschamps
4fb127c135 Fix history details 2022-03-25 18:49:48 +01:00
Christophe Deschamps
59e2343072 Set content mode for video windows to scaleAspectFill 2022-03-25 07:44:33 +01:00
Christophe Deschamps
5adf3d8a3f - Waiting room preferences
- Asymetric video
- Refactorisation
- Conference layout picker in waiting room
2022-03-23 18:42:25 +01:00
Christophe Deschamps
b4d6b8c351 Fix camera switch in swift 2022-03-23 09:13:00 +01:00
Christophe Deschamps
1e45f7d58c Prevent crash when toggling speaker out of call 2022-03-22 18:00:53 +01:00
Christophe Deschamps
64d08445b6 Conference Waiting room view model + outgoing phase for call conference to remain on waiting room 2022-03-22 17:24:43 +01:00
Christophe Deschamps
ce93af2566 SDK update 2022-03-22 17:01:38 +01:00
Christophe Deschamps
e4da04b464 Replace outgoing call view for conference joining by spinner 2022-03-22 12:20:54 +01:00
Christophe Deschamps
f452f010bb ConferenceViewModel updates (aligned with Android) 2022-03-22 10:31:29 +01:00
Christophe Deschamps
38a9e888da GridBoxLayout rework 2022-03-21 18:26:03 +01:00
Christophe Deschamps
4f4d8a2a09 SDK Upda to 5.2.0-alpha.44+75de6a92 2022-03-21 17:23:49 +01:00
QuentinArguillere
c55a0677e2 Replace use of deprecated function “linphone_chat_room_has_been_left” with “linphone_chat_room_is_read_only” 2022-03-21 12:07:51 +01:00
Peio Rigaux
9456e7c229 Revert "Updated version check URL to use new server download.linphone.org in order to save disk space"
This reverts commit f9feac7b5e.
2022-03-15 11:15:55 +01:00
Christophe Deschamps
20a91c776f Allow imdn display on incoming group chat messages 2022-03-10 22:30:28 +01:00
QuentinArguillere
a84760b271 Prevent screen from turning off while recording a voice message 2022-03-08 14:26:43 +01:00
Danmei Chen
9db3531730 fix reply message in basic chat rooms 2022-03-08 14:26:29 +01:00
Danmei Chen
fab524f5d0 fix settings for media encryption: media encryption mandatory uncheck itself if media encryption is none 2022-03-08 14:26:24 +01:00
Danmei Chen
c47580beaf fix dark mode for composeIndicatorView of chatroom 2022-03-08 14:26:13 +01:00
Danmei Chen
2e883b02a3 fix send multiparts message in basic chatroom 2022-03-08 14:26:05 +01:00
Danmei Chen
669a64af46 fix dark mode for SettingsView 2022-03-08 14:26:00 +01:00
Danmei Chen
e9526989e7 fix dark mode for UIChatCreateCollectionViewCell 2022-03-08 14:24:43 +01:00
Danmei Chen
74d3f23a4b fix local conference crash when pausing/resuming 2022-03-08 14:24:36 +01:00
Danmei Chen
34ee6da00b fix contact view : chat with contact and back to contact 2022-03-08 14:24:30 +01:00
Danmei Chen
ed964d8736 fix chatroominfoview crash by reconfiguring the chatroom after entering background puis foreground 2022-03-08 14:24:24 +01:00
Danmei Chen
640cb70ebf fix duplicate push authorization requests on install 2022-03-08 14:24:11 +01:00
Christophe Deschamps
eb26a33d75 Prevent random crash in history removal 2022-03-02 08:58:31 +01:00
Christophe Deschamps
9740a18219 Do not save photos and videos taken from Linphone if auto save to gallery is off 2022-02-24 15:57:21 +01:00
QuentinArguillere
8a86ce82f8 Merge release/4.6 2022-02-09 16:31:48 +01:00
QuentinArguillere
cd9f2d21ca Update changeling for 4.6.0 release 2022-02-09 15:09:11 +01:00
QuentinArguillere
b272c08e9b Fix bug preventing the sending of voice recording messages in some contexts 2022-02-08 16:23:56 +01:00
QuentinArguillere
b8b6344ee0 Fix audio route change issue when enabling a video call before the audio session was activated by call kit 2022-02-08 14:42:19 +01:00
QuentinArguillere
8ea799e1f6 Fixes in the contact editing menu : no longer destroy the “backup” contact when going into the ImagePickerView, and properly allow the “cancel” of modifications after changing a contact avatar 2022-02-08 14:28:10 +01:00
QuentinArguillere
e574f00415 Fix crash in basic chatrooms 2022-02-07 11:05:04 +01:00
Christophe Deschamps
ba64e81d61 Manual download fixes 2022-02-04 15:40:50 +01:00
Christophe Deschamps
4c0530ea9b Color notch 2022-02-04 15:40:43 +01:00
Christophe Deschamps
190a7d83e1 Manual download fixes 2022-02-04 15:36:14 +01:00
Christophe Deschamps
dbf1859657 Color notch 2022-02-04 14:43:41 +01:00
Christophe Deschamps
df1b24f86b Send message text separately from attachements in basic chat rooms 2022-02-04 12:30:39 +01:00
Christophe Deschamps
8890395fa0 Send message text separately from attachements in basic chat rooms 2022-02-04 12:29:44 +01:00
Christophe Deschamps
d4d3f95b96 Use of imageWithContentsOfFile to reduce image size
Added a cache for height calculation (until chat bubble are moved to autolayout)
Added a cache for images to reduce memory footprint
2022-02-04 11:55:58 +01:00
Christophe Deschamps
d1f57d4f3c Use of imageWithContentsOfFile to reduce image size
Added a cache for height calculation (until chat bubble are moved to autolayout)
Added a cache for images to reduce memory footprint
2022-02-04 11:55:19 +01:00
Christophe Deschamps
a9e4c40f92 Fixes notification actions not showing
Checks notifiction allowed at every app becom active
Added error message if notifications are not allowed
2022-02-04 09:35:52 +01:00
Christophe Deschamps
8a3030d4fb Fixes notification actions not showing
Checks notifiction allowed at every app becom active
Added error message if notifications are not allowed
2022-02-04 09:34:16 +01:00
Christophe Deschamps
5374471827 Fix pod installation warning 2022-02-03 18:21:21 +01:00
QuentinArguillere
528ed943ed Update pod file 2022-02-03 18:11:33 +01:00
QuentinArguillere
f05416af2b Fix login from non-linphone account button being accessible without accepting the conditions 2022-02-03 18:03:20 +01:00
QuentinArguillere
9dcd761b6d Fix crash when opening chatroom with a different orientation than the one it was previously on before going into background 2022-02-03 11:14:39 +01:00
QuentinArguillere
fd9a110c8f [WIP] Add information screen when logging through a non-linphone sip account to inform that several features will be missing 2022-02-02 16:15:27 +01:00
QuentinArguillere
e9666f588e Add link to translate in the “about” view 2022-02-01 17:54:55 +01:00
Christophe Deschamps
a2112ba9f0 Bulk video conference adjustements 2022-02-01 10:10:33 +01:00
QuentinArguillere
3bed20a221 Fix ephemeral messages on device mode 2022-01-31 15:54:57 +01:00
QuentinArguillere
2c8a87f8bc Add a floating “scroll to bottom” button in the corner of chat conversation when scrolling up. Also, instead of always scrolling to the bottom of the chat conversation when receiving a new message, a “unread message count” badge is added on the scroll down button to notify that new messages are available. 2022-01-28 12:07:08 +01:00
QuentinArguillere
fb82e69db3 Remove the intermediate confirmation window when sharing something from outside the app 2022-01-26 11:05:29 +01:00
QuentinArguillere
2291d70411 Fix sharing from outside of the application 2022-01-25 17:16:16 +01:00
QuentinArguillere
dfded88404 Add “reply” action when swiping left to right on chat messages 2022-01-25 17:15:47 +01:00
QuentinArguillere
9d2589535b Fix chat bubble to have both clickable hypertext links AND popup menu for reply/transfer actions 2022-01-25 16:01:06 +01:00
QuentinArguillere
a6fb4e42b7 Fix log directory so that the app extension logs are written in the same files as the application log 2022-01-21 16:35:14 +01:00
Christophe Deschamps
ee8acb5e16 Make links clickable in chat bubbles 2022-01-21 12:04:16 +01:00
QuentinArguillere
9b77cea175 Revert "Add an equivalence between “sips:” uri and TLS transport in the account settings"
This reverts commit 7c3e20cd54.
2022-01-21 12:04:16 +01:00
Christophe Deschamps
cfecd42524 Make links clickable in chat bubbles 2022-01-21 08:50:45 +01:00
Christophe Deschamps
308f47ad97 Fix duration display on mkv voice memos 2022-01-19 18:28:01 +01:00
Christophe Deschamps
82a013c23e SDK Update 2022-01-19 18:27:30 +01:00
Christophe Deschamps
234152a2f9 Fix duration display on mkv voice memos 2022-01-19 18:27:12 +01:00
Christophe Deschamps
69a885df4f Bulk refactorisation + new ConferenceViewModel from Android + Bulk fixes 2022-01-12 10:28:22 +01:00
QuentinArguillere
14f61e3cef Enable CPIM in basic chatrooms for linphone accounts 2022-01-10 12:07:51 +01:00
Simon Morlat
d6a8209e85 Use mkv files instead of wav (for disk space usage). 2022-01-07 15:33:31 +01:00
QuentinArguillere
462a79b22a After the SDK changes to IOS audio routes, we now update bluetooth availability flag in “onAudioDevicesListUpdated” callback, and we manually set the route to bluetooth when starting calls with an available bluetooth device (this allows the overriding, from the App, of the core.defaultOutputDevice settings for the SDK) 2022-01-05 11:42:54 +01:00
QuentinArguillere
f3212343d7 Update version to 4.6.0 2022-01-04 14:38:32 +01:00
Christophe Deschamps
306162228e Revert "Video conference and new Call Views"
This reverts commit 608577034d.
2022-01-04 12:27:14 +01:00
Christophe Deschamps
e23a4a7951 Revert "Conference creating/scheduling"
This reverts commit 5f640551dd.
2022-01-04 12:27:03 +01:00
Christophe Deschamps
e5831781fc APPLICATION_EXTENSION_API_ONLY=YES on all flavors 2022-01-04 12:26:55 +01:00
Christophe Deschamps
7c44c5f9bf Additional harnessing on VFS activation 2022-01-04 12:26:44 +01:00
Christophe Deschamps
e4fe4607a4 Make chatroom deletion waiting modal to prevent crash 2022-01-04 12:26:24 +01:00
Christophe Deschamps
0afc2036d6 APPLICATION_EXTENSION_API_ONLY=YES on all flavors 2022-01-04 12:04:46 +01:00
Christophe Deschamps
be282ff47b Additional harnessing on VFS activation 2021-12-17 11:45:41 +01:00
Christophe Deschamps
5f640551dd Conference creating/scheduling 2021-12-03 19:26:35 +01:00
Christophe Deschamps
615f8f612d Option to use device ring tone for callkit ring 2021-11-29 18:55:01 +01:00
Christophe Deschamps
608577034d Video conference and new Call Views 2021-11-26 19:10:22 +01:00
Julien Wadel
41069f27db Avoid ending ring all other end point on incoming call while being in OS DND mode (that is not the presence mode) - RFC 3261.
Reason.DoNotDisturb send a 600 = "Busy Everywhere", Reason.Busy send a 486 = "Busy Here"
2021-11-26 17:32:15 +01:00
Peio Rigaux
f9feac7b5e Updated version check URL to use new server download.linphone.org in order to save disk space 2021-11-12 18:50:28 +01:00
Christophe Deschamps
e2dc4dad8b Added border to file attachement icons in reply bubbles 2021-10-05 08:22:34 +02:00
Christophe Deschamps
3ab4afd23a Fix scrolling on reply messages with attachements only 2021-10-05 07:37:28 +02:00
Christophe Deschamps
ce97c85cc8 Fix display of file attachment icons in reply bubbles 2021-10-05 07:16:44 +02:00
QuentinArguillere
7c3e20cd54 Add an equivalence between “sips:” uri and TLS transport in the account settings 2021-09-21 15:07:31 +02:00
QuentinArguillere
b2d7738704 Stop hiding assistant view after a successful configuring 2021-09-17 11:17:36 +02:00
Christophe Deschamps
4dd347a297 Merge branch 'master' of gitlab.linphone.org:BC/public/linphone-iphone 2021-09-17 10:28:20 +02:00
Christophe Deschamps
bb1d160373 Ephemeral messages in session mode 2021-09-17 10:28:14 +02:00
QuentinArguillere
41cfad6ad8 After configuring, set the new account(s) pn provider back to 'apns.dev' or 'apns' depending on the buildwq 2021-09-16 17:33:53 +02:00
Christophe Deschamps
ea03700aba Chat messages popup menu - Moved icon to right & removed rounding focus 2021-09-16 11:41:10 +02:00
Christophe Deschamps
6e0c86e632 Merge branch 'master' of gitlab.linphone.org:BC/public/linphone-iphone 2021-09-16 10:33:53 +02:00
Christophe Deschamps
de4684199e - Notify LinphoneCallUpdate on call back thread
- Fix "no more call" detection to dismiss call views within call call back itself.
2021-09-16 10:29:26 +02:00
Christophe Deschamps
8183282466 New conference API & Participant list in Guest conf merge 2021-09-16 09:41:23 +02:00
QuentinArguillere
b6aefc2de9 Fix potential crash, and hide the account link menu if there is no account 2021-09-15 17:29:55 +02:00
Christophe Deschamps
0d55c0ca2f Copy/Transfer/Reply feature for chat messages 2021-09-15 17:28:59 +02:00
Christophe Deschamps
ccbf220270 - Use the new conference call API
- Displays participants when joining a conference call as a guest
2021-09-15 17:13:39 +02:00
Christophe Deschamps
ef744eb068 0009252: ios Build 7 - Non prise en compte de la suppression des notifications dans un groupe de discussion 2021-09-09 10:22:44 +02:00
Christophe Deschamps
8413ae5518 Added basic video playback on recordings (similar to Android) 2021-09-09 10:20:34 +02:00
Christophe Deschamps
1ca9e0379c Avoid 'Browse' step when sharing a document in chat. (migration to UIDocumentPickerViewController) 2021-09-07 09:36:20 +02:00
Christophe Deschamps
b3a5168191 Re-enable voice play button in chat after call ending 2021-09-03 08:41:33 +02:00
Christophe Deschamps
04aded6a48 Disable voice recording function when in call 2021-09-03 08:32:26 +02:00
Simon Morlat
8a8ea78fc4 Show a dialog to requet the user to grant the local network permission.
This is required for ICE to operate correctly.
If not granted, SDK 5.0.16 will automatically disable ICE.
2021-09-02 15:48:58 +02:00
QuentinArguillere
2f24e77bb6 Set core push notification enabled to match the value in “proxy”=>”push_notification_allowed”, to match the sdk 2021-07-28 16:50:40 +02:00
Christophe Deschamps
e23f80ca51 Do not attempt to send message if network connection is missing 2021-07-27 14:56:54 +02:00
Christophe Deschamps
3dc747cf6e Size adjust when recording & picture only 2021-07-26 10:16:51 +02:00
Christophe Deschamps
7968c65055 Fix Chat bubble size with only text, or text with single attcht 2021-07-26 09:50:16 +02:00
Christophe Deschamps
17a4580d16 adjust chat bubble size when only VR & Text 2021-07-25 22:18:54 +02:00
Christophe Deschamps
aa4b7e5554 Fix incoming picture with no text display 2021-07-25 01:24:33 +02:00
Christophe Deschamps
77f096a38d Chat messages icons adjustements for auto-download off & imageDrawer 2021-07-23 23:18:41 +02:00
Christophe Deschamps
daadc1023a File icons in chat 2021-07-23 16:22:02 +02:00
Christophe Deschamps
b66c3ad916 Audio chat messages 2021-07-23 12:06:05 +02:00
Christophe Deschamps
bcf19d6742 SDK Update 5.1.0-alpha.11+950fc62 2021-07-21 10:11:43 +02:00
QuentinArguillere
ebbc05bf6a Redirect to weblate rather than transitex in the readme 2021-07-08 16:49:18 +02:00
Danmei Chen
0f50d114bb add some translations 2021-07-08 16:28:18 +02:00
Danmei Chen
88e807c529 migration all images from cacheDirectory to imagesDirectory, to avoid automaic clear of cache 2021-07-08 11:42:39 +02:00
Danmei Chen
68860ba25f add logs for remove item and move log file to dataPath 2021-07-06 17:41:09 +02:00
QuentinArguillere
55027dbc82 Add a check to avoid going back to DialerView if we’ve been started through a push notification and are already in a chatroom at startup (and a bit of tab/line reformatting) 2021-07-02 17:44:20 +02:00
QuentinArguillere
96787efe4c Move the currentCallContextBeforeGoingBackground from LinphoneManager to CallManager. When answering a callkit call, if app is not on foreground, disable the camera and save the call context in the CallManager to re-enable it when we return to foreground. 2021-07-02 15:33:25 +02:00
QuentinArguillere
2becb86ab9 Fix bug where the “previous” button in the contact details would always return to the contacts list, even though we could have come from the call history details 2021-07-02 15:14:44 +02:00
QuentinArguillere
e4ea67b716 Save accept terms state in the config 2021-07-02 15:14:44 +02:00
Danmei Chen
fc4f6fa658 fix cell background color 2021-07-02 09:46:43 +02:00
Danmei Chen
4216ecdc13 fix devices list can not do call 2021-07-01 17:40:42 +02:00
Danmei Chen
7936214997 end call when registration failed 2021-06-29 20:12:08 +02:00
Danmei Chen
ed0fe3bb69 fix not end callkit when registration failed due to network reason 2021-06-29 15:16:25 +02:00
QuentinArguillere
15ff3fd9a6 Destroy chatroom objective C object when entering background to avoid a crash caused by a callstatechagned event from background 2021-06-29 10:23:24 +02:00
QuentinArguillere
7bafd37081 When enabling the video in a call, we only redirect the sound to speaker if there is not other output device connected 2021-06-25 15:52:15 +02:00
Danmei Chen
a4d2c8342b fix images are gray during upload 2021-06-23 10:53:59 +02:00
Danmei Chen
de3321646f fix multiparts alignment 2021-06-23 10:04:39 +02:00
Christophe Deschamps
942db35732 Prevent VFS from re-generating a key when navigating to chat settings with VFS enabled 2021-06-18 15:34:26 +02:00
Christophe Deschamps
b58b974392 VFS changes :
- Added accessibility attribute to the secure preference key
- Added mechanism to delete any existing key when activating VFS for the first time
- Improved log messages
2021-06-18 09:41:51 +02:00
Christophe Deschamps
7387bf6330 Use logging service for VFS related messages 2021-06-17 12:29:04 +02:00
Christophe Deschamps
1b96a21993 Merge branch 'master' of gitlab.linphone.org:BC/public/linphone-iphone 2021-06-16 21:27:22 +02:00
Christophe Deschamps
82cb8660d7 Move VFS Activation at earlier stage in service notification 2021-06-16 21:26:51 +02:00
QuentinArguillere
55a9850b38 Fix a crash that could happen when changing view while deleting a chatroom 2021-06-16 15:28:56 +02:00
QuentinArguillere
1fde3a87bc Use linphone_event_log_delete_from_database instead of linphone_chat_room_delete_message. 2021-06-16 14:28:43 +02:00
Christophe Deschamps
c90658d1ac Merge branch 'master' of gitlab.linphone.org:BC/public/linphone-iphone 2021-06-14 19:07:09 +02:00
Christophe Deschamps
1390768f53 Create VFS key in keychain with device locked accessibility 2021-06-14 19:07:03 +02:00
QuentinArguillere
d42c8d0053 Change the group chat info popup menu size to match the available features 2021-06-14 16:21:29 +02:00
QuentinArguillere
f489d4747a Group chat info popup menu : reload data to take into account the potential changes with the ephemeral feature being activated or not in the settings, and remove table cell separators continuing further than the actual size of the popup menu 2021-06-14 11:51:21 +02:00
QuentinArguillere
26a14ab5bd Add button to enable/disable ephemeral message feature in the chat conversations 2021-06-14 11:47:47 +02:00
Christophe Deschamps
c0292d9123 Ephemeral messages minor adjustments:
- Improved ephemeral icon placement in ChatList
- Display ephemeral information on incoming messages in chat room
- Added duration of expiration to LinphoneEventLogTypeConferenceEphemeralMessageEnabled
2021-06-14 11:08:00 +02:00
QuentinArguillere
f0c5c07341 Check that address was successfully created before unreferencing it 2021-06-09 16:58:05 +02:00
Danmei Chen
64ac2c6871 hide ephemeral feature 2021-06-08 11:37:17 +02:00
Christophe Deschamps
372ac02eb8 Ephemeral indicator inside chat list view 2021-06-07 19:16:38 +02:00
QuentinArguillere
1cb6c12ad4 Fix bug when checking if a password confirmation popup should appear 2021-06-04 17:00:22 +02:00
QuentinArguillere
c58b9784e6 Fix bugs when exiting account params : potential crash when setting the route addresses, and losing the auth info’s algorithm 2021-06-04 16:59:49 +02:00
Christophe Deschamps
a05064edaf Ephemeral messages 2021-06-03 09:53:46 +02:00
QuentinArguillere
173d957914 Remove old code that prevented from registering for remote push notification when starting linphone from background, and fix a bug where deactivating the push notification for a specific account wasn’t saved when going restarting the app 2021-05-28 15:02:20 +02:00
QuentinArguillere
fbf2b92f6b Set the account creator backend to 0 (xmlrpc) in the linphone RC factory to avoid having people switching to flexiapi by default when updating linphone iphone to new version 2021-05-27 15:45:25 +02:00
QuentinArguillere
1153a0a0e8 Fix onCallStateChanged callback that could use a nil address when searching for a contact name 2021-05-27 12:09:44 +02:00
Danmei Chen
edea29fd49 fix vfs display 2021-05-26 11:08:07 +02:00
Christophe Deschamps
9c27bcc0df Enable VFS in app extensions via Keychain sharing 2021-05-26 11:08:07 +02:00
Danmei Chen
f47eb4f204 fix unsupported format 2021-05-26 11:08:07 +02:00
Danmei Chen
600fdc1eda fix crash enterforeground with VFS enabled 2021-05-26 11:08:07 +02:00
QuentinArguillere
b627c87d21 Do not print message content in the logs 2021-05-25 15:45:04 +02:00
QuentinArguillere
69c6e93d6f Do not allow push by default in linphonerc-factory 2021-05-25 15:44:44 +02:00
QuentinArguillere
710df1fa41 Cleanup push registration code already done in the sdk 2021-05-25 13:42:40 +02:00
QuentinArguillere
7e3ff94ed1 Properly enable push notifications on core start, and fix typo (true=>pushEnabled) 2021-05-25 13:42:15 +02:00
QuentinArguillere
fa6ba6a8e9 Rename configureProxyConfig to configureAccount, and directly set the correct provider name when creating an account instead of doing it afterwards 2021-05-25 13:41:40 +02:00
QuentinArguillere
fe8e29542c Remove displayIncomingCall(string) 2021-05-25 13:40:59 +02:00
QuentinArguillere
4b0838225e Switch back to xlmrpc backend for account creator, for now. 2021-05-24 11:47:19 +02:00
QuentinArguillere
88970c0e04 Replace bluetoothEnabled and speakerEnabled flags in the CallManager by isBluetoothEnabled and isSpeakerEnabled function, which will give real time state of the API based on what the linphone core getAudioDevice functions returns 2021-05-24 11:45:08 +02:00
QuentinArguillere
5e6329e40d Update account creator url 2021-05-24 11:45:08 +02:00
QuentinArguillere
636e4cd67b Use the linphone functions for audio route management rather than IOS specific ones. Also removed redundant triggers on Speaker and Bluetooth buttons. 2021-05-24 11:45:08 +02:00
QuentinArguillere
7ea46b5aab Replace all proxy configs with account, and include the new push notification features from the 5.0 SDK 2021-05-24 11:45:08 +02:00
Danmei Chen
a1e3989d0a fix compability of display files with previous versions 2021-05-19 14:44:18 +02:00
Danmei Chen
d88641c31c disable VFS for simulators or error case 2021-05-10 16:22:10 +02:00
Danmei Chen
7183116b4b fix leak memory 2021-05-06 17:39:34 +02:00
Danmei Chen
4f33de229f active vfs when change settings 2021-05-05 10:56:20 +02:00
Simon Morlat
7d9329adab Don't pause all calls when receiving a new call. This creates recursions in callkit's logic that cause AudioSession to be lost. Call fulfill() when action is done. 2021-05-04 14:09:14 +02:00
Danmei Chen
831295f680 update password manage lien 2021-05-03 09:05:24 +02:00
Danmei Chen
6ef77ebdaa enable multipart send and recv 2021-05-03 08:44:34 +02:00
Danmei Chen
c9e189e0ae fix create invailid proxy config 2021-04-19 10:55:32 +02:00
Danmei Chen
0161430180 enable display image if vfs not enabled 2021-04-12 18:09:39 +02:00
Danmei Chen
deb245bcec simplify linphonerc 2021-04-08 17:41:57 +02:00
Danmei Chen
2605090212 rework use auto enterBackground and enterForeground 2021-04-08 15:59:07 +02:00
Danmei Chen
eee2ae66f3 use auto iteration 2021-04-08 15:38:08 +02:00
Danmei Chen
aee1b05517 add option to enable VFS 2021-04-08 12:36:37 +02:00
Christophe Deschamps
443152f867 VFS key generation & store/retrieve to/from keystore & pass on to factory if vfs enabled 2021-04-07 11:49:36 +02:00
Danmei Chen
765f449c94 use auto enterBackground and enterForeground 2021-04-07 11:38:20 +02:00
Danmei Chen
e42b2b010e update CHANGELOG 2021-04-06 14:47:10 +02:00
Danmei Chen
9bcf407285 fix build with master 2021-04-06 11:08:55 +02:00
Danmei Chen
8a689af705 hold call before answer another call 2021-03-30 22:17:39 +02:00
Danmei Chen
3dee6c83b5 tag 4.4.0 and use sdk 4.5.0 2021-03-29 17:20:02 +02:00
Danmei Chen
d86a33e435 reset a limit time for Friend list unsubscription 2021-03-29 17:02:01 +02:00
Danmei Chen
03ee02ded8 avoid array mutated while being enumerated 2021-03-29 14:44:20 +02:00
Danmei Chen
01bb34843d update callid for callkit 2021-03-29 10:26:30 +02:00
Danmei Chen
f5aeea9c96 fix conference issue 2021-03-25 20:21:03 +01:00
QuentinArguillere
4c026f68c4 Unsubscribe from friends list when removing and account, and add a small filter to avoid displaying irrelevant authentication requests from previously logged account on the app 2021-03-25 14:51:29 +01:00
Danmei Chen
fa27a5f14b fix translations 2021-03-25 11:51:29 +01:00
Danmei Chen
7237aa729d use xcode12 for gitlab ci job 2021-03-24 18:23:10 +01:00
Danmei Chen
9166fbd4a8 get translations from weblate 2021-03-23 17:49:56 +01:00
Danmei Chen
e4f5dbbe26 add translation for fr 2021-03-23 16:56:28 +01:00
Danmei Chen
a5499efad8 add en for RecordingsListView 2021-03-23 16:24:26 +01:00
Danmei Chen
8d10ccb3b1 Merge branch 'release/4.4' 2021-03-23 16:12:56 +01:00
Danmei Chen
c273564d60 push new translations 2021-03-23 16:05:16 +01:00
Danmei Chen
b5df5110d3 use new api configure audio session 2021-03-23 12:36:59 +01:00
Danmei Chen
7f436ecf40 set default conference_factory_uri 2021-03-23 12:36:09 +01:00
Danmei Chen
164b0f58c3 fix crash enterBackground when current view is DevicesListView 2021-03-23 11:43:36 +01:00
Danmei Chen
565ad48532 avoid overlapping chat cells 2021-03-22 21:10:44 +01:00
Danmei Chen
470e7add1f improve send/recv file 2021-03-18 18:02:31 +01:00
Danmei Chen
b71f35d1b6 fix address label display error 2021-03-17 14:57:27 +01:00
Danmei Chen
a51bee7786 fix create phone number account error display 2021-03-17 09:55:06 +01:00
Danmei Chen
e57a36a950 fix crash of null arrdess 2021-03-16 16:38:31 +01:00
Danmei Chen
2d0af97d23 remove duplicated fileTransferDelegates 2021-03-11 18:01:28 +01:00
Danmei Chen
7d00b0fcd1 fix crash of log 2021-03-11 09:58:34 +01:00
Danmei Chen
b5a186a991 try to fix crash for recordingFilePathFromCall 2021-03-10 15:12:02 +01:00
Danmei Chen
ccf78595cb try to fix stop_and_destroy twice the same file transfer 2021-03-09 17:22:28 +01:00
Danmei Chen
ec829e80ad fix auto_write_to_gallery_mode 2021-03-09 16:51:18 +01:00
Danmei Chen
46fefb6988 display as file if can not load image 2021-03-09 15:05:20 +01:00
Danmei Chen
947ec611de enable auto write to gallery 2021-03-05 22:50:13 +01:00
Danmei Chen
2e2647f043 fix file name 2021-03-05 10:19:34 +01:00
Danmei Chen
8a023fab61 fix send/recv files 2021-03-05 09:37:52 +01:00
Danmei Chen
fd56b1adab fix crash enterbackground when recoding is still played 2021-03-05 09:37:17 +01:00
Danmei Chen
368f1e1810 fix isFirst chat cell not showed correctly 2021-03-05 09:36:15 +01:00
Danmei Chen
317665a90b enable save image/video to Photos 2021-02-25 09:40:23 +01:00
Danmei Chen
f5b683e9d7 rework storage and display files 2021-02-25 09:36:14 +01:00
Danmei Chen
8164a2d944 fix send message 2021-02-23 15:42:16 +01:00
Danmei Chen
bf3d9129e0 fix show app's badge 2021-02-23 15:22:33 +01:00
Danmei Chen
15ae79d561 fix crash restart app when current view is ChatConversationInfoView 2021-02-22 15:35:51 +01:00
Danmei Chen
007bea2eaf fix crash accept video when call is already ended 2021-02-22 14:12:35 +01:00
Danmei Chen
629397d5f6 fix crash when one auth info est nil 2021-02-22 11:45:49 +01:00
Danmei Chen
13acb88907 ipad: fix crash for restart app when current view is chat and receive image in the same time 2021-02-19 19:18:01 +01:00
Danmei Chen
5cfa7933a8 avoid send image with empty text to avoid crash 2021-02-17 09:31:06 +01:00
Danmei Chen
c67a3fbd99 fix assistantview for dark mode 2021-02-16 11:32:41 +01:00
Danmei Chen
dc60be7eda core is stopped when call is released 2021-02-15 20:20:05 +01:00
Danmei Chen
71a9b8ef41 fix crash when parse recording file failed, may changed phone language 2021-02-15 11:26:32 +01:00
Danmei Chen
faa4e15462 add checkbox for accept terms of use and privacy policy 2021-02-15 11:24:53 +01:00
Danmei Chen
9dd1e92821 fix chat cell not work 2021-02-08 14:41:10 +01:00
Danmei Chen
5a30382991 rewrite log service 2021-01-29 17:32:14 +01:00
Christophe Deschamps
e7cc4e922f Added numpad on outgoing call view if early media 2021-01-22 07:57:49 +01:00
Danmei Chen
b62fe18ff3 Revert "fix workaround for incoming call"
This reverts commit 244d580bf8.
2021-01-20 14:21:37 +01:00
Danmei Chen
bf33513300 fix not found display name of message 2021-01-15 18:27:54 +01:00
Danmei Chen
779c939e78 tag beta 4.4.0 (1) 2021-01-07 21:26:37 +01:00
Danmei Chen
f8dda2f1a7 fix switch video 2021-01-05 14:51:37 +01:00
Danmei Chen
7e6a0f9e75 fix build 2021-01-04 17:41:17 +01:00
Danmei Chen
244d580bf8 fix workaround for incoming call 2021-01-04 17:22:24 +01:00
QuentinArguillere
daf5fba2d0 Fix crash caused by use of linphoneAddress variable after destroying it 2021-01-04 17:22:14 +01:00
Danmei Chen
9f01c08aa4 fix build 2021-01-04 17:21:53 +01:00
Danmei Chen
894367f33b use new delegates 2021-01-04 17:21:21 +01:00
Danmei Chen
98449ef104 update api 2021-01-04 17:19:52 +01:00
Danmei Chen
1492e59dca update sdk to 4.5.0 2021-01-04 17:19:26 +01:00
Danmei Chen
4bf9105c30 support weblate translations 2020-12-03 21:33:01 +01:00
Christophe Deschamps
4908f4d96d Revert "Avoid spawning the call if no proxy config are configured"
This reverts commit 87f3c62e64.
2020-12-02 12:00:10 +01:00
Christophe Deschamps
87f3c62e64 Avoid spawning the call if no proxy config are configured 2020-12-02 11:38:14 +01:00
Christophe Deschamps
698c4066a9 Added sips support + automatic calling when sip or sips uri is clicked 2020-12-02 10:37:25 +01:00
Christophe Deschamps
43f303fa43 This commit modifies the way Linphone reports the calls to CallKit :
- Instead of reporting the Display name inside the remoteHandle of CXCallUpdate it now reports the SIP URI
- The display name is now inserted into localizedCallerName

The benefit of doing this is that is that it enables calling from the Phone Call History, and it is required if tel URI are activated (unless calls are not reported in phone history)

This commit also enables the ability to place calls using Linphone by long pressing tel URIs.
2020-12-02 01:18:18 +01:00
Danmei Chen
537cda59aa improve callkit 2020-11-25 22:50:00 +01:00
Christophe Deschamps
4cc09f5428 0008093: [Urgent] Critical issue with original provisioning URL being re-accessed 2020-11-19 10:51:04 +01:00
Danmei Chen
1ff46fe25f terminate callkit when register failed or cleared 2020-10-30 16:37:50 +01:00
Simon Morlat
dccab97503 Remove location permission request, since liblinphone no longer needs to read the wifi SSID. 2020-10-22 17:39:38 +02:00
Danmei Chen
8face6c0ca disable encrpted chat button and update sdk to 4.4.3 2020-10-21 16:59:23 +02:00
Danmei Chen
4c83d285cf update sdk to 4.4.2 and tag beta 4.3.2(19) 2020-09-29 10:51:55 +02:00
Danmei Chen
8638dea085 fix button inside a cell in UITableView not work 2020-09-28 10:42:52 +02:00
Danmei Chen
a8cd49c741 fix workaround: can not delete image 2020-09-25 14:53:37 +02:00
Danmei Chen
bd29182dd2 decline call with busy reason 2020-09-22 18:59:27 +02:00
Danmei Chen
47a16429ae fix send chat message in background 2020-09-18 11:17:39 +02:00
Danmei Chen
68023ef595 fix can not send docx files 2020-09-15 10:57:14 +02:00
Danmei Chen
360e0ac79b tag beta 4.3.2(7) 2020-09-03 16:00:41 +02:00
Danmei Chen
67a3899ffb fix auto-download 2020-09-03 12:02:38 +02:00
Danmei Chen
895d50adb4 fix lost of son when audio route changed 2020-09-02 11:58:43 +02:00
Danmei Chen
cdfeebd241 block button to avoid duplicated fetch remote provisioning 2020-08-20 14:53:17 +02:00
Danmei Chen
ebb3d6a7e0 fix checkbox update 2020-08-06 16:07:36 +02:00
Danmei Chen
1418f81ecc use swift version 5.0 2020-07-30 14:47:01 +02:00
Danmei Chen
caadaa0958 fix outgoing call not connected for callkit 2020-07-24 10:15:51 +02:00
Danmei Chen
2e386351e1 fix can not hold call for OutgoingEarlyMedia 2020-07-21 12:47:01 +02:00
Danmei Chen
cced8b3258 not use nickname as displyname if empty 2020-07-20 11:17:56 +02:00
Danmei Chen
91b0c38a2f fix displayname of incoming call 2020-07-14 18:53:52 +02:00
Danmei Chen
7c1f9968fe update transifex resources 2020-07-06 13:12:28 +02:00
Danmei Chen
7618b03704 update translations 2020-07-06 11:55:38 +02:00
Danmei Chen
a87e625e06 add language Hungarian 2020-07-06 11:35:12 +02:00
Danmei Chen
2d7ec02625 fix crash when go to basic chat room 2020-07-06 11:22:41 +02:00
Danmei Chen
7d14a35da5 fix Incoming call with pushkit 2020-07-01 17:42:47 +02:00
Danmei Chen
eb687a0520 fix Incoming Call 2020-06-30 21:56:56 +02:00
Danmei Chen
82a8a8689c fix badge app icons 2020-06-26 14:51:35 +02:00
Danmei Chen
21156a7746 update sdk to release/4.4 and tag beta 4.3(61) 2020-06-23 13:59:51 +02:00
Danmei Chen
44dbf13a58 update README.md 2020-06-22 15:57:14 +02:00
Danmei Chen
1a35ffcb12 update CHANGLOG.md for 4.3 2020-06-22 14:59:00 +02:00
Danmei Chen
bb85becf49 request Photo authorization earlier to avoid crash 2020-06-22 11:05:02 +02:00
Danmei Chen
f2b1e7bc29 cache addGroupChatButton when editing 2020-06-22 10:08:59 +02:00
Danmei Chen
99de0f1da3 tag beta 4.3(60) 2020-06-19 18:40:24 +02:00
Danmei Chen
d701e31ef6 ajoust the font of text 2020-06-19 16:23:30 +02:00
Danmei Chen
af2683a2e4 fix translations in Settings 2020-06-19 16:06:31 +02:00
Danmei Chen
5179ac7615 fix Settings' alignement issu of ipad 2020-06-19 15:55:44 +02:00
Danmei Chen
b48704b59d fix change route audio 2020-06-17 13:48:30 +02:00
Danmei Chen
df15b6cd27 hide statusBar after rotation 2020-06-17 11:26:21 +02:00
Danmei Chen
466db3ef07 update copyright 2020-06-17 09:57:37 +02:00
Danmei Chen
ecd80706bc fix speaker enabled 2020-06-16 20:01:36 +02:00
Danmei Chen
6a68a0ad19 fix translation when send invite sms 2020-06-16 17:00:29 +02:00
Danmei Chen
092b003c3a fix translations 2020-06-16 16:47:11 +02:00
Danmei Chen
526b587af7 update transifex 2020-06-16 16:19:41 +02:00
Danmei Chen
9656a0a08c disable send db by default 2020-06-16 14:26:20 +02:00
Danmei Chen
3521745f28 tag beat 4.3(59) 2020-06-16 14:01:54 +02:00
Danmei Chen
9eb004469a fix refer call 2020-06-16 12:30:24 +02:00
Danmei Chen
bbd4ad16c5 fix notification 'Missed call' 2020-06-15 10:36:46 +02:00
Danmei Chen
21fbc51405 fix not display IncomingCall when pushnotification is disabled 2020-06-12 11:34:54 +02:00
Danmei Chen
1b3bc34fca tag beta 4.3(56) 2020-06-11 09:39:41 +02:00
Danmei Chen
29d484ea34 fix crash when remove callbacks 2020-06-10 14:59:00 +02:00
Danmei Chen
f1bc077efa improve autodownload 2020-06-05 16:28:46 +02:00
Danmei Chen
dd762b6714 fix lost of sons 2020-06-04 18:29:51 +02:00
Danmei Chen
e9b39b5423 tag beta 4.3(53) 2020-06-03 21:43:12 +02:00
Danmei Chen
c54948e334 fix crash: configure when lc is off 2020-06-03 21:40:55 +02:00
Danmei Chen
f74a404252 enable send db 2020-06-03 21:39:04 +02:00
Danmei Chen
ae24afbf22 tag beta 4.3(50) 2020-05-29 17:36:46 +02:00
Danmei Chen
785b57c4a7 fix crash because of [UITableView layoutSubviews] 2020-05-29 17:25:41 +02:00
Danmei Chen
6b39af2b00 add code for testing crashlytics 2020-05-29 17:01:27 +02:00
Paul Cartier
8b54fb0f6c fix crash when linphone_core_get_video_device() is NULL 2020-05-27 11:02:34 +02:00
Danmei Chen
c6d0dfb21f tag beta 4.3(48) 2020-05-26 22:27:52 +02:00
Danmei Chen
dd57e366eb fix crash: ChatsListTableView is load before app entering foreground 2020-05-26 21:20:46 +02:00
Danmei Chen
e06da76068 fix crash: IASKAppSettingsView is load before app entering foreground 2020-05-26 19:38:22 +02:00
Paul Cartier
b4d3992d25 put qrcode scan UIView operations in main thread to prevent crash 2020-05-26 16:41:33 +02:00
Danmei Chen
5cf6db0dd9 fix crash: enter background mode when linphonecore off 2020-05-25 18:05:39 +02:00
Danmei Chen
506d7b3703 Revert "fix crash when applicationDidEnterBackground is called twice"
This reverts commit 3e191259aa.
2020-05-25 11:56:34 +02:00
Danmei Chen
69a11ef639 Revert "fix crash when stop lc too early"
This reverts commit 8d54620295.
2020-05-25 11:56:13 +02:00
Danmei Chen
6ad10719a4 tag beta 4.3(46) 2020-05-22 17:06:58 +02:00
Danmei Chen
8d54620295 fix crash when stop lc too early 2020-05-22 16:42:42 +02:00
Danmei Chen
3e191259aa fix crash when applicationDidEnterBackground is called twice 2020-05-22 16:01:28 +02:00
Danmei Chen
88a0d9302d fix crash when send phontos again 2020-05-22 11:50:10 +02:00
Danmei Chen
ee9e1f2b92 tag beta 45 2020-05-22 08:46:03 +02:00
Danmei Chen
2f69199305 fix crash when recive files 2020-05-21 23:13:35 +02:00
Danmei Chen
94d7ef6a79 fix crash when send phontos 2020-05-21 23:03:48 +02:00
Danmei Chen
998e316570 tag beta 4.4 and use sdk 4.4-beta 2020-05-18 18:20:43 +02:00
Danmei Chen
15d1a39c03 fix crash onPresenceChanged 2020-05-18 17:16:36 +02:00
Danmei Chen
48d2d48c3d add target ipad 2020-05-14 21:05:32 +02:00
Paul Cartier
5e82036dbf tag beta 4.3(43) 2020-05-12 10:42:37 +02:00
Paul Cartier
658edc86a6 Prevent crash when openining app after bg call finished
Only happened in the settings view before the call starts
2020-05-11 14:20:37 +02:00
Paul Cartier
2520d5be7f tag beta 4.3(42) 2020-05-07 16:17:16 +02:00
Paul Cartier
a952f7724f Fix fast addr book : callback can be called with tel number or sip uri containing tel number 2020-05-07 16:15:44 +02:00
Paul Cartier
05608ae8fb tag beta 4.3(41) 2020-05-07 11:45:16 +02:00
Danmei Chen
732f044262 fix calls 2020-05-07 10:59:54 +02:00
Paul Cartier
b2c851875a tag beta 4.3(39) 2020-05-05 12:57:38 +02:00
Paul Cartier
03fb8479f4 tag beta 4.3(38) 2020-05-04 16:35:29 +02:00
Danmei Chen
6896a819ca fix int valeur 2020-05-04 15:08:54 +02:00
Paul Cartier
e5957aef2f tag beta 4.3(37) 2020-05-04 14:35:34 +02:00
Paul Cartier
dc3b9fbc9f tag beta 4.3(36) 2020-05-04 14:35:33 +02:00
Paul Cartier
0e8918ae0c userdefaults addressbook add bad address check 2020-05-04 14:35:33 +02:00
Paul Cartier
1f149cd824 Tag beta 4.3(35) 2020-05-04 14:35:32 +02:00
Paul Cartier
83b3725771 Wait for phone contact to be loaded before wrinting to userdefaults 2020-05-04 14:35:32 +02:00
Paul Cartier
6fecd10768 Tag beta 4.3(32) 2020-05-04 14:35:32 +02:00
Paul Cartier
9afdbc5d26 tag beta 4.3(31) 2020-05-04 14:35:31 +02:00
Danmei Chen
05f9fdb15a reduce latency for end call not exist 2020-05-04 14:20:02 +02:00
Danmei Chen
b7fb7f3ce6 fix dark mode for composing message 2020-05-04 09:28:22 +02:00
Paul Cartier
db3495a33d refresh friends from fastaddressbook when going from BG to FG 2020-04-28 16:38:54 +02:00
Paul Cartier
b841f611f2 Tag beta 4.3(30) 2020-04-24 15:21:21 +02:00
Paul Cartier
f18f83364f add back code to refresh view when msg is received in chat room list
view
2020-04-24 15:06:44 +02:00
Paul Cartier
0a09e9ae0e tag beta 4.3(29) 2020-04-24 14:30:42 +02:00
Paul Cartier
e98469ec9c Fix address book UserDefaults 2020-04-24 11:42:20 +02:00
Paul Cartier
a286d457db Display display name instead of address in notif 2020-04-22 15:29:00 +02:00
Danmei Chen
a702c8ffbb fix crash of rotation in background 2020-04-20 11:33:38 +02:00
Danmei Chen
589f8763de reduce app size by using the same sdk 2020-04-19 15:36:24 +02:00
Danmei Chen
ef89cab29b tag beta 4.3(24) 2020-04-17 17:11:02 +02:00
Danmei Chen
a15cb46837 correct spellings 2020-04-17 15:21:26 +02:00
Danmei Chen
a35eaf8217 remove useless code 2020-04-17 11:54:43 +02:00
Danmei Chen
f249caf0c6 fix crash of updating imdn list 2020-04-17 11:36:22 +02:00
Paul Cartier
3e777b5cc2 Use push notif loc-key to display msg in case of failure of service extension
add pn-groupchat-str contract header parameter
2020-04-17 10:16:59 +02:00
Paul Cartier
041c395424 translations 2020-04-17 10:16:58 +02:00
Danmei Chen
7b4427e785 fix end call 2020-04-17 09:32:19 +02:00
Danmei Chen
a0b7dd0dda terminate early failed calls 2020-04-16 19:29:20 +02:00
Danmei Chen
ebc591f6c4 end call not exist 2020-04-16 15:56:50 +02:00
Danmei Chen
54dfce82a7 fix crash of remove null callbacks 2020-04-16 09:12:57 +02:00
Danmei Chen
05de1c3783 fix crash of null chat room 2020-04-16 09:12:57 +02:00
Paul Cartier
9775889ad3 translations 2020-04-15 16:15:43 +02:00
Danmei Chen
44354f4f5e fix calls 2020-04-15 15:09:32 +02:00
Danmei Chen
dca88588d4 fix devices < ios13 can not display incoming call 2020-04-14 20:47:47 +02:00
Danmei Chen
a9952c479d fix repeat outgoing call connected 2020-04-14 20:40:46 +02:00
Danmei Chen
f43ad2d447 fix display anme for calls 2020-04-14 17:37:51 +02:00
Danmei Chen
ce8d0ea359 show all my devices 2020-04-10 17:08:11 +02:00
Paul Cartier
7ed3c5bbf7 handle user notifications in app extension 2020-04-10 17:06:04 +02:00
Danmei Chen
972aabfe05 fix ipad: add contact from HistoryDetailsView 2020-04-07 18:17:22 +02:00
Danmei Chen
8cc619da3b fix IPAD go to chat view from CallView or HistoryDetailsView 2020-04-07 15:56:11 +02:00
Danmei Chen
92815c79cf add crashlytics log for app extensions 2020-04-07 15:27:17 +02:00
Danmei Chen
3c1b675252 add GoogleService-Info.plist for extensions 2020-04-06 17:43:24 +02:00
Danmei Chen
693455a225 use firebase in extensions 2020-04-06 17:38:23 +02:00
Danmei Chen
aa48e7c36c fix auto-download when app is in background 2020-04-04 17:32:06 +02:00
Danmei Chen
9acc53daf0 use new crashlytic sdk 2020-04-03 17:47:41 +02:00
Danmei Chen
d680e7a2e4 fix IPAD go to chat view from ContactDetailView 2020-04-03 10:56:22 +02:00
Danmei Chen
6b8c96348d end incoming call if it does not exist again 2020-04-02 21:26:03 +02:00
Danmei Chen
89598d2497 fix ContactDetailView for ipad when add a new contact 2020-04-02 17:39:47 +02:00
Danmei Chen
15fda66881 fix button color 2020-04-02 16:03:06 +02:00
Danmei Chen
080907dc82 end call if it does nit exist 2020-04-02 11:22:18 +02:00
Danmei Chen
d2a5913d09 fix unkown record name 2020-04-01 20:36:52 +02:00
Danmei Chen
f749195935 set limit to 3 for forbidden push 2020-04-01 17:25:41 +02:00
Danmei Chen
8075595fbe tag beta 4.3.0 (13) 2020-04-01 17:25:03 +02:00
Danmei Chen
cd61f24054 use getLc 2020-04-01 15:08:48 +02:00
Paul Cartier
f5bac47add migrate zrtp_secrets file 2020-04-01 14:33:42 +02:00
Paul Cartier
4d05de7bc9 Temporary fix for notif song of chat room invite and chat room invite
msg
2020-04-01 14:22:54 +02:00
Paul Cartier
da0dcd030b moved app log to sdk logs 2020-04-01 12:06:09 +02:00
Danmei Chen
e58437ecb2 add alert for forbidden push token 2020-03-31 21:42:56 +02:00
Danmei Chen
08654f3144 fix recording button for ipad 2020-03-31 21:42:10 +02:00
Danmei Chen
2423e64fe2 Revert "try to fix crash: linphone_chat_room_get_capabilities"
This reverts commit 763d56a0bc.
2020-03-31 15:14:55 +02:00
Danmei Chen
10432eb1ca try to ensure registered for notification 2020-03-31 13:59:09 +02:00
Danmei Chen
79ed950062 fix video auto accept 2020-03-31 10:32:36 +02:00
Danmei Chen
5982b8cb6d remove useless code 2020-03-30 16:07:40 +02:00
Danmei Chen
6de9ffd2ee add pod for firebase 2020-03-30 12:05:52 +02:00
Paul Cartier
bda65d8a9f Fix token bug and print push payload 2020-03-30 11:22:58 +02:00
Danmei Chen
d7e9cf6234 add logs for pushkit 2020-03-30 11:22:01 +02:00
Danmei Chen
763d56a0bc try to fix crash: linphone_chat_room_get_capabilities 2020-03-30 10:38:57 +02:00
Danmei Chen
0ca42b5d18 use alreadyRegisteredForNotification instead of defaultProxyConfig?.pushNotificationAllowed to fix double calls 2020-03-30 10:01:02 +02:00
Jehan Monnier
80ede4726b improve Notification service logs 2020-03-29 16:29:53 +02:00
Danmei Chen
43d31c1cdb display incoming call when push is disabled 2020-03-27 13:28:37 +01:00
Danmei Chen
8352b7a37f fix double calls 2020-03-27 11:49:41 +01:00
Paul Cartier
5ff4e6a4dd migrate call history db 2020-03-25 09:28:35 +01:00
Paul Cartier
b830262ccd add translations 2020-03-24 16:44:52 +01:00
Paul Cartier
c20948ebf8 remove debug print 2020-03-24 16:07:11 +01:00
Danmei Chen
becd5e2b14 add config hide_linphone_contacts 2020-03-24 11:40:31 +01:00
Danmei Chen
b0e83b970a remove useless code 2020-03-24 09:17:08 +01:00
Paul Cartier
10390bd67a Remove all TODOs 2020-03-23 14:24:40 +01:00
Paul Cartier
6921587447 naming 2020-03-20 16:58:08 +01:00
Paul Cartier
ca38aaa90a update call terminate 2020-03-20 16:13:44 +01:00
Danmei Chen
e0759d7912 set max of calls 10 2020-03-19 19:09:15 +01:00
Danmei Chen
7fdfe63632 fix speaker of call 2020-03-19 14:54:08 +01:00
Danmei Chen
65746e68a1 update readme 2020-03-18 19:17:30 +01:00
Danmei Chen
8fdbf0ba40 fix crash because too much iterate timers 2020-03-18 19:06:33 +01:00
Danmei Chen
61932234d9 fix crash of iterate 2020-03-18 14:50:20 +01:00
Paul Cartier
16c0b59def Activates push notification by default for linphone accounts 2020-03-17 16:15:24 +01:00
Paul Cartier
01b7d920a5 sdk api changes 2020-03-17 15:05:01 +01:00
Paul Cartier
e0e8d35a19 Move iterate timer to swift file 2020-03-17 10:26:05 +01:00
Paul Cartier
179d2718e8 Handle push notification for messages in iOS13 2020-03-16 09:50:15 +01:00
Danmei Chen
bbfe62e108 initiate CI 2020-03-12 16:14:22 +01:00
Danmei Chen
06b461ec5b remove useless scheme and files 2020-03-12 13:04:50 +01:00
Danmei Chen
c893a77d57 set swift default module name 2020-03-11 14:39:42 +01:00
Danmei Chen
a65774698a remove useless code 2020-03-10 15:21:51 +01:00
Danmei Chen
13535fa2c4 fix call not be ended 2020-03-10 13:54:59 +01:00
Danmei Chen
bcb2112ffd set correct pod for firebase 2020-03-09 16:22:05 +01:00
Danmei Chen
0fafe0d16b fix calls 2020-03-09 13:22:43 +01:00
Danmei Chen
ca83b41c52 fix crash of memory leak 2020-03-05 17:37:07 +01:00
Danmei Chen
e7ed8d60bb fix display imcoming call repeatedly 2020-03-05 16:21:41 +01:00
Danmei Chen
b6fe76753e remove useless functions 2020-03-05 13:44:30 +01:00
Danmei Chen
eb1eaeec40 set CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = NO 2020-03-05 13:42:26 +01:00
Danmei Chen
2e2f1dcb73 replace deprecated UIsearchDisplayControl by UISearchControl 2020-03-05 11:51:53 +01:00
Danmei Chen
6a62f35fff files ordered 2020-03-05 10:28:27 +01:00
Danmei Chen
0ce5843ac8 update sdk version and use recommanded settiings of Xcode 2020-03-05 10:11:53 +01:00
Danmei Chen
0730a10d2a fix push notification not received for ios13 2020-03-05 09:51:38 +01:00
Danmei Chen
d4ef51fefa tag beta 4.3.0(1) 2020-03-03 16:44:34 +01:00
Christophe Deschamps
d1614e271e Work around limitation of NSUserDefault 4Mb Size 2020-03-03 16:23:30 +01:00
Danmei Chen
0029f580aa remove files included UIWebView 2020-03-03 14:41:56 +01:00
Danmei Chen
d644c0d60c support dark mode 2020-03-03 13:58:26 +01:00
Danmei Chen
56232de930 enable ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 2020-03-03 12:46:34 +01:00
Danmei Chen
9ae49edc66 fix crash 2020-03-03 11:41:10 +01:00
Danmei Chen
84e71bddb0 fix crash of retain value 2020-03-03 11:41:10 +01:00
Danmei Chen
157922a960 add docs 2020-03-03 11:41:10 +01:00
Danmei Chen
14e0ce4e4f set appData in call 2020-03-03 11:41:10 +01:00
Danmei Chen
da4d9c7215 clear code 2020-03-03 11:41:10 +01:00
Danmei Chen
d159b4cbf1 clear hash maps 2020-03-03 11:41:10 +01:00
Danmei Chen
3d96726934 update Podfile 2020-03-03 11:41:10 +01:00
Danmei Chen
57512d95ee remove useless Tests 2020-03-03 11:40:42 +01:00
Danmei Chen
60652074ce set correct configurations 2020-03-03 11:40:42 +01:00
Danmei Chen
98a7938b86 callkit in Swift 2020-03-03 11:38:26 +01:00
Danmei Chen
c4b5d1207f fix viedoPreview 2020-03-03 10:13:36 +01:00
Danmei Chen
7a4d625fa2 update functions 2020-03-03 10:08:07 +01:00
Paul Cartier
a85e4c9827 Podfile 2020-03-03 10:08:07 +01:00
2620 changed files with 60260 additions and 71911 deletions

27
.gitignore vendored
View file

@ -1,23 +1,8 @@
build-*
*.locuser
.DS_Store
liblinphone-sdk
liblinphone-iphone-sdk*.zip
xcuserdata/
Classes/LinphoneIOSVersion.h
Pods/
Linphone.xcworkspace
Pods
Podfile.lock
GoogleService-Info.plist
xcuserdata/
Pods/
.DS_Store
build
test-reports
WORK
Makefile
OUTPUT
git-clang-format.diff
submodules/tunnel
submodules/binaries/dummy-*.a
linphone-iphone.ipa
TutorialHellowWorld/hello-world.xcodeproj/project.xcworkspace/
diff-format.patch
*.xcscmblueprint
liblinphone-iphone-sdk-*
Linphone.xcodeproj/xcuserdata

99
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,99 @@
# COMMENTED FOR NOW - TODO : ENABLE CALLUI TESTS IN THE CI
# USE ONLY THE release/5.1 VERSION OF THIS FILE FOR NOW
#
#
#
#variables:
# workspace: linphone.xcworkspace
# scheme: linphone
# destination: name=iPhone 13 Pro
# testResult_path: derivedData/Logs/Test
#stages:
# - Build
# - UITests
#before_script:
# - pod install
# - pwd
# - sed 's/fileprivate let tableView =/public let tableView =/g' ./Pods/DropDown/DropDown/src/DropDown.swift > tmp.swift && mv -f tmp.swift ./Pods/DropDown/DropDown/src/DropDown.swift
#Compile & Build:
# stage: Build
# tags: ["macmini-m1-xcode13"]
# before_script:
# - pod install --repo-update
# - pwd
# - sed 's/fileprivate let tableView =/public let tableView =/g' ./Pods/DropDown/DropDown/src/DropDown.swift > tmp.swift && mv -f tmp.swift ./Pods/DropDown/DropDown/src/DropDown.swift
# - xcrun simctl shutdown "$destination" && xcrun simctl erase "$destination"
# script:
# - xcodebuild -workspace $workspace -scheme $scheme -UseModernBuildSystem=YES -destination "$destination" -derivedDataPath derivedData
# after_script: []
#
# stage: build
# tags: [ "macos-xcode13" ]
# script:
# - pod install --repo-update
# - pwd
# - sed 's/fileprivate let tableView =/public let tableView =/g' ./Pods/DropDown/DropDown/src/DropDown.swift > tmp.swift && mv -f tmp.swift ./Pods/DropDown/DropDown/src/DropDown.swift
# - xcodebuild archive -scheme $archive_scheme -archivePath ./$archive_path -configuration Release -workspace ./linphone.xcworkspace -UseModernBuildSystem=YES -destination 'generic/platform=iOS'
# - xcodebuild -exportArchive -archivePath ./$archive_path -exportPath ./$export_path -exportOptionsPlist ./$export_options_plist -allowProvisioningUpdates -UseModernBuildSystem=YES -destination 'generic/platform=iOS'
# artifacts:
# paths:
# - derivedData/Build
# when: always
# expire_in: 2 hour
#after_script:
# - ${TRAINER_EXE} -p $testResult_path/*.xcresult -o $testResult_path/
# - ${XCPARSE_EXE} attachments $testResult_path/*.xcresult results --uti public.image
# - mv $testResult_path/*.xcresult results && mv derivedData/logs.txt results
#Call Views:
# stage: UITests
# tags: ["macmini-m1-xcode13"]
# dependencies: ["Compile & Build"]
# script:
# - xcodebuild test -workspace $workspace -scheme $scheme -sdk iphonesimulator -destination "$destination" -UseModernBuildSystem=YES -testPlan Default -derivedDataPath derivedData | tee derivedData/logs.txt
# artifacts:
# paths:
# - results/*
# when: always
# reports:
# junit:
# - $testResult_path/*.xml
# expire_in: 4 week
variables:
archive_scheme: Linphone
archive_path: Linphone.xcarchive
export_path: Linphone-adhoc-ipa
export_options_plist: Linphone-adhoc.plist
job-ios:
stage: build
tags: [ "macos-xcode15" ]
allow_failure: true
script:
# - pod install --repo-update
- exit 1
# - sed 's/fileprivate let tableView =/public let tableView =/g' ./Pods/DropDown/DropDown/src/DropDown.swift > tmp.swift && mv -f tmp.swift ./Pods/DropDown/DropDown/src/DropDown.swift
# - xcodebuild archive -scheme $archive_scheme -archivePath ./$archive_path -configuration Release -workspace ./Linphone.xcworkspace -UseModernBuildSystem=YES -destination 'generic/platform=iOS'
# - xcodebuild -exportArchive -archivePath ./$archive_path -exportPath ./$export_path -exportOptionsPlist ./$export_options_plist -allowProvisioningUpdates -UseModernBuildSystem=YES -destination 'generic/platform=iOS'
artifacts:
paths:
- $archive_path
- $export_path
when: always
expire_in: 1 week

0
.gitmodules vendored
View file

32
.swiftlint.yml Normal file
View file

@ -0,0 +1,32 @@
disabled_rules:
- trailing_whitespace
opt_in_rules:
- empty_count
- empty_string
excluded:
- Carthage
- Pods
- SwiftLint/Common/3rdPartyLib
line_length:
warning: 150
error: 200
ignores_function_declarations: true
ignores_comments: true
ignores_urls: true
function_body_length:
warning: 300
error: 500
function_parameter_count:
warning: 6
error: 8
type_body_length:
warning: 300
error: 500
file_length:
warning: 1000
error: 1500
ignore_comment_only_lines: true
cyclomatic_complexity:
warning: 15
error: 25
reporter: "xcode"

View file

@ -1,28 +0,0 @@
language: objective-c
osx_image: xcode7.2
env:
global:
- secure: "JPPcWdmNIJiR3YcIwe0LRYce6qDdsiagO+eKKAp7eVk/wD9UHbz96Ms2FFkXxPhRJB1PA6Pf8FpAzIL2YRiJL9jRtKHSvtdF1cSto+57XyBkCsw7PkMVUIxp7fg6Wiwn3H3tucF8jisIkv/Pn7R+9EqePkZSqqu3+ig5AX9ApQ4="
- KIF_SCREENSHOTS=$PWD/Screens
before_install:
- brew update 1>/dev/null
- brew install doxygen nasm yasm optipng imagemagick intltool ninja antlr cmake
- wget --no-check-certificate https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/master/gas-preprocessor.pl
- chmod +x gas-preprocessor.pl
- sudo mv gas-preprocessor.pl /usr/local/bin
- sudo ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
- git submodule update --init --recursive
install:
- ./prepare.py -d x86_64 -G Ninja
- make -j4 -s
- mkdir -p $KIF_SCREENSHOTS
script:
- xctool -project linphone.xcodeproj -scheme linphone -sdk iphonesimulator -destination name='iPhone 6' build 1>/dev/null
- xctool -project linphone.xcodeproj -scheme linphone -sdk iphonesimulator -destination name='iPhone 6' test
after_script:
- ./Tools/imgur_upload.sh

View file

@ -1,309 +0,0 @@
[main]
host = https://www.transifex.com
minimum_perc = 1
[linphone-ios.localizablestrings]
source_lang = en
file_filter = Resources/<lang>.lproj/Localizable.strings
source_file = Resources/en.lproj/Localizable.strings
type = STRINGS
[linphone-ios.aboutviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/AboutView.strings
source_file = Classes/Base.lproj/AboutView.strings
type = STRINGS
[linphone-ios.assistantviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/AssistantView.strings
source_file = Classes/Base.lproj/AssistantView.strings
type = STRINGS
[linphone-ios.assistantviewscreensstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/AssistantViewScreens.strings
source_file = Classes/Base.lproj/AssistantViewScreens.strings
type = STRINGS
[linphone-ios.callincomingviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/CallIncomingView.strings
source_file = Classes/Base.lproj/CallIncomingView.strings
type = STRINGS
[linphone-ios.calloutgoingviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/CallOutgoingView.strings
source_file = Classes/Base.lproj/CallOutgoingView.strings
type = STRINGS
[linphone-ios.callviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/CallView.strings
source_file = Classes/Base.lproj/CallView.strings
type = STRINGS
[linphone-ios.callviewipadstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/CallView~ipad.strings
source_file = Classes/Base.lproj/CallView~ipad.strings
type = STRINGS
[linphone-ios.chatconversationcreateviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ChatConversationCreateView.strings
source_file = Classes/Base.lproj/ChatConversationCreateView.strings
type = STRINGS
[linphone-ios.chatconversationviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ChatConversationView.strings
source_file = Classes/Base.lproj/ChatConversationView.strings
type = STRINGS
[linphone-ios.chatslistviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ChatsListView.strings
source_file = Classes/Base.lproj/ChatsListView.strings
type = STRINGS
[linphone-ios.contactdetailsviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ContactDetailsView.strings
source_file = Classes/Base.lproj/ContactDetailsView.strings
type = STRINGS
[linphone-ios.contactslistviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ContactsListView.strings
source_file = Classes/Base.lproj/ContactsListView.strings
type = STRINGS
[linphone-ios.dialerviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/DialerView.strings
source_file = Classes/Base.lproj/DialerView.strings
type = STRINGS
[linphone-ios.dialerviewipadstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/DialerView~ipad.strings
source_file = Classes/Base.lproj/DialerView~ipad.strings
type = STRINGS
[linphone-ios.firstloginviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/FirstLoginView.strings
source_file = Classes/Base.lproj/FirstLoginView.strings
type = STRINGS
[linphone-ios.historydetailsviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/HistoryDetailsView.strings
source_file = Classes/Base.lproj/HistoryDetailsView.strings
type = STRINGS
[linphone-ios.historylistviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/HistoryListView.strings
source_file = Classes/Base.lproj/HistoryListView.strings
type = STRINGS
[linphone-ios.imageviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ImageView.strings
source_file = Classes/Base.lproj/ImageView.strings
type = STRINGS
[linphone-ios.settingsviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/SettingsView.strings
source_file = Classes/Base.lproj/SettingsView.strings
type = STRINGS
[linphone-ios.sidemenuviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/SideMenuView.strings
source_file = Classes/Base.lproj/SideMenuView.strings
type = STRINGS
[linphone-ios.sidemenuviewipadstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/SideMenuView~ipad.strings
source_file = Classes/Base.lproj/SideMenuView~ipad.strings
type = STRINGS
[linphone-ios.statusbarviewstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/StatusBarView.strings
source_file = Classes/LinphoneUI/Base.lproj/StatusBarView.strings
type = STRINGS
[linphone-ios.tabbarviewstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/TabBarView.strings
source_file = Classes/LinphoneUI/Base.lproj/TabBarView.strings
type = STRINGS
[linphone-ios.uicallconferencecellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UICallConferenceCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UICallConferenceCell.strings
type = STRINGS
[linphone-ios.uicallpausedcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UICallPausedCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UICallPausedCell.strings
type = STRINGS
[linphone-ios.uichatbubblephotocellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatBubblePhotoCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatBubblePhotoCell.strings
type = STRINGS
[linphone-ios.uichatbubbletextcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatBubbleTextCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatBubbleTextCell.strings
type = STRINGS
[linphone-ios.uichatcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatCell.strings
type = STRINGS
[linphone-ios.uichatcreatecellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatCreateCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatCreateCell.strings
type = STRINGS
[linphone-ios.uiconfirmationdialogstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIConfirmationDialog.strings
source_file = Classes/LinphoneUI/Base.lproj/UIConfirmationDialog.strings
type = STRINGS
[linphone-ios.uicontactcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIContactCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIContactCell.strings
type = STRINGS
[linphone-ios.uicontactdetailscellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIContactDetailsCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIContactDetailsCell.strings
type = STRINGS
[linphone-ios.uihistorycellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIHistoryCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIHistoryCell.strings
type = STRINGS
[linphone-ios.inappsettingsaccountstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Account.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Account.strings
type = STRINGS
[linphone-ios.inappsettingsadvancedstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Advanced.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Advanced.strings
type = STRINGS
[linphone-ios.inappsettingsaudiostrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Audio.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Audio.strings
type = STRINGS
[linphone-ios.inappsettingscallstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Call.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Call.strings
type = STRINGS
[linphone-ios.inappsettingsnetworkstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Network.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Network.strings
type = STRINGS
[linphone-ios.inappsettingsrootstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Root.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Root.strings
type = STRINGS
[linphone-ios.inappsettingstunnelstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Tunnel.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Tunnel.strings
type = STRINGS
[linphone-ios.inappsettingsvideostrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Video.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Video.strings
type = STRINGS
[linphone-ios.shopviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ShopView.strings
source_file = Classes/en.lproj/ShopView.strings
type = STRINGS
[linphone-ios.assistantlinkviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/AssistantLinkView.strings
source_file = Classes/Base.lproj/AssistantLinkView.strings
type = STRINGS
[linphone-ios.countrylistviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/CountryListView.strings
source_file = Classes/Base.lproj/CountryListView.strings
type = STRINGS
[linphone-ios.inappsettingschatstrings]
source_lang = en
file_filter = Settings/InAppSettings.bundle/<lang>.lproj/Chat.strings
source_file = Settings/InAppSettings.bundle/en.lproj/Chat.strings
type = STRINGS
[linphone-ios.uichatconversationinfotableviewcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatConversationInfoTableViewCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatConversationInfoTableViewCell.strings
type = STRINGS
[linphone-ios.uichatconversationimdntableviewcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatConversationImdnTableViewCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatConversationImdnTableViewCell.strings
type = STRINGS
[linphone-ios.uichatcreatecollectionviewcellstrings]
source_lang = en
file_filter = Classes/LinphoneUI/<lang>.lproj/UIChatCreateCollectionViewCell.strings
source_file = Classes/LinphoneUI/Base.lproj/UIChatCreateCollectionViewCell.strings
type = STRINGS
[linphone-ios.chatconversationinfoviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ChatConversationInfoView.strings
source_file = Classes/Base.lproj/ChatConversationInfoView.strings
type = STRINGS
[linphone-ios.chatconversationimdnviewstrings]
source_lang = en
file_filter = Classes/<lang>.lproj/ChatConversationImdnView.strings
source_file = Classes/Base.lproj/ChatConversationImdnView.strings
type = STRINGS

View file

@ -3,20 +3,341 @@ All notable changes to this project will be documented in this file.
Group changes to describe their impact on the project, as follows:
Added for new features.
Changed for changes in existing functionality.
Deprecated for once-stable features removed in upcoming releases.
Removed for deprecated features removed in this release.
Fixed for any bug fixes.
Security to invite users to upgrade in case of vulnerabilities.
Added for new features.
Changed for changes in existing functionality.
Deprecated for once-stable features removed in upcoming releases.
Removed for deprecated features removed in this release.
Fixed for any bug fixes.
Security to invite users to upgrade in case of vulnerabilities.
## [6.1.0] - 2025-12-08
### Added
- LDAP and CardDAV settings
- Advanced settings in third-party SIP account login view
- Phone number calls in contact details
- Recording player
- Recording list
- Automatic Git commit, branch, and tag info for Help views
- Message deletion feature
- Message editing feature
### Changed
- Launch Screen (Splash Screen)
- Updated translations from Weblate
- Updated SPM dependencies
- Disabled meetings view when audio/video conference factory address is missing
- Moved disable_chat_feature to UI section
- Updated configuration files
- Updated last message text in conversation list
- Updated PopupView UI
- Display core call logs instead of account call logs when the user has only one account
### Fixed
- International prefix reset in settings
- Prevent editing of read-only (LDAP) contacts
- Crash when editing a contact (safe unwrapping of friend/photo)
- EditContactFragment view and “+” allowed in dialer
- Dial plan selector and default dial plan
- Encryption update when call state changes
- Unread message counter update in onMessageRetracted
- French translation of message_content_deleted
- Stop composing when the user stops typing
- Refresh presence info in history detail
- Refresh displayed friend when the contacts list is updated
- Prefix handling in interpretUrl when calling a phone number
- SIP contacts filter
## [Unreleased]
## [6.0.2] - 2025-09-26
### Added
- Advanced settings to third-party SIP account login view
- Burger button to open the side menu
### Changed
- Layout icon in conference call
- Translations from Weblate
- Disable meetings view when audio/video conference factory address is missing
### Fixed
- EditContactFragment view and allow '+' in number dialer
- Dial plan selector and dial plan default
- Crash when editing a contact by safely unwrapping friend/photo
- Meeting scheduler
## [6.0.1] - 2025-09-12
### Added
- Done button toolbar to number pads
- Help view to login page
### Changed
- textToImage updated to generate image on the core queue
- Send DTMF execution moved to the core queue
- Use saveImage on core queue
- Use point_to_point string for encrypted calls in conference
- Hide VFS setting
### Fixed
- Avatar photo refresh
- onEphemeralMessageTimerStarted callback
- Crash in updateEncryption by safely handling optional currentCall
- Sorted list in MagicSearch when friend is nil
- Friend list refresh triggered by onPresenceReceived
- Crash when adding or removing SIP addresses and phone numbers in EditContactFragment
- awaitDataWrite execution on main queue
- Crash by copying Friend addresses and phone numbers before removal
- Ensure core is On before stopping it on background entry
- textToImage crash
## [6.0.0] - 2025-09-01
6.0.0 release is a complete rework of Linphone, with a fully redesigned UI, so it is impossible to list everything here.
### Changed
- Separated threads: Contrary to previous versions, our SDK is now running in it's own thread, meaning it won't freeze the UI anymore in case of heavy work.
- Asymmetrical video : you no longer need to send your own camera feed to receive the one from the remote end of the call, and vice versa.
- Improved multi account: you'll only see history, conversations, meetings etc... related to currently selected account, and you can switch the default account in two clicks.
- User can only send up to 12 files in a single chat message.
- IMDNs are now only sent to the message sender, preventing huge traffic in large groups, and thus the delivery status icon for received messages is now hidden in groups (as it was in 1-1 conversations).
- Settings: a lot of them are gone, the one that are still there have been reworked to increase user friendliness.
- Default screen (between contacts, call history, conversations & meetings list) will change depending on where you were when the app was paused or killed, and you will return to that last visited screen on the next startup.
- Account creation no longer allows you to use your phone number as username, but it is still required to provide it to receive activation code by SMS.
- Minimum supported iOS version is now 15.
- Some settings have changed name and/or section in linphonerc file.
### Added
- You can now react to a chat message using any emoji.
- Chat while in call: a shortcut to a conversation screen with the remote.
- Chat while in a conference: if the conference has a text stream enabled, you can chat with the other participants of the conference while it lasts. At the end, you'll find the messages history in the call history (and not in the list of conversations).
- Security focus: security & trust is more visible than ever, and unsecure conversations & calls are even more visible than before.
- OpenID: when used with a SSO compliant SIP server (such as Flexisip), we support single-sign-on login.
- MWI support: display and allow to call your voicemail when you have new messages (if supported by your VoIP provider and properly configured in your account params).
- CCMP support: if you configure a CCMP server URL in your accounts params, it will be used when scheduling meetings & to fetch list of meetings you've organized/been invited to.
- Devices list: check on which device your sip.linphone.org account is connected and the last connection date & time (like on subscribe.linphone.org).
- Dialer & in-call numpad show letters under the digit.
### Removed
- Dialer: the previous home screen (dialer) has been removed, you'll find it as an input option in the new start call screen.
- Peer-to-peer: a SIP account (sip.linphone.org or other) is now required.
## [5.2.0] - 2023-28-12
### Added
- Added extra Czech and Japanese translations
### Changed
- Update linphone SDK to 5.3.4
### Fixed
- Re-enabled the G729 audio codec
## [5.2.0] - 2023-21-12
### Added
- Chat messages emoji "reactions"
- Hardware video codecs (H264, H265) are now used in priority when possible (SDK)
### Changed
- Minimum iOS version is now 13
- Update linphone SDK to 5.3.1
### Fixed
- Several crashes in chat conversation when receiving files
- Various UI fixes in conference views
- Fix crash upon refreshing register
## [5.1.0] - 2023-21-08
### Added
- In contacts and chat conversations view, show short term presence for contacts whom publish it + added setting to disable it (enabled by default for sip.linphone.org accounts)
- Advanced settings - option to prevent the taking of screenshot
- Emoji picker in chat conversations
- Add Organization label to contacts, and the possibility to filter through it
- Possibility to make an attended transfer from one call to another
- Contact names, phone numbers and sip addresses are now copyable through with long press action
### Changed
- Switched Account Creator backend from XMLRPC to FlexiAPI, it now requires to be able to receive a push notification
- Chat conversation view (one-to-one and group) completely remade with Swift, with various quality of life improvements.
- Minimum iOS version is now 11.2
- Update linphone SDK to 5.2.95
### Fixed
- Several crashes in the chat conversation view and background mode
- Url scheme handler : can now properly do a remote configuration when opening a linphone-config:URL from another app
- Bug that could cause push notification to stop working after killing the app manually
## [5.0.2] - 2023-16-03
### Changed
- Update linphone SDK to 5.2.32
### Fixed
- Performance issue causing a global slowing of the app, especially at launch
- Fix several memory leaks and crashes
## [5.0.1] - 2023-10-01
### Changed
- Update linphone SDK to 5.2.11
### Fixed
- Makes sure sip.linphone.org accounts have a LIME X3DH server URL for E2E chat messages encryption
- Fix potential crash when displaying images received in a chatroom
- Fix bug that would cause the previous call to be terminated when resuming another call that was paused
- Fix participant video display in conferences when a second participant joined with video enabled
## [5.0.0] - 2022-12-06
### Added
- Post Quantum encryption when using ZRTP
- Conference creation with scheduling, video, different layouts, showing who is speaking and who is muted, etc...
- Group calls directly from group chat rooms
- Chat rooms can be individually muted (no notification when receiving a chat message)
- Outgoing call video in early-media if requested by callee
- Call recordings can be exported
- Setting to prevent international prefix from account to be applied to call & chat
- Add a "Never ask again" option to the "Link my account" pop-up when starting the app
### Changed
- In-call views have been re-designed
- Improved how contact avatars are generated
- 3-dots menu even for basic chat rooms with more options
- Update linphone SDK to 5.2.0
### Fixed
- Chatroom appearing as empty when being logged on multiple accounts
- Chatroom appearing as empty after playing a video file inside it
- Fix potential crash when entering a chatroom
- Fix potential crash when accessing to the delivery infos of a message in a group chat.
- IMDN logo not properly displayed when transfering or replying to a message with media (voice message, photo...)
- Clarified view when sending an image from the galery
- Various audio route fixes for CallKit and IOS 16
## [4.6.4] - 2022-08-06
### Changed
- Update linphone SDK to 5.1.42
### Fixed
- Prevent possible application freeze and crash when creating a new chatroom, depending on the phone's contacts.
## [4.6.3] - 2022-02-06
### Added
- New "Contacts" menu in the settings, which allows the use of LDAP configurations
- Using new MagicSearch API to improve contacts list performances, and search contacts using LDAP if appropriate
### Changed
- Update linphone SDK to 5.1.41
### Fixed
- Prevent read-only 1-1 chat room
- Small quality of life fixes for voice recording messages
- Display bug when changing audio device
## [4.6.2] - 2022-07-03
### Fixed
- Bug preventing the activation of the phone speaker during calls
- Bug with "reply" feature in chatrooms
- Bug causing IMDNs to be missing in some chatrooms
- Update linphone SDK to 5.1.7
## [4.6.1] - 2022-04-03
### Fixed
- Crash in chatroom info view after entering background and re-entering foreground
- Crash in local call conferences when pausing/resuming
- Hard to see text (written in black) on dark mode
- Removed duplicate push authorization request pop up on install
## [4.6.0] - 2022-31-02
### Added
- Reply to chat message feature (with original message preview)
- Transfert chat message feature
- Swipe action on chat messages to reply / delete
- Voice recordings in chat feature
- SIP URIs in chat messages are clickable to easily initiate a call
- New fragment explaining generic SIP account limitations contrary to sip.linphone.org SIP accounts
- Link to Weblate added in about page
- New 'scroll to bottom' button in chat conversations, which a "unread message count" badge
### Changed
- Removed beta feature of ephemeral messages in the settings, now always available.
- SDK updated to 5.1.0 release
### Fixed
- Potential crash when editing a contact avatar image.
- App extension logs missing when exporting logs
## [4.5.0] - 2021-07-08
### Added
- Add option to enable VFS
- Ephemeral messages (beta)
### Changed
- Updating SDK to 5.0 version
- Using linphone SDK 5.0 API to better handle audio route
- Replaced all notions of "Proxy configs" with "Accounts" from the 5.0 SDK
- Removed most of the code related to remote and VOIP Push Notification receptions, now handled in the SDK
- No longer pause all calls when receiving a new call.
- No longer switch to speaker during video call if another output device (bluetooth headset) is already connected
- When answering a video call while the phone is locked, send the "No camera available" image until the video is enabled through the CallKit button
- Chat messages containing both text and file are now displayed in the same chat bubble
### Fixed
- Fix several memory leaks
- Various crashs and issues.
- When the App is started through a Push Notification, properly redirect the view to the corresponding chat rather than going to the home page
## [4.4.0] - 2021-03-30
### Added
- Option to store chat files in Gallery.
### Changed
- Updating SDK to 4.5 version
- Asking user to read and accept privacy policy and general terms
- Updated translations
- Store chat files in App Groups instead of Gallery.
### Removed
- Location permission request.
### Fixed
- Various crashs and issues.
## [4.3.0] - 2020-06-23
### Added
- "push notification application extension" to manage message reception.
- Dark Mode.
- CI to test the build and archive the application.
### Changed
- Presenting the callkit view upon receipt of the push notification.
- Using PushKit only for calls.
- Moving db files from app containers to App Groups.
- Updating SDK to 4.4 version
- Some files are written in Swift.
### Fixed
- Various crashs and issues.
## [4.2.0] - 2019-12-09
### Added
- Possiblity to enable Media Encryption Mandatory in Settings.
- Possiblity to not show app's calls in iphone's history
- Using new AAudio & Camera2 frameworks for better performances (if available)
- Asking the user to agree to access location information from ios 13.
### Changed
- Improved performances to reduce startup time.
@ -29,7 +350,8 @@ Group changes to describe their impact on the project, as follows:
### Fixed
- Automatically downloaded images are copied when shared in a chat room.
- Some UI errors from ios 13.
## [4.1.0] - 2019-05-06
### Added

View file

@ -1,37 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
@interface AboutView : TPMultiLayoutViewController <UICompositeViewDelegate>
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
@property(weak, nonatomic) IBOutlet UILabel *descriptionLabel;
@property(weak, nonatomic) IBOutlet UILabel *appVersionLabel;
@property(weak, nonatomic) IBOutlet UILabel *libVersionLabel;
@property(weak, nonatomic) IBOutlet UILabel *licenceLabel;
@property(weak, nonatomic) IBOutlet UILabel *policyLabel;
- (IBAction)onLinkTap:(id)sender;
- (IBAction)onLicenceTap;
- (IBAction)onPolicyTap;
- (IBAction)onDialerBackClick:(id)sender;
@end

View file

@ -1,95 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "PhoneMainView.h"
#import "LinphoneManager.h"
#import "LinphoneIOSVersion.h"
@implementation AboutView
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
isLeftFragment:YES
fragmentWith:nil];
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
#pragma mark - ViewController Functions
- (void)viewDidLoad {
[super viewDidLoad];
NSString *name = [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
_nameLabel.text = name;
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *curVersion = [NSString stringWithFormat:@"version %@",[infoDict objectForKey:@"CFBundleShortVersionString"]];
_appVersionLabel.text = [NSString stringWithFormat:@"%@ iOS %@", name, curVersion];
_libVersionLabel.text = [NSString stringWithFormat:@"%@ SDK %s", name, LINPHONE_SDK_VERSION];
UITapGestureRecognizer *tapGestureRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onLicenceTap)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[_licenceLabel addGestureRecognizer:tapGestureRecognizer];
_licenceLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGestureRecognizerPolicy =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPolicyTap)];
tapGestureRecognizerPolicy.numberOfTapsRequired = 1;
[_policyLabel addGestureRecognizer:tapGestureRecognizerPolicy];
_policyLabel.userInteractionEnabled = YES;
}
#pragma mark - Action Functions
- (IBAction)onLinkTap:(id)sender {
UIGestureRecognizer *gest = sender;
NSString *url = ((UILabel *)gest.view).text;
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
LOGE(@"Failed to open %@, invalid URL", url);
}
}
- (IBAction)onPolicyTap {
NSString *url = @"https://www.linphone.org/terms-and-privacy";
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
LOGE(@"Failed to open %@, invalid URL", url);
}
}
- (IBAction)onLicenceTap {
NSString *url = @"https://www.gnu.org/licenses/gpl-3.0.html";
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
LOGE(@"Failed to open %@, invalid URL", url);
}
}
- (IBAction)onDialerBackClick:(id)sender {
[PhoneMainView.instance popCurrentView];
}
@end

View file

@ -1,46 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "PhoneMainView.h"
#import <UIKit/UIKit.h>
#import "TPKeyboardAvoidingScrollView.h"
@interface AssistantLinkView : UIViewController <UITextFieldDelegate, UICompositeViewDelegate>
@property(weak, nonatomic) IBOutlet TPKeyboardAvoidingScrollView *linkAccountView;
@property(weak, nonatomic) IBOutlet UIView *activateSMSView;
@property(weak, nonatomic) IBOutlet UIButton *countryButton;
@property(weak, nonatomic) IBOutlet UITextField *countryCodeField;
@property(weak, nonatomic) IBOutlet UITextField *activationCodeField;
@property (weak, nonatomic) IBOutlet UIRoundBorderedButton *maybeLaterButton;
@property(weak, nonatomic) IBOutlet UIRoundBorderedButton *linkAccountButton;
@property(weak, nonatomic) IBOutlet UIRoundBorderedButton *checkValidationButton;
@property(weak, nonatomic) IBOutlet UIView *waitView;
@property(weak, nonatomic) IBOutlet UITextField *phoneField;
@property (weak, nonatomic) IBOutlet UILabel *linkSMSText;
@property BOOL firstTime;
- (IBAction)onLinkAccount:(id)sender;
- (IBAction)onCheckValidationButton:(id)sender;
- (IBAction)onCountryClick:(id)sender;
- (IBAction)onDialerClick:(id)sender;
- (IBAction)onPhoneNumberDisclosureClick:(id)sender;
- (IBAction)onMaybeLater:(id)sender;
@end

View file

@ -1,340 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "AssistantLinkView.h"
#import "UITextField+DoneButton.h"
#import "UIAssistantTextField.h"
@implementation AssistantLinkView {
LinphoneAccountCreator *account_creator;
}
- (void)viewDidLoad {
[super viewDidLoad];
// every UITextField subviews with phone keyboard must be tweaked to have a done button
[self addDoneButtonRecursivelyInView:self.view];
self.phoneField.delegate = self; self.firstTime = TRUE;
}
- (void)addDoneButtonRecursivelyInView:(UIView *)subview {
for (UIView *child in [subview subviews]) {
if ([child isKindOfClass:UITextField.class]) {
UITextField *tf = (UITextField *)child;
if (tf.keyboardType == UIKeyboardTypePhonePad || tf.keyboardType == UIKeyboardTypeNumberPad) {
[tf addDoneButton];
}
}
[self addDoneButtonRecursivelyInView:child];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
_linkAccountView.hidden = _activateSMSView.userInteractionEnabled = NO;
_activateSMSView.hidden = _linkAccountView.userInteractionEnabled = YES;
[self fitScrollContentSize];
if (!account_creator) {
account_creator = linphone_account_creator_new(
LC,
[LinphoneManager.instance lpConfigStringForKey:@"xmlrpc_url" inSection:@"assistant" withDefault:@""]
.UTF8String);
}
linphone_account_creator_set_user_data(account_creator, (__bridge void *)(self));
linphone_account_creator_cbs_set_link_account(linphone_account_creator_get_callbacks(account_creator),
assistant_link_phone_number_with_account);
linphone_account_creator_cbs_set_activate_alias(linphone_account_creator_get_callbacks(account_creator),
assistant_activate_phone_number_link);
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
if (cfg &&
strcmp([LinphoneManager.instance lpConfigStringForKey:@"domain_name"
inSection:@"app"
withDefault:@"sip.linphone.org"]
.UTF8String,
linphone_proxy_config_get_domain(cfg)) == 0) {
linphone_account_creator_set_username(
account_creator, linphone_address_get_username(linphone_proxy_config_get_identity_address(cfg)));
const LinphoneAuthInfo *info = linphone_proxy_config_find_auth_info(cfg);
if (info) {
if (linphone_auth_info_get_passwd(info))
linphone_account_creator_set_password(account_creator, linphone_auth_info_get_passwd(info));
else
linphone_account_creator_set_ha1(account_creator, linphone_auth_info_get_ha1(info));
}
linphone_account_creator_set_domain(account_creator, linphone_proxy_config_get_domain(cfg));
} else {
LOGW(@"Default proxy is NOT a sip.linphone.org, aborting");
[PhoneMainView.instance popToView:DialerView.compositeViewDescription];
}
CTTelephonyNetworkInfo *networkInfo = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = networkInfo.subscriberCellularProvider;
NSDictionary *country = [CountryListView countryWithIso:carrier.isoCountryCode];
if (!country) {
// fetch phone locale
for (NSString *lang in [NSLocale preferredLanguages]) {
NSUInteger idx = [lang rangeOfString:@"-"].location;
idx = (idx == NSNotFound) ? idx = 0 : idx + 1;
if ((country = [CountryListView countryWithIso:[lang substringFromIndex:idx]]) != nil)
break;
}
}
if (country && self.firstTime) {
[self didSelectCountry:country];
}
}
- (void)viewDidDisappear:(BOOL)animated {
if (account_creator) {
linphone_account_creator_unref(account_creator);
}
account_creator = NULL;
[super viewDidDisappear:animated];
}
- (void)fitScrollContentSize {
// make view scrollable only if next button is too away
CGRect viewframe = _linkAccountView.frame;
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
viewframe.size.height += 60;
}
[_linkAccountView setContentSize:viewframe.size];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self fitScrollContentSize];
}
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
isLeftFragment:NO
fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
#pragma mark - popup
- (void)showErrorPopup:(const char *)err {
if (strcmp(err, "ERROR_KEY_DOESNT_MATCH") == 0) {
UIAlertController *errView =
[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Account configuration issue", nil)
message:[AssistantView StringForXMLRPCError:err]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
self.linkAccountView.hidden = NO;
self.linkAccountView.userInteractionEnabled = YES;
self.activateSMSView.userInteractionEnabled = NO;
self.activateSMSView.hidden = YES;
self.activationCodeField.text = @"";
}];
[errView addAction:defaultAction];
[self presentViewController:errView animated:YES completion:nil];
} else {
UIAlertController *errView =
[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Account configuration issue", nil)
message:[AssistantView StringForXMLRPCError:err]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action){
}];
[errView addAction:defaultAction];
[self presentViewController:errView animated:YES completion:nil];
}
}
#pragma mark - cbs
void assistant_link_phone_number_with_account(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status,
const char *resp) {
AssistantLinkView *thiz = (__bridge AssistantLinkView *)(linphone_account_creator_get_user_data(creator));
thiz.waitView.hidden = YES;
if (status == LinphoneAccountCreatorStatusRequestOk) {
thiz.linkAccountView.hidden = thiz.activateSMSView.userInteractionEnabled = YES;
NSString* phoneNumber = [NSString stringWithUTF8String:linphone_account_creator_get_phone_number(creator)];
thiz.linkSMSText.text = [NSString stringWithFormat:NSLocalizedString(@"We have sent a SMS with a validation code to %@. To complete your phone number verification, please enter the 4 digit code below:",nil), phoneNumber];
thiz.activateSMSView.hidden = thiz.linkAccountView.userInteractionEnabled = NO;
} else {
if (strcmp(resp, "Missing required parameters") == 0) {
[thiz showErrorPopup:"ERROR_NO_PHONE_NUMBER"];
} else {
[thiz showErrorPopup:resp];
}
}
}
void assistant_activate_phone_number_link(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status,
const char *resp) {
AssistantLinkView *thiz = (__bridge AssistantLinkView *)(linphone_account_creator_get_user_data(creator));
thiz.waitView.hidden = YES;
if (status == LinphoneAccountCreatorStatusAccountActivated) {
[LinphoneManager.instance lpConfigSetInt:0 forKey:@"must_link_account_time"];
// save country code prefix if none is already entered
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
if (linphone_proxy_config_get_dial_prefix(cfg) == NULL) {
const char *prefix = thiz.countryCodeField.text.UTF8String;
linphone_proxy_config_edit(cfg);
linphone_proxy_config_set_dial_prefix(cfg, prefix[0] == '+' ? &prefix[1] : prefix);
linphone_proxy_config_done(cfg);
}
[PhoneMainView.instance popToView:DialerView.compositeViewDescription];
[[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneAddressBookUpdate object:NULL];
[LinphoneManager.instance.fastAddressBook fetchContactsInBackGroundThread];
} else {
[thiz showErrorPopup:resp];
}
}
#pragma mark - other
- (void)updateCountry:(BOOL)force {
NSDictionary *c = [CountryListView countryWithCountryCode:_countryCodeField.text];
if (c || force) {
[_countryButton setTitle:c ? [c objectForKey:@"name"] : NSLocalizedString(@"Unknown country code", nil)
forState:UIControlStateNormal];
}
if ([[_countryButton currentTitle] isEqualToString:NSLocalizedString(@"Unknown country code", nil)]) {
_countryCodeField.layer.borderWidth = .8;
_countryCodeField.layer.cornerRadius = 4.f;
_countryCodeField.layer.borderColor = [[UIColor redColor] CGColor];
self.linkAccountButton.enabled = FALSE;
} else {
_countryCodeField.layer.borderColor = [[UIColor clearColor] CGColor];
if (_phoneField.layer.borderColor != [[UIColor redColor] CGColor]) {
self.linkAccountButton.enabled = TRUE;
}
}
}
- (IBAction)onCountryCodeFieldChange:(id)sender {
[self updateCountry:NO];
}
- (IBAction)onCountryCodeFieldEnd:(id)sender {
[self updateCountry:YES];
}
- (IBAction)onCountryClick:(id)sender {
self.firstTime = FALSE;
CountryListView *view = VIEW(CountryListView);
[view setDelegate:(id)self];
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
}
- (IBAction)onLinkAccount:(id)sender {
_waitView.hidden = NO;
NSString *newStr = [_countryCodeField.text substringWithRange:NSMakeRange(1, [_countryCodeField.text length]-1)];
linphone_account_creator_set_phone_number(account_creator, _phoneField.text.UTF8String,
newStr.UTF8String);
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
linphone_account_creator_set_language(account_creator, [[language substringToIndex:2] UTF8String]);
linphone_account_creator_link_account(account_creator);
}
- (IBAction)onCheckValidationButton:(id)sender {
_waitView.hidden = NO;
linphone_account_creator_set_activation_code(account_creator, _activationCodeField.text.UTF8String);
linphone_account_creator_activate_alias(account_creator);
}
- (IBAction)onDialerClick:(id)sender {
[PhoneMainView.instance popCurrentView];
}
- (IBAction)onPhoneNumberDisclosureClick:(id)sender {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"What will my phone number be used for?", nil)
message:NSLocalizedString(@"Your friends will find your more easily if you link your account to your "
@"phone number. \n\nYou will see in your address book who is using "
@"Linphone and your friends will know that they can reach you on Linphone "
@"as well. \n\nYou can use your phone number with only one Linphone "
@"account. If you had already linked your number to an other account but "
@"you prefer to use this one, simply link it now and your number will "
@"automatically be moved to this account.",
nil)
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errView addAction:defaultAction];
[self presentViewController:errView animated:YES completion:nil];
}
- (IBAction)onMaybeLater:(id)sender {
[PhoneMainView.instance popToView:DialerView.compositeViewDescription];
}
#pragma mark - select country delegate
- (void)didSelectCountry:(NSDictionary *)country {
[_countryButton setTitle:[country objectForKey:@"name"] forState:UIControlStateNormal];
_countryCodeField.text = [country objectForKey:@"code"];
}
#pragma mark - UITextFieldDelegate Functions
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//remove the + from the country code to avoir error when checking its validity
NSString *newStr = [_countryCodeField.text substringWithRange:NSMakeRange(1, [_countryCodeField.text length]-1)];
LinphoneAccountCreatorStatus status = linphone_account_creator_set_phone_number(account_creator, [_phoneField.text UTF8String], [newStr UTF8String]);
if (status == LinphoneAccountCreatorPhoneNumberStatusTooLong ||
status == LinphoneAccountCreatorPhoneNumberStatusTooShort) {
self.phoneField.layer.borderWidth = .8;
self.phoneField.layer.cornerRadius = 4.f;
self.phoneField.layer.borderColor = [[UIColor redColor] CGColor];
self.linkAccountButton.enabled = FALSE;
} else {
self.phoneField.layer.borderColor = [[UIColor clearColor] CGColor];
if (_countryCodeField.layer.borderColor != [[UIColor redColor] CGColor]){
self.linkAccountButton.enabled = TRUE;
}
}
return YES;
}
@end

View file

@ -1,109 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
#import "TPKeyboardAvoidingScrollView.h"
#import "PhoneMainView.h"
#import <AVFoundation/AVFoundation.h>
@interface AssistantView : UIViewController <UITextFieldDelegate, UICompositeViewDelegate> {
@private
LinphoneAccountCreator *account_creator;
UIView *currentView;
UIView *nextView;
NSMutableArray *historyViews;
LinphoneProxyConfig *new_config;
size_t number_of_configs_before;
BOOL mustRestoreView;
long phone_number_length;
}
@property(nonatomic) UICompositeViewDescription *outgoingView;
@property (weak, nonatomic) IBOutlet UILabel *subtileLabel_useLinphoneAccount;
@property(nonatomic, strong) IBOutlet TPKeyboardAvoidingScrollView *contentView;
@property(nonatomic, strong) IBOutlet UIView *waitView;
@property(nonatomic, strong) IBOutlet UIButton *backButton;
@property (weak, nonatomic) IBOutlet UIButton *infoLoginButton;
@property (weak, nonatomic) IBOutlet UIRoundBorderedButton *linphoneLoginButton;
@property(nonatomic, strong) IBOutlet UIView *welcomeView;
@property(nonatomic, strong) IBOutlet UIView *createAccountView;
@property(nonatomic, strong) IBOutlet UIView *createAccountActivateEmailView;
@property(nonatomic, strong) IBOutlet UIView *linphoneLoginView;
@property(nonatomic, strong) IBOutlet UIView *loginView;
@property(nonatomic, strong) IBOutlet UIView *remoteProvisioningLoginView;
@property(strong, nonatomic) IBOutlet UIView *remoteProvisioningView;
@property (strong, nonatomic) IBOutlet UIView *createAccountActivateSMSView;
@property (strong, nonatomic) IBOutlet UIView *qrCodeView;
@property(nonatomic, strong) IBOutlet UIImageView *welcomeLogoImage;
@property(nonatomic, strong) IBOutlet UIButton *gotoCreateAccountButton;
@property(nonatomic, strong) IBOutlet UIButton *gotoLinphoneLoginButton;
@property(nonatomic, strong) IBOutlet UIButton *gotoLoginButton;
@property(nonatomic, strong) IBOutlet UIButton *gotoRemoteProvisioningButton;
@property (weak, nonatomic) IBOutlet UILabel *phoneLabel;
@property (weak, nonatomic) IBOutlet UILabel *phoneTitle;
@property (weak, nonatomic) IBOutlet UILabel *activationTitle;
@property (weak, nonatomic) IBOutlet UILabel *activationEmailText;
@property (weak, nonatomic) IBOutlet UILabel *activationSMSText;
@property (weak, nonatomic) IBOutlet UILabel *accountLabel;
@property (weak, nonatomic) IBOutlet UIButton *qrCodeButton;
@property (weak, nonatomic) IBOutlet UIButton *downloadButton;
@property (weak, nonatomic) IBOutlet UITextField *urlLabel;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *createAccountNextButtonPositionConstraint;
+ (NSString *)StringForXMLRPCError:(const char *)err;
+ (NSString *)errorForLinphoneAccountCreatorPhoneNumberStatus:(LinphoneAccountCreatorPhoneNumberStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorUsernameStatus:(LinphoneAccountCreatorUsernameStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorEmailStatus:(LinphoneAccountCreatorEmailStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorPasswordStatus:(LinphoneAccountCreatorPasswordStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorActivationCodeStatus:(LinphoneAccountCreatorActivationCodeStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorStatus:(LinphoneAccountCreatorStatus)status;
+ (NSString *)errorForLinphoneAccountCreatorDomainStatus:(LinphoneAccountCreatorDomainStatus)status;
- (void)reset;
- (void)fillDefaultValues;
- (IBAction)onBackClick:(id)sender;
- (IBAction)onGotoCreateAccountClick:(id)sender;
- (IBAction)onGotoLinphoneLoginClick:(id)sender;
- (IBAction)onGotoLoginClick:(id)sender;
- (IBAction)onGotoRemoteProvisioningClick:(id)sender;
- (IBAction)onCreateAccountClick:(id)sender;
- (IBAction)onCreateAccountActivationClick:(id)sender;
- (IBAction)onLinphoneLoginClick:(id)sender;
- (IBAction)onLoginClick:(id)sender;
- (IBAction)onRemoteProvisioningLoginClick:(id)sender;
- (IBAction)onRemoteProvisioningDownloadClick:(id)sender;
- (IBAction)onLaunchQRCodeView:(id)sender;
- (IBAction)onCreateAccountCheckActivatedClick:(id)sender;
- (IBAction)onLinkAccountClick:(id)sender;
- (IBAction)onFormSwitchToggle:(id)sender;
- (IBAction)onCountryCodeClick:(id)sender;
- (IBAction)onCountryCodeFieldChange:(id)sender;
- (IBAction)onCountryCodeFieldEnd:(id)sender;
- (IBAction)onPhoneNumberDisclosureClick:(id)sender;
@end

File diff suppressed because it is too large Load diff

View file

@ -1,52 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "AudioHelper.h"
@implementation AudioHelper
+ (NSArray *)bluetoothRoutes {
return @[AVAudioSessionPortBluetoothHFP, AVAudioSessionPortCarAudio, AVAudioSessionPortBluetoothA2DP, AVAudioSessionPortBluetoothLE ];
}
+ (AVAudioSessionPortDescription *)bluetoothAudioDevice {
return [AudioHelper audioDeviceFromTypes:[AudioHelper bluetoothRoutes]];
}
+ (AVAudioSessionPortDescription *)builtinAudioDevice {
NSArray *builtinRoutes = @[ AVAudioSessionPortBuiltInMic ];
return [AudioHelper audioDeviceFromTypes:builtinRoutes];
}
+ (AVAudioSessionPortDescription *)speakerAudioDevice {
NSArray *builtinRoutes = @[ AVAudioSessionPortBuiltInSpeaker ];
return [AudioHelper audioDeviceFromTypes:builtinRoutes];
}
+ (AVAudioSessionPortDescription *)audioDeviceFromTypes:(NSArray *)types {
NSArray *routes = [[AVAudioSession sharedInstance] availableInputs];
for (AVAudioSessionPortDescription *route in routes) {
if ([types containsObject:route.portType]) {
return route;
}
}
return nil;
}
@end

Binary file not shown.

View file

@ -1,289 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_0" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AboutView">
<connections>
<outlet property="appVersionLabel" destination="gLk-Bc-zvx" id="81L-RE-1ad"/>
<outlet property="landscapeView" destination="sVO-4a-t1s" id="9ye-NV-onQ"/>
<outlet property="libVersionLabel" destination="ZYk-v1-CYZ" id="E4g-U8-zyp"/>
<outlet property="licenceLabel" destination="gVK-Xc-S59" id="XPV-ct-oGP"/>
<outlet property="policyLabel" destination="5Nl-Fs-ggi" id="xXc-PS-Eda"/>
<outlet property="portraitView" destination="HJH-1o-RXN" id="Hoa-uk-q9s"/>
<outlet property="view" destination="HJH-1o-RXN" id="t5Y-ob-1WC"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="eP3-Qs-BZl" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="HJH-1o-RXN">
<rect key="frame" x="0.0" y="66" width="320" height="502"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="Whz-oo-Pwx" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="h54-RV-eE6" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ETk-tB-ZNl" userLabel="dialerBackButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="82" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDialerBackClick:" destination="-1" eventType="touchUpInside" id="PJX-d2-pSh"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iNt-9d-7si" userLabel="titleLabel">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<view clipsSubviews="YES" multipleTouchEnabled="YES" tag="6" contentMode="scaleToFill" id="er6-WR-NP1">
<rect key="frame" x="0.0" y="66" width="320" height="535"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_C.png" id="fbO-x9-0Ue" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="320" height="262"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone iOS 8.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="gLk-Bc-zvx" userLabel="appVersionLabel">
<rect key="frame" x="-8" y="221" width="320" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.85415387153625488" green="0.85412830114364624" blue="0.85414278507232666" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="12" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone Core 3.14.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZYk-v1-CYZ" userLabel="libVersionLabel">
<rect key="frame" x="-8" y="241" width="320" height="21"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.85415387153625488" green="0.85412830114364624" blue="0.85414278507232666" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://www.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1pe-zf-cQh" userLabel="siteURLLabel">
<rect key="frame" x="0.0" y="270" width="320" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<connections>
<outletCollection property="gestureRecognizers" destination="l7c-wq-pii" appends="YES" id="olo-CD-gM3"/>
</connections>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Visit our privacy policy" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="5Nl-Fs-ggi" userLabel="policyLabel">
<rect key="frame" x="0.0" y="298" width="320" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splashscreen.png" id="wSQ-YD-dIQ" userLabel="logoImage">
<rect key="frame" x="0.0" y="8" width="320" height="166"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="siH-xH-Z5X" userLabel="descLabel">
<rect key="frame" x="68" y="179" width="185" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<attributedString key="attributedText">
<fragment content="The ">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content="libre">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue-Italic"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content=" SIP client">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="gVK-Xc-S59" userLabel="licenseLabel">
<rect key="frame" x="-8" y="335" width="320" height="61"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<string key="text">GNU General Public License V3
© 2010-2019 Belledonne Communications</string>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="376" y="286.05697151424289"/>
</view>
<view contentMode="scaleToFill" id="FcM-rg-Qrt" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="sVO-4a-t1s">
<rect key="frame" x="0.0" y="66" width="320" height="391"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="OGe-ZS-scH" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Vi5-Wh-iOm" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="vX8-wO-ZEN" userLabel="dialerBackButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="82" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDialerBackClick:" destination="-1" eventType="touchUpInside" id="vfB-jG-YPr"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wKp-iH-ojJ" userLabel="titleLabel">
<rect key="frame" x="0.0" y="0.0" width="320" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<view clipsSubviews="YES" multipleTouchEnabled="YES" tag="6" contentMode="scaleToFill" id="Wvv-4f-Oa6">
<rect key="frame" x="0.0" y="66" width="320" height="243"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_C.png" id="UBx-Gi-qTi" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="320" height="152"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="ASG-VC-Riv" userLabel="descLabel">
<rect key="frame" x="152" y="35" width="124" height="45"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<attributedString key="attributedText">
<fragment content="The ">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content="libre">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue-Italic"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content=" SIP client">
<attributes>
<color key="NSColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<font key="NSFont" size="26" name="HelveticaNeue"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone iPhone 3.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oYk-ih-BBi" userLabel="appVersionLabel">
<rect key="frame" x="109" y="88" width="211" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.85415387153625488" green="0.85412830114364624" blue="0.85414278507232666" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://www.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jGU-DX-XcO" userLabel="siteURLLabel">
<rect key="frame" x="0.0" y="154" width="320" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.98766469960000003" green="0.27512490750000002" blue="0.029739789660000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Visit our privacy policy" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="nld-cR-eba" userLabel="policyLabel">
<rect key="frame" x="0.0" y="173" width="320" height="41"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="12" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone Core 3.9.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="g2W-u5-yxg" userLabel="libVersionLabel">
<rect key="frame" x="109" y="117" width="211" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.85415387153625488" green="0.85412830114364624" blue="0.85414278507232666" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splashscreen.png" id="UhZ-5i-eU5" userLabel="logoImage">
<rect key="frame" x="6" y="0.0" width="121" height="152"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
</subviews>
</view>
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GNU General Public License V3 © 2010-2019 Belledonne Communications" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="vqn-sI-DiC" userLabel="licenseLabel">
<rect key="frame" x="0.0" y="226" width="520" height="35"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="1393.5999999999999" y="223.08845577211397"/>
</view>
<tapGestureRecognizer id="l7c-wq-pii" userLabel="onLinkTap">
<connections>
<action selector="onLinkTap:" destination="-1" id="Ay5-Uz-RDo"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="color_C.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="splashscreen.png" width="852.79998779296875" height="617.5999755859375"/>
</resources>
</document>

View file

@ -1,267 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AssistantLinkView">
<connections>
<outlet property="activateSMSView" destination="2Nl-QG-fTA" id="32Y-Z3-OYi"/>
<outlet property="activationCodeField" destination="PXL-cl-haZ" id="faz-N0-sjR"/>
<outlet property="checkValidationButton" destination="bIM-bh-Huy" id="yr2-9j-ejj"/>
<outlet property="countryButton" destination="rLT-uU-cJS" id="lNp-Qo-AKx"/>
<outlet property="countryCodeField" destination="DBr-NA-Ibx" id="cRz-xe-r5D"/>
<outlet property="linkAccountButton" destination="D25-6f-qRg" id="aid-PS-8mU"/>
<outlet property="linkAccountView" destination="ImD-Y4-3nC" id="231-q3-rGe"/>
<outlet property="linkSMSText" destination="Dvq-wa-3k8" id="4Ne-Ud-aA1"/>
<outlet property="maybeLaterButton" destination="bes-x4-C4l" id="l5a-ON-h9a"/>
<outlet property="phoneField" destination="cEN-WO-5qv" id="Ftl-EA-afz"/>
<outlet property="view" destination="FBm-gC-sIQ" id="Bhr-VA-MJs"/>
<outlet property="waitView" destination="J3A-Fb-Dpg" id="zbb-YB-ace"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="fhP-nP-aaU" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="FBm-gC-sIQ">
<rect key="frame" x="0.0" y="66" width="375" height="601"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="c7I-Cv-d4R" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="367" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="q79-qx-kgb" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="VlN-Em-1V6" userLabel="dialerBackButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="82" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDialerClick:" destination="-1" eventType="touchUpInside" id="WUU-Oh-Ofu"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ASSISTANT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="zrj-TX-1RP" userLabel="titleLabel">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<view hidden="YES" contentMode="scaleToFill" id="ImD-Y4-3nC" userLabel="linkAccountView" customClass="TPKeyboardAvoidingScrollView">
<rect key="frame" x="0.0" y="66" width="375" height="535"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="LINK YOUR ACCOUNT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="0xQ-6c-cAc" userLabel="titleLabel">
<rect key="frame" x="38" y="0.0" width="299" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Account setup assistant"/>
<fontDescription key="fontDescription" type="system" weight="light" pointSize="24"/>
<color key="textColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please confirm your country code and enter your phone number" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" minimumFontSize="11" id="RQz-tT-5vp" userLabel="subtitleLabel">
<rect key="frame" x="38" y="66" width="299" height="29"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Account setup assistant"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.4266758859" green="0.42666310070000002" blue="0.42667034269999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="122" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PHONE NUMBER" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="v2Q-jf-BdL" userLabel="phoneLabel">
<rect key="frame" x="38" y="131" width="299" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.4266758859" green="0.42666310070000002" blue="0.42667034269999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="150" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="rLT-uU-cJS" userLabel="countryButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="38" y="153" width="299" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<state key="normal" title="Select your country">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" title="Choose your country" backgroundImage="color_F.png"/>
<connections>
<action selector="onCountryClick:" destination="-1" eventType="touchUpInside" id="AUl-nx-xOA"/>
</connections>
</button>
<view contentMode="scaleToFill" id="88g-7g-gGM" userLabel="phoneNumberView">
<rect key="frame" x="38" y="189" width="299" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" tag="109" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="+1" textAlignment="center" minimumFontSize="5" id="DBr-NA-Ibx" userLabel="countryCodeField">
<rect key="frame" x="1" y="7" width="54" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.85415387149999999" green="0.85412830110000004" blue="0.85414278509999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" keyboardType="phonePad"/>
<connections>
<action selector="onCountryCodeFieldChange:" destination="-1" eventType="editingChanged" id="cot-au-ukn"/>
<action selector="onCountryCodeFieldEnd:" destination="-1" eventType="editingDidEnd" id="5v7-YR-eTh"/>
</connections>
</textField>
<textField opaque="NO" clipsSubviews="YES" tag="107" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="cEN-WO-5qv" userLabel="phoneField">
<rect key="frame" x="58" y="7" width="242" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.85415387149999999" green="0.85412830110000004" blue="0.85414278509999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Username"/>
<color key="textColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="phonePad" returnKeyType="next"/>
</textField>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<inset key="insetFor6xAndEarlier" minX="0.0" minY="0.0" maxX="299" maxY="0.0"/>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoDark" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="9cd-3u-fU5" userLabel="infoButton">
<rect key="frame" x="300" y="127" width="22" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<connections>
<action selector="onPhoneNumberDisclosureClick:" destination="-1" eventType="touchUpInside" id="FEb-Xm-Pyx"/>
</connections>
</button>
<button opaque="NO" tag="130" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="D25-6f-qRg" userLabel="linkAccountButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="38" y="252" width="299" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Create account">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="LINK ACCOUNT">
<color key="titleColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled">
<color key="titleColor" red="0.71885228160000003" green="0.71883076430000004" blue="0.71884298319999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_F.png"/>
<connections>
<action selector="onLinkAccount:" destination="-1" eventType="touchUpInside" id="wd4-6V-tMa"/>
</connections>
</button>
<button opaque="NO" tag="130" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="bes-x4-C4l" userLabel="maybeLaterButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="38" y="312" width="299" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Finish configuration">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="MAYBE LATER">
<color key="titleColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled">
<color key="titleColor" red="0.71885228160000003" green="0.71883076430000004" blue="0.71884298319999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_F.png"/>
<connections>
<action selector="onMaybeLater:" destination="-1" eventType="touchUpInside" id="IcP-2Y-18k"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view contentMode="scaleToFill" id="2Nl-QG-fTA" userLabel="activateSMSView">
<rect key="frame" x="0.0" y="66" width="375" height="535"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="LINK YOUR ACCOUNT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="5aj-17-dC2" userLabel="titleLabel">
<rect key="frame" x="38" y="0.0" width="303" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Account setup assistant"/>
<fontDescription key="fontDescription" type="system" weight="light" pointSize="24"/>
<color key="textColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="2/2" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="bU8-Tu-9O4" userLabel="subtitleLabel">
<rect key="frame" x="38" y="66" width="303" height="29"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Account setup assistant"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.4266758859" green="0.42666310070000002" blue="0.42667034269999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="108" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Activation code" textAlignment="center" minimumFontSize="17" clearButtonMode="always" id="PXL-cl-haZ" userLabel="activationCodeField">
<rect key="frame" x="38" y="214" width="303" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.85415387153625488" green="0.85412830114364624" blue="0.85414278507232666" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="26"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no" keyboardType="numberPad" returnKeyType="done"/>
</textField>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="We have sent you a SMS with a validation code. To complete your phone number verification, please enter the 4 digit code below:" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="8" baselineAdjustment="alignBaselines" minimumFontSize="10" id="Dvq-wa-3k8" userLabel="activateDescLabel">
<rect key="frame" x="38" y="103" width="303" height="96"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Account setup assistant"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<button opaque="NO" tag="130" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="bIM-bh-Huy" userLabel="checkValidationButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="38" y="252" width="299" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Finish configuration">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="LINK ACCOUNT">
<color key="titleColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled">
<color key="titleColor" red="0.71885228160000003" green="0.71883076430000004" blue="0.71884298319999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_F.png"/>
<connections>
<action selector="onCheckValidationButton:" destination="-1" eventType="touchUpInside" id="v0K-hd-CHi"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view hidden="YES" tag="8" contentMode="scaleToFill" id="J3A-Fb-Dpg" userLabel="waitView">
<rect key="frame" x="0.0" y="-33" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="mQl-pi-5rq" userLabel="activityIndicatorView">
<rect key="frame" x="179" y="322" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="376.80000000000001" y="286.50674662668666"/>
</view>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

View file

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AssistantView">
<connections>
<outlet property="backButton" destination="edC-CG-eZr" id="aXO-xT-kQ1"/>
<outlet property="contentView" destination="98" id="99"/>
<outlet property="view" destination="12" id="20"/>
<outlet property="waitView" destination="91" id="96"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="BrP-Xy-m1Y">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="12">
<rect key="frame" x="0.0" y="42" width="414" height="854"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="Vsu-Ew-BxE" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="vhv-dn-tHv" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ASSISTANT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1EG-3g-3uU" userLabel="titleLabel">
<rect key="frame" x="92" y="0.0" width="230" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="edC-CG-eZr" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="82" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="KeZ-8e-Ci2"/>
</connections>
</button>
</subviews>
</view>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="7" contentMode="scaleToFill" bounces="NO" id="98" userLabel="contentView" customClass="TPKeyboardAvoidingScrollView">
<rect key="frame" x="0.0" y="66" width="414" height="788"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</scrollView>
<view hidden="YES" tag="8" contentMode="scaleToFill" id="91" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="414" height="854"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="90" userLabel="activityIndicatorView">
<rect key="frame" x="199" y="416" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="58.695652173913047" y="176.45089285714286"/>
</view>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

File diff suppressed because it is too large Load diff

View file

@ -1,319 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="landscape">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CallIncomingView">
<connections>
<outlet property="addressLabel" destination="78f-eb-xdx" id="Qjw-7G-oqG"/>
<outlet property="avatarImage" destination="19" id="20"/>
<outlet property="earlyMediaView" destination="lUj-2n-Afx" id="cHv-3Y-lIQ"/>
<outlet property="landscapeView" destination="r7T-Et-xrQ" id="rA1-2K-fUf"/>
<outlet property="nameLabel" destination="hjQ-4P-bKP" id="Elh-o8-zM9"/>
<outlet property="portraitView" destination="25" id="6Gy-ZX-kTl"/>
<outlet property="tabBar" destination="4" id="9gd-FT-jaI"/>
<outlet property="tabVideoBar" destination="vIQ-QP-ooa" id="JZq-9l-pOy"/>
<outlet property="view" destination="25" id="26"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="6e0-76-KvA" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="25">
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleAspectFit" image="avatar.png" id="19" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="155" y="147" width="355" height="107"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="Cro-ww-VIC" userLabel="headerBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" button="YES" notEnabled="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<state key="normal" title="INCOMING CALL" backgroundImage="color_F.png">
<color key="titleColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
<view tag="6" contentMode="scaleToFill" id="4" userLabel="tabBar">
<rect key="frame" x="0.0" y="270" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="6" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="334" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="16"/>
</connections>
</button>
<button opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="7" userLabel="acceptButton">
<rect key="frame" x="333" y="0.0" width="334" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptClick:" destination="-1" eventType="touchUpInside" id="15"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view hidden="YES" tag="9" contentMode="scaleToFill" id="vIQ-QP-ooa" userLabel="tabVideoBar">
<rect key="frame" x="0.0" y="270" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="KnH-hj-g47" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="222" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="Nrs-UR-Hb9"/>
</connections>
</button>
<button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="wYo-ty-Rwk" userLabel="acceptAudioOnlyButton">
<rect key="frame" x="222" y="0.0" width="223" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptAudioOnlyClick:" destination="-1" eventType="touchUpInside" id="N9h-i1-ejZ"/>
</connections>
</button>
<button opaque="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="tX0-eE-di5" userLabel="acceptButton">
<rect key="frame" x="445" y="0.0" width="222" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_video_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_video_start_disabled.png"/>
<state key="selected" image="call_video_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptClick:" destination="-1" eventType="touchUpInside" id="XvK-9T-J2j"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view hidden="YES" contentMode="scaleToFill" id="lUj-2n-Afx" userLabel="earlyMediaView">
<rect key="frame" x="0.0" y="35" width="667" height="265"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" id="78f-eb-xdx" userLabel="addressLabel">
<rect key="frame" x="0.0" y="111" width="667" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="4" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="hjQ-4P-bKP" userLabel="nameLabel">
<rect key="frame" x="0.0" y="79" width="667" height="28"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-141.59999999999999" y="42.728635682158924"/>
</view>
<view contentMode="scaleToFill" id="Znq-C0-ZAc" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="r7T-Et-xrQ">
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="E9b-qt-GBq" userLabel="headerBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" button="YES" notEnabled="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<state key="normal" title="INCOMING CALL" backgroundImage="color_F.png">
<color key="titleColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
<view tag="6" contentMode="scaleToFill" id="0Tc-7G-eqT" userLabel="tabBar">
<rect key="frame" x="0.0" y="270" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="qpN-iY-3Ao" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="334" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="JKz-8y-c9T"/>
</connections>
</button>
<button opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8dX-3c-mba" userLabel="acceptButton">
<rect key="frame" x="333" y="0.0" width="334" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptClick:" destination="-1" eventType="touchUpInside" id="17v-kE-yOu"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view hidden="YES" tag="9" contentMode="scaleToFill" id="PPE-Fd-wDf" userLabel="tabVideoBar">
<rect key="frame" x="0.0" y="270" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="i8b-dr-IYG" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="221" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="mjN-BB-4ph"/>
</connections>
</button>
<button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="QYg-9G-We0" userLabel="acceptAudioOnlyButton">
<rect key="frame" x="221" y="0.0" width="224" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptAudioOnlyClick:" destination="-1" eventType="touchUpInside" id="veh-c0-GOe"/>
</connections>
</button>
<button opaque="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="sbd-NW-OZx" userLabel="acceptButton">
<rect key="frame" x="445" y="0.0" width="222" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_video_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_video_start_disabled.png"/>
<state key="selected" image="call_video_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<action selector="onAcceptClick:" destination="-1" eventType="touchUpInside" id="RLl-y6-yhs"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleAspectFit" image="avatar.png" id="Q0C-CO-AYR" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="110" y="74" width="180" height="180"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<view hidden="YES" contentMode="scaleToFill" id="F11-a0-ZL6" userLabel="earlyMediaView">
<rect key="frame" x="45" y="73" width="250" height="187"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" id="tsb-6p-cAk" userLabel="addressLabel">
<rect key="frame" x="297" y="166" width="370" height="33"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="4" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="WsB-At-ejv" userLabel="nameLabel">
<rect key="frame" x="297" y="121" width="370" height="37"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="762.39999999999998" y="-88.605697151424295"/>
</view>
</objects>
<resources>
<image name="avatar.png" width="259" height="259"/>
<image name="call_audio_start_default.png" width="36" height="36"/>
<image name="call_audio_start_disabled.png" width="36" height="36"/>
<image name="call_hangup_default.png" width="42" height="36"/>
<image name="call_hangup_disabled.png" width="42" height="36"/>
<image name="call_video_start_default.png" width="40" height="36"/>
<image name="call_video_start_disabled.png" width="40" height="36"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_D.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="color_I.png" width="2" height="2"/>
<image name="color_L.png" width="2" height="2"/>
</resources>
</document>

View file

@ -1,416 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CallOutgoingView">
<connections>
<outlet property="addressLabel" destination="2fa-Ag-3GW" id="2Oe-UW-rPC"/>
<outlet property="avatarImage" destination="bNo-O5-DWh" id="eqo-0s-UoN"/>
<outlet property="landscapeView" destination="Czn-ec-dh8" id="ZIk-2g-9Qk"/>
<outlet property="microButton" destination="26e-Pj-2Oh" id="jXh-0n-yg7"/>
<outlet property="nameLabel" destination="d5s-yP-8VE" id="0VY-HP-ovD"/>
<outlet property="portraitView" destination="25" id="26I-da-00C"/>
<outlet property="routesBluetoothButton" destination="SH1-xD-Agw" id="ifX-Dy-Tcb"/>
<outlet property="routesButton" destination="29K-Sd-aHF" id="MVM-Mb-OWE"/>
<outlet property="routesEarpieceButton" destination="zs4-Zy-FrP" id="TOt-D3-635"/>
<outlet property="routesSpeakerButton" destination="oKz-6p-EAF" id="yIx-qF-Gd7"/>
<outlet property="routesView" destination="iyf-nk-ORJ" id="LBJ-Rm-VUX"/>
<outlet property="speakerButton" destination="G7m-Av-QlR" id="UHW-L2-NDM"/>
<outlet property="view" destination="25" id="26"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="HpM-if-114" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="25">
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="NFl-sb-0TV" userLabel="headerBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" button="YES" notEnabled="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<state key="normal" title="OUTGOING CALL" backgroundImage="color_F.png">
<color key="titleColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<view hidden="YES" tag="37" contentMode="scaleToFill" id="iyf-nk-ORJ" userLabel="routesView">
<rect key="frame" x="282" y="364" width="94" height="198"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="38" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="xEp-Iw-uII" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="94" height="198"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="39" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="SH1-xD-Agw" userLabel="routesBluetoothButton" customClass="UIBluetoothButton">
<rect key="frame" x="0.0" y="0.0" width="94" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Bluetooth"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_bluetooth_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_bluetooth_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_bluetooth_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<connections>
<action selector="onRoutesBluetoothClick:" destination="-1" eventType="touchUpInside" id="0bq-3n-xii"/>
</connections>
</button>
<button opaque="NO" tag="40" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="zs4-Zy-FrP" userLabel="routesEarpieceButton">
<rect key="frame" x="0.0" y="66" width="94" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Receiver"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_earpiece_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_earpiece_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_earpiece_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<connections>
<action selector="onRoutesEarpieceClick:" destination="-1" eventType="touchUpInside" id="YRr-Kn-GgV"/>
</connections>
</button>
<button opaque="NO" tag="41" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="oKz-6p-EAF" userLabel="routesSpeakerButton" customClass="UISpeakerButton">
<rect key="frame" x="0.0" y="132" width="94" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Speaker"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_speaker_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_speaker_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_speaker_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<connections>
<action selector="onRoutesSpeakerClick:" destination="-1" eventType="touchUpInside" id="g4L-6P-Iqw"/>
</connections>
</button>
</subviews>
</view>
<view tag="7" contentMode="scaleToFill" id="8Qi-Cq-3XH" userLabel="tabBar">
<rect key="frame" x="0.0" y="562" width="375" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="vyh-Us-8kj" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="AaM-cH-pvW" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="188" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="Ebl-hM-8F9"/>
</connections>
</button>
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="26e-Pj-2Oh" userLabel="microButton" customClass="UIMutedMicroButton">
<rect key="frame" x="188" y="0.0" width="94" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="micro_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="micro_disabled.png"/>
<state key="selected" image="micro_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
</button>
<button hidden="YES" opaque="NO" tag="54" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="29K-Sd-aHF" userLabel="routesButton" customClass="UIToggleButton">
<rect key="frame" x="282" y="0.0" width="94" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Route"/>
<inset key="titleEdgeInsets" minX="0.0" minY="38" maxX="0.0" maxY="0.0"/>
<state key="normal" image="routes_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="routes_disabled.png"/>
<state key="selected" image="routes_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onRoutesClick:" destination="-1" eventType="touchUpInside" id="hXX-8a-7M4"/>
</connections>
</button>
<button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="G7m-Av-QlR" userLabel="speakerButton" customClass="UISpeakerButton">
<rect key="frame" x="282" y="0.0" width="94" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="speaker_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="speaker_disabled.png"/>
<state key="selected" image="speaker_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="2fa-Ag-3GW" userLabel="addressLabel">
<rect key="frame" x="4" y="206" width="367" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="4" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="d5s-yP-8VE" userLabel="nameLabel">
<rect key="frame" x="0.0" y="152" width="375" height="52"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" tag="6" contentMode="scaleAspectFit" image="avatar.png" id="bNo-O5-DWh" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="87" y="274" width="200" height="200"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
<point key="canvasLocation" x="29.5" y="166.5"/>
</view>
<view contentMode="scaleToFill" id="YAs-im-wvR" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="Czn-ec-dh8">
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="oAv-Cz-FaR" userLabel="headerBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" button="YES" notEnabled="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<state key="normal" title="OUTGOING CALL" backgroundImage="color_F.png">
<color key="titleColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" id="Fj8-Pu-ShI" userLabel="addressLabel">
<rect key="frame" x="298" y="166" width="368" height="33"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="4" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="ubQ-ZN-AhT" userLabel="nameLabel">
<rect key="frame" x="298" y="121" width="369" height="37"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" tag="6" contentMode="scaleAspectFit" image="avatar.png" id="1ZH-n6-QZ0" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="110" y="74" width="180" height="180"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<view hidden="YES" tag="37" contentMode="scaleToFill" id="EaW-SR-bqv" userLabel="routesView">
<rect key="frame" x="501" y="72" width="167" height="198"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="38" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Tvo-Jg-0h8" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="167" height="198"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="39" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="N7s-YH-dJQ" userLabel="routesBluetoothButton" customClass="UIBluetoothButton">
<rect key="frame" x="0.0" y="0.0" width="167" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Bluetooth"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_bluetooth_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_bluetooth_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_bluetooth_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
</button>
<button opaque="NO" tag="40" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="bg7-Cv-tyO" userLabel="routesEarpieceButton">
<rect key="frame" x="0.0" y="66" width="167" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Receiver"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_earpiece_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_earpiece_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_earpiece_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
</button>
<button opaque="NO" tag="41" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="yd8-ed-g8u" userLabel="routesSpeakerButton" customClass="UISpeakerButton">
<rect key="frame" x="0.0" y="132" width="167" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Speaker"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="titleEdgeInsets" minX="0.0" minY="28" maxX="0.0" maxY="0.0"/>
<state key="normal" image="route_speaker_default.png">
<color key="titleColor" red="0.25490196079999999" green="0.28235294119999998" blue="0.30980392159999998" alpha="1" colorSpace="deviceRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="route_speaker_disabled.png">
<color key="titleColor" red="0.65098039220000004" green="0.70196078429999997" blue="0.74901960779999999" alpha="1" colorSpace="deviceRGB"/>
</state>
<state key="selected" image="route_speaker_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png">
<color key="titleColor" red="0.81176470590000005" green="0.29803921570000003" blue="0.16078431369999999" alpha="1" colorSpace="deviceRGB"/>
</state>
</button>
</subviews>
</view>
<view tag="7" contentMode="scaleToFill" id="vJ1-A8-eFV" userLabel="tabBar">
<rect key="frame" x="0.0" y="270" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="eYb-yI-yVB" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="667" height="63"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jfG-HJ-FPI" userLabel="declineButton">
<rect key="frame" x="0.0" y="0.0" width="334" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Decline"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_hangup_default.png" backgroundImage="color_D.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_hangup_disabled.png"/>
<state key="highlighted" backgroundImage="color_I.png"/>
<connections>
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="voJ-Cd-XHg"/>
</connections>
</button>
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jLg-1u-ulZ" userLabel="microButton" customClass="UIMutedMicroButton">
<rect key="frame" x="334" y="0.0" width="167" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="micro_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="micro_disabled.png"/>
<state key="selected" image="micro_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
</button>
<button hidden="YES" opaque="NO" tag="54" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="61B-DK-jZ6" userLabel="routesButton" customClass="UIToggleButton">
<rect key="frame" x="501" y="0.0" width="167" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Route"/>
<inset key="titleEdgeInsets" minX="0.0" minY="38" maxX="0.0" maxY="0.0"/>
<state key="normal" image="routes_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="routes_disabled.png"/>
<state key="selected" image="routes_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
</button>
<button opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="5CY-aN-NLX" userLabel="speakerButton" customClass="UISpeakerButton">
<rect key="frame" x="501" y="0.0" width="167" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Accept"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="speaker_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="speaker_disabled.png"/>
<state key="selected" image="speaker_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
<point key="canvasLocation" x="346.5" y="59.5"/>
</view>
</objects>
<resources>
<image name="avatar.png" width="1271" height="1271"/>
<image name="call_hangup_default.png" width="41" height="36"/>
<image name="call_hangup_disabled.png" width="41" height="36"/>
<image name="color_D.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="color_I.png" width="2" height="2"/>
<image name="micro_default.png" width="29" height="37"/>
<image name="micro_disabled.png" width="29" height="37"/>
<image name="micro_selected.png" width="29" height="37"/>
<image name="route_bluetooth_default.png" width="16" height="25"/>
<image name="route_bluetooth_disabled.png" width="16" height="25"/>
<image name="route_bluetooth_selected.png" width="16" height="25"/>
<image name="route_earpiece_default.png" width="23" height="24"/>
<image name="route_earpiece_disabled.png" width="23" height="24"/>
<image name="route_earpiece_selected.png" width="23" height="24"/>
<image name="route_speaker_default.png" width="27" height="25"/>
<image name="route_speaker_disabled.png" width="27" height="25"/>
<image name="route_speaker_selected.png" width="27" height="25"/>
<image name="routes_default.png" width="37" height="25"/>
<image name="routes_disabled.png" width="37" height="25"/>
<image name="routes_selected.png" width="37" height="25"/>
<image name="speaker_default.png" width="27" height="25"/>
<image name="speaker_disabled.png" width="27" height="25"/>
<image name="speaker_selected.png" width="27" height="25"/>
</resources>
</document>

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,245 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ChatConversationCreateView">
<connections>
<outlet property="allButton" destination="r3z-SM-lMq" id="DUC-gQ-gKu"/>
<outlet property="backButton" destination="fNt-yb-wsf" id="3Xj-Dv-LmO"/>
<outlet property="chiffreButton" destination="uUN-bl-g4c" id="w8f-8e-vBx"/>
<outlet property="chiffreImage" destination="jIQ-qM-GVG" id="mSL-Kf-21s"/>
<outlet property="chiffreOptionView" destination="9gK-1a-7Hl" id="gXA-hF-uGd"/>
<outlet property="collectionView" destination="KRQ-Fm-3cQ" id="otM-cN-lEg"/>
<outlet property="linphoneButton" destination="8lQ-fv-INK" id="zaP-UT-K4y"/>
<outlet property="nextButton" destination="rBc-dQ-eIj" id="QHB-Xp-PTA"/>
<outlet property="selectedButtonImage" destination="ibu-Ra-oZO" id="jvl-ay-cfh"/>
<outlet property="switchView" destination="d5Q-XR-FNz" id="Xeo-ZG-6cr"/>
<outlet property="tableController" destination="4" id="18"/>
<outlet property="view" destination="5" id="14"/>
<outlet property="waitView" destination="Ztm-hK-aBp" id="qYh-M5-heN"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tapGestureRecognizer id="jFh-hw-yg2" userLabel="chiffreClick">
<connections>
<action selector="onChiffreClick:" destination="-1" id="Hz6-Ey-gAh"/>
</connections>
</tapGestureRecognizer>
<view contentMode="scaleToFill" id="WKv-mw-S2B" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_F.png" translatesAutoresizingMaskIntoConstraints="NO" id="jVg-vj-VOw" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d5Q-XR-FNz" userLabel="switchView">
<rect key="frame" x="225" y="0.0" width="150" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="r3z-SM-lMq" userLabel="allButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="All contacts filter"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<inset key="titleEdgeInsets" minX="-38" minY="15" maxX="0.0" maxY="0.0"/>
<inset key="imageEdgeInsets" minX="16" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" image="contacts_all_default.png">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="contacts_all_disabled.png"/>
<state key="selected" image="contacts_all_selected.png">
<color key="titleColor" red="0.98766469960000003" green="0.27512490750000002" blue="0.029739789660000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAllClick:" destination="-1" eventType="touchUpInside" id="TG9-Df-iTU"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_A.png" translatesAutoresizingMaskIntoConstraints="NO" id="ibu-Ra-oZO" userLabel="selectedButtonImage">
<rect key="frame" x="0.0" y="63" width="75" height="3"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8lQ-fv-INK" userLabel="sipButton" customClass="UIIconButton">
<rect key="frame" x="75" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Linphone contacts filter"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<state key="normal" image="contacts_sip_default.png">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="contacts_sip_disabled.png"/>
<state key="selected" image="contacts_sip_selected.png">
<color key="titleColor" red="0.98766469960000003" green="0.27512490750000002" blue="0.029739789660000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onLinphoneClick:" destination="-1" eventType="touchUpInside" id="wNL-jl-TU6"/>
</connections>
</button>
</subviews>
</view>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fNt-yb-wsf" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="463-Qr-hJG"/>
</connections>
</button>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9gK-1a-7Hl" userLabel="chiffreOptionView">
<rect key="frame" x="72" y="0.0" width="150" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4Be-pr-fmB">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="security_toogle_icon_grey.png"/>
<state key="disabled" image="security_toogle_icon_grey.png"/>
</button>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dH1-Al-sJ7">
<rect key="frame" x="56" y="24" width="36" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="security_toogle_background_grey.png" translatesAutoresizingMaskIntoConstraints="NO" id="jIQ-qM-GVG" userLabel="chiffreImage">
<rect key="frame" x="0.0" y="0.0" width="36" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uUN-bl-g4c" userLabel="chiffreButton">
<rect key="frame" x="0.0" y="2" width="14" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="security_toogle_button.png"/>
<connections>
<action selector="onChiffreClick:" destination="-1" eventType="touchUpInside" id="ZyW-ow-b4Y"/>
</connections>
</button>
</subviews>
<connections>
<outletCollection property="gestureRecognizers" destination="jFh-hw-yg2" appends="YES" id="kX3-iI-ZpX"/>
</connections>
</view>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9Py-cO-YGv">
<rect key="frame" x="76" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="security_toogle_icon_green.png"/>
<state key="disabled" image="security_toogle_icon_green.png"/>
</button>
</subviews>
</view>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rBc-dQ-eIj" userLabel="nextButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="next_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="next_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onNextClick:" destination="-1" eventType="touchUpInside" id="yFF-js-mRx"/>
</connections>
</button>
</subviews>
</view>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="KRQ-Fm-3cQ" userLabel="addedContacts" customClass="UICollectionView">
<rect key="frame" x="8" y="110" width="359" height="70"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<accessibility key="accessibilityConfiguration" label="addedContacts"/>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="5" y="178" width="365" height="381"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="separatorColor" red="0.67030966281890869" green="0.71867996454238892" blue="0.75078284740447998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="4" id="11"/>
<outlet property="delegate" destination="4" id="12"/>
</connections>
</tableView>
<searchBar contentMode="redraw" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Rd9-hK-nqR" userLabel="Contact address">
<rect key="frame" x="0.0" y="66" width="375" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
<connections>
<outlet property="delegate" destination="4" id="MJr-oP-Hib"/>
</connections>
</searchBar>
<view hidden="YES" tag="8" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ztm-hK-aBp" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" fixedFrame="YES" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="nqH-qD-vgE" userLabel="activityIndicatorView">
<rect key="frame" x="179" y="267" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="53.600000000000001" y="80.50974512743629"/>
</view>
<tableViewController autoresizesArchivedViewToFullSize="NO" id="4" userLabel="Suggested addresses" customClass="ChatConversationCreateTableView">
<extendedEdge key="edgesForExtendedLayout"/>
<nil key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="searchBar" destination="Rd9-hK-nqR" id="rLn-7q-CwC"/>
<outlet property="view" destination="6" id="13"/>
<outlet property="waitView" destination="Ztm-hK-aBp" id="uSB-4b-n7e"/>
</connections>
<point key="canvasLocation" x="740.79999999999995" y="80.959520239880064"/>
</tableViewController>
</objects>
<resources>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="contacts_all_default.png" width="32" height="27"/>
<image name="contacts_all_disabled.png" width="32" height="27"/>
<image name="contacts_all_selected.png" width="32" height="27"/>
<image name="contacts_sip_default.png" width="39" height="39"/>
<image name="contacts_sip_disabled.png" width="38" height="30"/>
<image name="contacts_sip_selected.png" width="39" height="39"/>
<image name="next_default.png" width="24" height="22"/>
<image name="next_disabled.png" width="24" height="22"/>
<image name="security_toogle_background_grey.png" width="52" height="27"/>
<image name="security_toogle_button.png" width="21" height="21"/>
<image name="security_toogle_icon_green.png" width="21" height="24"/>
<image name="security_toogle_icon_grey.png" width="21" height="24"/>
</resources>
</document>

View file

@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ChatConversationImdnView">
<connections>
<outlet property="msgAvatarImage" destination="LGG-kB-TaR" id="U4L-qV-ea2"/>
<outlet property="msgBackgroundColorImage" destination="wJQ-zl-d5O" id="D3d-vT-rFx"/>
<outlet property="msgBottomBar" destination="Mxm-1h-7dz" id="wS1-AL-B5M"/>
<outlet property="msgDateLabel" destination="jaE-4d-bbo" id="W3u-tE-pGo"/>
<outlet property="msgText" destination="V21-2s-obu" id="iTL-AZ-o7h"/>
<outlet property="msgView" destination="VK8-0e-Hsa" id="sWi-sR-kan"/>
<outlet property="tableView" destination="HjO-C8-Itr" id="cuC-QY-xbT"/>
<outlet property="view" destination="1g1-pp-Uhi" id="Km4-Mj-txf"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1g1-pp-Uhi" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7Tm-Jz-Rvb">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X8x-9L-bCY" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_F.png" translatesAutoresizingMaskIntoConstraints="NO" id="oDU-Wj-g7Q" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" fixedFrame="YES" text="Delivery status" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="bc0-Ql-lPE" userLabel="addressLabel">
<rect key="frame" x="112" y="0.0" width="150" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="22"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JYS-Be-ffH" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="7Fg-hr-OL1"/>
</connections>
</button>
</subviews>
</view>
<view clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VK8-0e-Hsa" userLabel="msgView">
<rect key="frame" x="8" y="74" width="359" height="89"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.20000000298023224" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_A.png" translatesAutoresizingMaskIntoConstraints="NO" id="wJQ-zl-d5O" userLabel="backgroundColorImage">
<rect key="frame" x="0.0" y="0.0" width="359" height="89"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" fixedFrame="YES" image="avatar.png" translatesAutoresizingMaskIntoConstraints="NO" id="LGG-kB-TaR" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="7" y="7" width="40" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" fixedFrame="YES" text="11:35 John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jaE-4d-bbo" userLabel="contactDateLabel">
<rect key="frame" x="55" y="8" width="279" height="14"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.98766469960000003" green="0.27512490750000002" blue="0.029739789660000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_A.png" translatesAutoresizingMaskIntoConstraints="NO" id="Mxm-1h-7dz" userLabel="bottomBarColor">
<rect key="frame" x="0.0" y="88" width="359" height="1"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
</imageView>
<textView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" editable="NO" text="Lore ipsum..." translatesAutoresizingMaskIntoConstraints="NO" id="V21-2s-obu" userLabel="messageText" customClass="UITextViewNoDefine">
<rect key="frame" x="52" y="29" width="296" height="49"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
<dataDetectorType key="dataDetectorTypes" link="YES"/>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="HjO-C8-Itr">
<rect key="frame" x="8" y="171" width="359" height="496"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="separatorColor" red="0.67030966280000004" green="0.71867996450000005" blue="0.75078284740000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</tableView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-247.5" y="14.5"/>
</view>
</objects>
<resources>
<image name="avatar.png" width="259" height="259"/>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

View file

@ -1,181 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina5_5" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ChatConversationInfoView">
<connections>
<outlet property="addButton" destination="XSI-9T-NtW" id="BlB-bn-XWt"/>
<outlet property="nameLabel" destination="69I-Un-ASz" id="qmU-o2-TmF"/>
<outlet property="nextButton" destination="0v1-qv-lPd" id="nPu-w2-iy3"/>
<outlet property="participantsBar" destination="n8e-tx-jlu" id="kNr-kM-7MJ"/>
<outlet property="quitButton" destination="Hnm-7C-dBQ" id="Kp1-Aw-FQq"/>
<outlet property="tableView" destination="pMq-Gv-0uu" id="ELS-RQ-olX"/>
<outlet property="view" destination="zgv-a8-72k" id="1Cq-i3-h2W"/>
<outlet property="waitView" destination="nt8-fb-6Re" id="zRw-iF-DnL"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="BKk-x7-cO3" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zgv-a8-72k">
<rect key="frame" x="0.0" y="42" width="414" height="628"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="pMq-Gv-0uu">
<rect key="frame" x="8" y="148" width="398" height="421"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="separatorColor" red="0.67030966280000004" green="0.71867996450000005" blue="0.75078284740000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</tableView>
<view contentMode="scaleToFill" fixedFrame="YES" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Meo-HD-uD0" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_F.png" translatesAutoresizingMaskIntoConstraints="NO" id="Sna-Ku-1Aq" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" fixedFrame="YES" text="Info" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="tJn-Nv-Duq" userLabel="addressLabel">
<rect key="frame" x="124" y="0.0" width="166" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="22"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HVD-Ql-SJG" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="83" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="MaN-Ja-qM2"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0v1-qv-lPd" userLabel="nextButton" customClass="UIIconButton">
<rect key="frame" x="331" y="0.0" width="83" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="valid_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="valid_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onNextClick:" destination="-1" eventType="touchUpInside" id="OC1-up-De3"/>
</connections>
</button>
</subviews>
</view>
<view contentMode="scaleToFill" fixedFrame="YES" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n8e-tx-jlu" userLabel="particpantsBar">
<rect key="frame" x="0.0" y="112" width="414" height="28"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_G.png" translatesAutoresizingMaskIntoConstraints="NO" id="t4R-zd-mU3" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="414" height="28"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" fixedFrame="YES" text="Participants" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="vof-h9-AN3" userLabel="participantsLabel">
<rect key="frame" x="0.0" y="0.0" width="414" height="28"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XSI-9T-NtW" userLabel="addButton" customClass="UIIconButton">
<rect key="frame" x="382" y="4" width="24" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_group_add.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="valid_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddClick:" destination="-1" eventType="touchUpInside" id="Dcn-sR-xRc"/>
</connections>
</button>
</subviews>
</view>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="Hnm-7C-dBQ" userLabel="quitButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="113" y="577" width="189" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.98273354768753052" green="0.36591529846191406" blue="0.0092478422448039055" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Use SIP account">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="LEAVE THE GROUP">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</state>
<state key="highlighted" backgroundImage="color_F.png">
<color key="titleColor" red="0.67030966280000004" green="0.71867996450000005" blue="0.75078284740000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="onQuitClick:" destination="-1" eventType="touchUpInside" id="TT0-hW-JMh"/>
</connections>
</button>
<textField opaque="NO" clipsSubviews="YES" tag="100" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Name the group" textAlignment="center" adjustsFontSizeToFit="NO" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="69I-Un-ASz" userLabel="chatRoomNameField">
<rect key="frame" x="9" y="74" width="396" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.85415387149999999" green="0.85412830110000004" blue="0.85414278509999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="ChatRoomName"/>
<color key="textColor" red="0.20521381499999999" green="0.20520767570000001" blue="0.2052111626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next" enablesReturnKeyAutomatically="YES"/>
</textField>
<view hidden="YES" tag="8" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nt8-fb-6Re" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="414" height="628"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" fixedFrame="YES" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="SNK-Vt-iQa" userLabel="activityIndicatorView">
<rect key="frame" x="199" y="301" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="31" y="88"/>
</view>
</objects>
<resources>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="chat_group_add.png" width="42" height="42"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="color_G.png" width="2" height="2"/>
<image name="valid_default.png" width="28" height="19"/>
<image name="valid_disabled.png" width="28" height="19"/>
</resources>
</document>

View file

@ -1,605 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ChatConversationView">
<connections>
<outlet property="addressLabel" destination="40" id="43"/>
<outlet property="backButton" destination="9" id="Jcb-ET-bKd"/>
<outlet property="backToCallButton" destination="Hc0-GX-fC5" id="pYe-gN-Z64"/>
<outlet property="callButton" destination="Wzg-i0-spp" id="w9L-aT-1AD"/>
<outlet property="chatView" destination="49" id="Rxt-Zy-19x"/>
<outlet property="composeIndicatorView" destination="fx4-ao-53M" id="xk5-nK-lur"/>
<outlet property="composeLabel" destination="fpY-Fv-ht2" id="4L6-ik-ZAe"/>
<outlet property="encryptedButton" destination="tjL-Vc-5gN" id="zxw-Fs-ofB"/>
<outlet property="imagesCollectionView" destination="JGQ-p2-HCX" id="6dt-1f-jpa"/>
<outlet property="imagesView" destination="3qd-ys-t2L" id="f9L-FU-PMI"/>
<outlet property="infoButton" destination="Vqb-Un-4xv" id="pa1-Iz-5QQ"/>
<outlet property="landscapeView" destination="VoU-7Q-fgp" id="iRJ-sh-thF"/>
<outlet property="listSwipeGestureRecognizer" destination="dzw-n4-l9i" id="JVP-Vl-lIa"/>
<outlet property="listTapGestureRecognizer" destination="tkk-Tm-A7C" id="gqU-iJ-RGm"/>
<outlet property="messageField" destination="pqa-tg-5ml" id="emj-yI-K60"/>
<outlet property="messageView" destination="14" id="89"/>
<outlet property="particpantsLabel" destination="Ncq-Zc-X6j" id="tQM-q1-cey"/>
<outlet property="pictureButton" destination="73" id="84"/>
<outlet property="portraitView" destination="6" id="xJJ-1H-6N6"/>
<outlet property="sendButton" destination="15" id="27"/>
<outlet property="tableController" destination="29" id="32"/>
<outlet property="topBar" destination="7" id="JH8-F4-Bdq"/>
<outlet property="view" destination="6" id="11"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="v2I-ka-LYa" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="6">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="7" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="v5G-Qf-X82" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="9" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="12"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bci-3K-AcG" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Cancel"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="29" eventType="touchUpInside" id="tdO-wP-Ttr"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="c6C-ow-Yhi"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" text="Contact1" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="40" userLabel="addressLabel">
<rect key="frame" x="75" y="0.0" width="142" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="22"/>
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Wzg-i0-spp" userLabel="callButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<state key="normal" image="call_alt_start_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_alt_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCallClick:" destination="-1" eventType="touchUpInside" id="Dsf-nS-K3V"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Hc0-GX-fC5" userLabel="backToCallButton" customClass="UIBackToCallButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<state key="normal" image="call_back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackToCallClick:" destination="-2" eventType="touchUpInside" id="bOG-ra-UpM"/>
<outlet property="tableView" destination="8" id="w1i-Px-Wdf"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Wag-Nx-kd6" userLabel="deleteButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="JoY-wC-JQy"/>
</connections>
</button>
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="FqM-Ud-i58" userLabel="editButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="29" eventType="touchUpInside" id="2Q7-xM-Shx"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="0we-lw-TyJ"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="c9z-aq-2UP" userLabel="toggleSelectionButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="deselect_all.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onSelectionToggle:" destination="29" eventType="touchUpInside" id="eP5-bU-LEA"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="Vqb-Un-4xv" userLabel="infoButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_group_informations.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onInfoClick:" destination="-1" eventType="touchUpInside" id="VfD-K7-V15"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" text="addresses" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ncq-Zc-X6j" userLabel="participantsLabel">
<rect key="frame" x="75" y="36" width="142" height="25"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<view tag="12" contentMode="scaleToFill" id="49" userLabel="contentView">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<tableView clipsSubviews="YES" tag="13" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="60" sectionHeaderHeight="22" sectionFooterHeight="22" id="8" userLabel="messagesTableView">
<rect key="frame" x="0.0" y="0.0" width="375" height="405"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
<connections>
<outlet property="dataSource" destination="29" id="6U9-NJ-Z7W"/>
<outlet property="delegate" destination="29" id="8Lv-aI-a0V"/>
<outletCollection property="gestureRecognizers" destination="dzw-n4-l9i" appends="YES" id="ba4-aY-7EA"/>
<outletCollection property="gestureRecognizers" destination="tkk-Tm-A7C" appends="YES" id="rxU-cr-Kav"/>
</connections>
</tableView>
<view hidden="YES" tag="14" contentMode="scaleToFill" id="fx4-ao-53M" userLabel="composeIndicatorView">
<rect key="frame" x="0.0" y="405" width="375" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="fpY-Fv-ht2" userLabel="composeLabel">
<rect key="frame" x="0.0" y="1" width="375" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label=""/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="16" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No conversation." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="p7C-WH-uR1" userLabel="emptyTableLabel">
<rect key="frame" x="0.0" y="0.0" width="375" height="427"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view tag="17" contentMode="scaleToFill" id="14" userLabel="messageView">
<rect key="frame" x="0.0" y="427" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="18" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="pGT-LQ-zpg" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="19" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="73" userLabel="pictureButton">
<rect key="frame" x="0.0" y="0.0" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Send picture"/>
<state key="normal" image="chat_attachment_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_attachment_disabled.png"/>
<state key="highlighted" image="chat_attachment_over.png"/>
<connections>
<action selector="onPictureClick:" destination="-1" eventType="touchUpInside" id="87"/>
</connections>
</button>
<button opaque="NO" tag="21" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="15" userLabel="sendButton">
<rect key="frame" x="310" y="0.0" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Send"/>
<inset key="titleEdgeInsets" minX="0.0" minY="30" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_send_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_send_disabled.png"/>
<state key="highlighted" image="chat_send_over.png"/>
<connections>
<action selector="onSendClick:" destination="-1" eventType="touchUpInside" id="25"/>
</connections>
</button>
<view tag="20" contentMode="scaleToFill" id="pqa-tg-5ml" userLabel="messageField" customClass="HPGrowingTextView">
<rect key="frame" x="66" y="13" width="243" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Message field"/>
</view>
</subviews>
</view>
<view clipsSubviews="YES" contentMode="scaleToFill" id="3qd-ys-t2L" userLabel="imagesView">
<rect key="frame" x="0.0" y="427" width="375" height="0.0"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="B6X-D7-Bak" userLabel="backgroundColor">
<rect key="frame" x="2" y="1" width="375" height="0.0"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsVerticalScrollIndicator="NO" dataMode="none" id="JGQ-p2-HCX" userLabel="imagesCollectionView">
<rect key="frame" x="2" y="0.0" width="374" height="0.0"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.98780487804878048" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="c7z-F2-r1y">
<size key="itemSize" width="50" height="100"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
</collectionView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="tjL-Vc-5gN" userLabel="encryptedButton">
<rect key="frame" x="320" y="10" width="34" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" image="security_1_indicator.png"/>
<connections>
<action selector="onEncryptedDevicesClick:" destination="-1" eventType="touchUpInside" id="K1W-Ao-IDg"/>
</connections>
</button>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="365.60000000000002" y="-36.431784107946029"/>
</view>
<view contentMode="scaleToFill" id="680-UL-sil" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="VoU-7Q-fgp">
<rect key="frame" x="90" y="42" width="285" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="Z3y-hY-5xp" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="285" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Uvs-m3-GPj" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="285" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="N2g-vL-3x8" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="oLf-ke-zgQ"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Bqf-Gg-2Rw" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Cancel"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="29" eventType="touchUpInside" id="EVj-uP-wVf"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="hGj-xz-K5n"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" text="Contact1" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="uEp-mD-eik" userLabel="addressLabel">
<rect key="frame" x="67" y="1" width="366" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="22"/>
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button hidden="YES" opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="RDW-7W-25T" userLabel="deleteButton" customClass="UIIconButton">
<rect key="frame" x="251" y="0.0" width="34" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="NWL-CQ-eNR"/>
</connections>
</button>
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="KeL-Ej-92j" userLabel="editButton" customClass="UIIconButton">
<rect key="frame" x="251" y="0.0" width="34" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="29" eventType="touchUpInside" id="4ei-sX-oIk"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="fNp-ya-dag"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="uVy-PC-gn9" userLabel="infoButton" customClass="UIIconButton">
<rect key="frame" x="218" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_group_informations.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onInfoClick:" destination="-1" eventType="touchUpInside" id="HQo-52-fEq"/>
</connections>
</button>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="wag-QV-oUD" userLabel="callButton" customClass="UIIconButton">
<rect key="frame" x="218" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<state key="normal" image="call_alt_start_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_alt_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCallClick:" destination="-1" eventType="touchUpInside" id="gcb-ac-VkW"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="t25-en-4LP" userLabel="backToCallButton" customClass="UIBackToCallButton">
<rect key="frame" x="218" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<state key="normal" image="call_back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackToCallClick:" destination="-2" eventType="touchUpInside" id="5cp-dW-Oc7"/>
</connections>
</button>
<button hidden="YES" opaque="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="4RV-US-Kr1" userLabel="toggleSelectionButton" customClass="UIIconButton">
<rect key="frame" x="218" y="0.0" width="33" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="deselect_all.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onSelectionToggle:" destination="29" eventType="touchUpInside" id="17V-y4-JHi"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5" contentMode="left" text="addresses" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="tyU-Wy-rLs" userLabel="participantsLabel">
<rect key="frame" x="67" y="37" width="366" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name">
<accessibilityTraits key="traits" none="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<view tag="12" contentMode="scaleToFill" id="OTt-fc-941" userLabel="contentView">
<rect key="frame" x="0.0" y="66" width="285" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<tableView clipsSubviews="YES" tag="13" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="60" sectionHeaderHeight="22" sectionFooterHeight="22" id="CU7-Za-RwN" userLabel="messagesTableView">
<rect key="frame" x="0.0" y="0.0" width="285" height="471"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
<connections>
<outlet property="dataSource" destination="29" id="hC0-KH-0e3"/>
<outlet property="delegate" destination="29" id="sSq-5N-DaD"/>
</connections>
</tableView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="16" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No conversation." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pzm-tk-LH0" userLabel="emptyTableLabel">
<rect key="frame" x="0.0" y="0.0" width="285" height="438"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="14" contentMode="scaleToFill" id="nTf-7h-Z4z" userLabel="composeIndicatorView">
<rect key="frame" x="0.0" y="471" width="285" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="I34-aL-yuS" userLabel="composeLabel">
<rect key="frame" x="0.0" y="0.0" width="285" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label=""/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view tag="17" contentMode="scaleToFill" id="LA5-wD-ftj" userLabel="messageView">
<rect key="frame" x="0.0" y="493" width="285" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="18" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="kKc-DG-gwg" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="285" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="19" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="gSL-jE-GYO" userLabel="pictureButton">
<rect key="frame" x="0.0" y="0.0" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Send picture"/>
<state key="normal" image="chat_attachment_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_attachment_disabled.png"/>
<state key="highlighted" image="chat_attachment_over.png"/>
<connections>
<action selector="onPictureClick:" destination="-1" eventType="touchUpInside" id="Ag3-po-DGR"/>
</connections>
</button>
<view tag="20" contentMode="scaleToFill" id="C02-2r-vXK" userLabel="messageField" customClass="HPGrowingTextView">
<rect key="frame" x="29" y="13" width="226" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Message field"/>
</view>
<button opaque="NO" tag="21" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="nV9-xZ-oSM" userLabel="sendButton">
<rect key="frame" x="219" y="0.0" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Send"/>
<inset key="titleEdgeInsets" minX="0.0" minY="30" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_send_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_send_disabled.png"/>
<state key="highlighted" image="chat_send_over.png"/>
<connections>
<action selector="onSendClick:" destination="-1" eventType="touchUpInside" id="dx4-lF-ekG"/>
</connections>
</button>
</subviews>
</view>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-874.39999999999998" y="-137.18140929535232"/>
</view>
<tableViewController autoresizesArchivedViewToFullSize="NO" id="29" userLabel="messagesTableView" customClass="ChatConversationTableView">
<extendedEdge key="edgesForExtendedLayout"/>
<nil key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="cancelButton" destination="bci-3K-AcG" id="ZTI-gJ-SEL"/>
<outlet property="deleteButton" destination="Wag-Nx-kd6" id="hOb-3g-mnR"/>
<outlet property="editButton" destination="FqM-Ud-i58" id="9L7-rC-Aqy"/>
<outlet property="toggleSelectionButton" destination="c9z-aq-2UP" id="a2J-JQ-rhX"/>
<outlet property="view" destination="8" id="g4m-ne-lbP"/>
</connections>
<point key="canvasLocation" x="1022.4" y="295.05247376311848"/>
</tableViewController>
<swipeGestureRecognizer direction="left" id="dzw-n4-l9i">
<connections>
<action selector="onListSwipe:" destination="-1" id="bd8-v2-u8H"/>
</connections>
</swipeGestureRecognizer>
<tapGestureRecognizer enabled="NO" id="tkk-Tm-A7C">
<connections>
<action selector="onListTap:" destination="-1" id="ejK-2Q-qkC"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="call_alt_start_default.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="call_alt_start_disabled.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="call_back_default.png" width="61.599998474121094" height="44"/>
<image name="call_back_disabled.png" width="61.599998474121094" height="44"/>
<image name="cancel_edit_default.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="cancel_edit_disabled.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="chat_attachment_default.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="chat_attachment_disabled.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="chat_attachment_over.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="chat_group_informations.png" width="38" height="38"/>
<image name="chat_send_default.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="chat_send_disabled.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="chat_send_over.png" width="65.599998474121094" height="65.599998474121094"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="delete_default.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="delete_disabled.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="deselect_all.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="security_1_indicator.png" width="27.5" height="32.5"/>
<image name="select_all_default.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="select_all_disabled.png" width="43.200000762939453" height="43.200000762939453"/>
</resources>
</document>

Binary file not shown.

View file

@ -1,210 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ChatsListView">
<connections>
<outlet property="addButton" destination="Z5G-IF-PBY" id="Tzw-rz-Bwe"/>
<outlet property="addGroupChatButton" destination="glf-ni-nqe" id="0hy-5m-7C7"/>
<outlet property="backToCallButton" destination="Fac-hy-za4" id="8I3-TM-oJ7"/>
<outlet property="tableController" destination="4" id="18"/>
<outlet property="view" destination="5" id="14"/>
<outlet property="waitView" destination="cpj-Jc-imm" id="t7Q-YM-znJ"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="WKv-mw-S2B" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="5">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" id="7" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="jVg-vj-VOw" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="Z5G-IF-PBY" userLabel="addButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="New discussion"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_add_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_add_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddClick:" destination="-1" eventType="touchUpInside" id="g4q-By-6nW"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="glf-ni-nqe" userLabel="addGroupButton">
<rect key="frame" x="75" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="New discussion"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="chat_add_group.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_add_group.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddGroupChatClick:" destination="-1" eventType="touchUpInside" id="tem-mm-w62"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="KhE-c3-2Zj" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="4" eventType="touchUpInside" id="8xd-cU-loG"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="hKF-q1-5DJ"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Fac-hy-za4" userLabel="backToCallButton" customClass="UIBackToCallButton">
<rect key="frame" x="150" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<state key="normal" image="call_back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackToCallClick:" destination="-2" eventType="touchUpInside" id="eUD-Gk-qji"/>
<outlet property="tableView" destination="6" id="ePS-cV-S6m"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="uqG-2T-VOa" userLabel="toggleSelectionButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="deselect_all.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onSelectionToggle:" destination="4" eventType="touchUpInside" id="ct6-0c-d1q"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Rxo-0W-iqY" userLabel="deleteButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="m6p-pf-GLX"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="qem-Y1-v78" userLabel="editButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="4" eventType="touchUpInside" id="COv-sY-0TU"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="e2C-A0-kjU"/>
</connections>
</button>
</subviews>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="60" sectionHeaderHeight="22" sectionFooterHeight="22" id="6" userLabel="tableView">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<color key="separatorColor" red="0.67030966281890869" green="0.71867996454238892" blue="0.75078284740447998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="4" id="11"/>
<outlet property="delegate" destination="4" id="12"/>
</connections>
</tableView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No conversations" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="MSn-PY-yf1" userLabel="emptyTableLabel">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="8" contentMode="scaleToFill" id="cpj-Jc-imm" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="DjR-Dv-uoX" userLabel="activityIndicatorView">
<rect key="frame" x="179" y="267" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="52" y="93.103448275862078"/>
</view>
<tableViewController autoresizesArchivedViewToFullSize="NO" id="4" userLabel="tableController" customClass="ChatsListTableView">
<extendedEdge key="edgesForExtendedLayout"/>
<nil key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="cancelButton" destination="KhE-c3-2Zj" id="0BM-Q1-ZaR"/>
<outlet property="deleteButton" destination="Rxo-0W-iqY" id="vsb-dD-1zl"/>
<outlet property="editButton" destination="qem-Y1-v78" id="Ba4-I1-fI5"/>
<outlet property="emptyView" destination="MSn-PY-yf1" id="C72-01-4pD"/>
<outlet property="toggleSelectionButton" destination="uqG-2T-VOa" id="ytx-bj-7Qr"/>
<outlet property="view" destination="6" id="13"/>
</connections>
</tableViewController>
</objects>
<resources>
<image name="call_back_default.png" width="61.599998474121094" height="44"/>
<image name="call_back_disabled.png" width="61.599998474121094" height="44"/>
<image name="cancel_edit_default.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="cancel_edit_disabled.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="chat_add_default.png" width="50.400001525878906" height="44.799999237060547"/>
<image name="chat_add_group.png" width="64" height="42.400001525878906"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="delete_default.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="delete_disabled.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="deselect_all.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="select_all_default.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="select_all_disabled.png" width="43.200000762939453" height="43.200000762939453"/>
</resources>
</document>

View file

@ -1,333 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13527"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ContactDetailsView">
<connections>
<outlet property="avatarImage" destination="B6X-C9-2vm" id="tQc-xv-nJg"/>
<outlet property="backButton" destination="9" id="50"/>
<outlet property="cancelButton" destination="bPQ-aJ-Lk6" id="QHN-qi-QNv"/>
<outlet property="contentView" destination="8D6-vy-obt" id="GZW-ov-Wfv"/>
<outlet property="deleteButton" destination="MuB-yy-R9o" id="cni-lk-awn"/>
<outlet property="editButton" destination="8" id="31"/>
<outlet property="emptyLabel" destination="Mdj-Pz-nu4" id="ijc-2c-waE"/>
<outlet property="landscapeView" destination="lgD-Mw-h57" id="DTS-80-rMM"/>
<outlet property="nameLabel" destination="moZ-Bg-zcv" id="Lt9-h0-2o1"/>
<outlet property="portraitView" destination="1" id="k69-5P-ieM"/>
<outlet property="tableController" destination="20" id="27"/>
<outlet property="view" destination="1" id="3"/>
<outlet property="waitView" destination="JK8-Td-I1i" id="nFS-hz-vYl"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="XnN-PU-Vk7" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="4" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Lb6-xa-LB6" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button hidden="YES" opaque="NO" tag="3" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bPQ-aJ-Lk6" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="-1" eventType="touchUpInside" id="yyu-9r-MIh"/>
</connections>
</button>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="9" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="10"/>
</connections>
</button>
<button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="MuB-yy-R9o" userLabel="deleteButton" customClass="UIToggleButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="vxj-6p-8lE"/>
</connections>
</button>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8" userLabel="editButton" customClass="UIToggleButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="edit_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="edit_disabled.png"/>
<state key="selected" image="valid_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="-1" eventType="touchUpInside" id="30"/>
</connections>
</button>
</subviews>
</view>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="7" contentMode="scaleToFill" directionalLockEnabled="YES" showsHorizontalScrollIndicator="NO" id="8D6-vy-obt" userLabel="contentView">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar.png" id="B6X-C9-2vm" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="142" y="10" width="90" height="90"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<outletCollection property="gestureRecognizers" destination="8bV-f4-pLL" appends="YES" id="4V5-Px-aHT"/>
</connections>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="9" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="moZ-Bg-zcv" userLabel="nameLabel">
<rect key="frame" x="0.0" y="108" width="375" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="27"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="19" userLabel="tableView">
<rect key="frame" x="0.0" y="156" width="375" height="337"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<connections>
<outlet property="dataSource" destination="20" id="28"/>
<outlet property="delegate" destination="20" id="29"/>
</connections>
</tableView>
</subviews>
</scrollView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="40" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No contact selected" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Mdj-Pz-nu4" userLabel="emptyLabel">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="8" contentMode="scaleToFill" misplaced="YES" id="JK8-Td-I1i" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="J67-KE-kHm" userLabel="activityIndicatorView">
<rect key="frame" x="179" y="267" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-436.5" y="192.5"/>
</view>
<view contentMode="scaleToFill" id="gnD-7x-PSh" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="lgD-Mw-h57">
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="L0a-sZ-jGX" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="WKb-RL-2xW" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button hidden="YES" opaque="NO" tag="3" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="XGy-cw-7de" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="133" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="-1" eventType="touchUpInside" id="v96-rt-8t6"/>
</connections>
</button>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="XFH-3u-WFI" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="133" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="9Bf-9b-t68"/>
</connections>
</button>
<button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="XSh-gg-HmZ" userLabel="deleteButton" customClass="UIToggleButton">
<rect key="frame" x="400" y="0.0" width="134" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="9ng-e2-HNr"/>
</connections>
</button>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="tQx-Wr-TFA" userLabel="editButton" customClass="UIToggleButton">
<rect key="frame" x="534" y="0.0" width="133" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="edit_default.png">
<color key="titleColor" red="0.28619974851608276" green="0.32144349813461304" blue="0.35980013012886047" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="edit_disabled.png"/>
<state key="selected" image="valid_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="-1" eventType="touchUpInside" id="ZOh-tv-N0H"/>
</connections>
</button>
</subviews>
</view>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="7" contentMode="scaleToFill" directionalLockEnabled="YES" showsHorizontalScrollIndicator="NO" id="8D6-vy-oby" userLabel="contentView">
<rect key="frame" x="0.0" y="66" width="667" height="267"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<imageView tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar.png" id="IJJ-eZ-rC2" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="46" y="8" width="62" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="9" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ozv-hZ-xHz" userLabel="nameLabel">
<rect key="frame" x="116" y="8" width="551" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="27"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="WMA-Yo-NbI" userLabel="tableView" customClass="TPKeyboardAvoidingTableView">
<rect key="frame" x="0.0" y="84" width="667" height="183"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<connections>
<outlet property="dataSource" destination="20" id="YTH-Qp-Xwq"/>
<outlet property="delegate" destination="20" id="C42-FH-IyU"/>
</connections>
</tableView>
</subviews>
</scrollView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="40" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No contact selected" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oFA-SG-IDe" userLabel="emptyLabel">
<rect key="frame" x="0.0" y="66" width="667" height="267"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="8" contentMode="scaleToFill" misplaced="YES" id="EdP-53-rq9" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="T1j-jc-5iP" userLabel="activityIndicatorView">
<rect key="frame" x="326" y="155" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="25.5" y="275.5"/>
</view>
<tableViewController id="20" userLabel="tableController" customClass="ContactDetailsTableView">
<extendedEdge key="edgesForExtendedLayout"/>
<connections>
<outlet property="editButton" destination="8" id="wZf-wX-YIu"/>
<outlet property="view" destination="19" id="26"/>
</connections>
</tableViewController>
<tapGestureRecognizer id="8bV-f4-pLL" userLabel="onAvatarClick">
<connections>
<action selector="onAvatarClick:" destination="-1" id="olM-C9-dHO"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="avatar.png" width="259" height="259"/>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="cancel_edit_default.png" width="29" height="29"/>
<image name="cancel_edit_disabled.png" width="29" height="29"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="delete_default.png" width="21" height="28"/>
<image name="delete_disabled.png" width="21" height="28"/>
<image name="edit_default.png" width="29" height="29"/>
<image name="edit_disabled.png" width="29" height="29"/>
<image name="valid_default.png" width="28" height="19"/>
</resources>
</document>

View file

@ -1,227 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ContactsListView">
<connections>
<outlet property="addButton" destination="6" id="91"/>
<outlet property="allButton" destination="4" id="27"/>
<outlet property="linphoneButton" destination="5" id="31"/>
<outlet property="searchBar" destination="5jE-oF-d45" id="xfS-xo-2Bm"/>
<outlet property="selectedButtonImage" destination="A9k-KU-Dlm" id="4dX-pd-Y2D"/>
<outlet property="tableController" destination="TJG-JZ-YRR" id="0lt-gC-EOm"/>
<outlet property="topBar" destination="3" id="w1O-2o-b18"/>
<outlet property="view" destination="2" id="16"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1YR-9t-hRk" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="2">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="3" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Ehd-EB-dCJ" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<view contentMode="scaleToFill" id="93" userLabel="switchView">
<rect key="frame" x="0.0" y="0.0" width="150" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="4" userLabel="allButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="All contacts filter"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<inset key="titleEdgeInsets" minX="-38" minY="15" maxX="0.0" maxY="0.0"/>
<inset key="imageEdgeInsets" minX="16" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" image="contacts_all_default.png">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="contacts_all_disabled.png"/>
<state key="selected" image="contacts_all_selected.png">
<color key="titleColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAllClick:" destination="-1" eventType="touchUpInside" id="29"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_A.png" id="A9k-KU-Dlm" userLabel="selectedButtonImage">
<rect key="frame" x="0.0" y="63" width="75" height="3"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="5" userLabel="sipButton" customClass="UIIconButton">
<rect key="frame" x="75" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Linphone contacts filter"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<state key="normal" image="contacts_sip_default.png">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="contacts_sip_disabled.png"/>
<state key="selected" image="contacts_sip_selected.png">
<color key="titleColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onLinphoneClick:" destination="-1" eventType="touchUpInside" id="47"/>
</connections>
</button>
</subviews>
</view>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="MZP-cb-ntf" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="TJG-JZ-YRR" eventType="touchUpInside" id="1nW-5f-kbI"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="PL4-Js-Xvg"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="tFB-Vf-lUX" userLabel="deleteButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="VJS-p2-Jsp"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="DZc-zR-1Q7" userLabel="editButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="TJG-JZ-YRR" eventType="touchUpInside" id="CKU-6b-3F2"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="uvi-82-4ka"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="5lZ-u7-Yex" userLabel="toggleSelectionButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="deselect_all.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onSelectionToggle:" destination="TJG-JZ-YRR" eventType="touchUpInside" id="YcH-HT-zyi"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="6" userLabel="addButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="contact_add_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="86"/>
</connections>
</button>
</subviews>
</view>
<searchBar contentMode="redraw" showsCancelButton="YES" id="5jE-oF-d45" userLabel="searchBar">
<rect key="frame" x="0.0" y="66" width="375" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<textInputTraits key="textInputTraits"/>
<connections>
<outlet property="delegate" destination="-1" id="Fk3-Tl-dY0"/>
</connections>
</searchBar>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="zOo-FS-W6l" userLabel="tableView">
<rect key="frame" x="0.0" y="110" width="375" height="449"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<color key="separatorColor" red="0.67030966281890869" green="0.71867996454238892" blue="0.75078284740447998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="TJG-JZ-YRR" id="334-RR-jEi"/>
<outlet property="delegate" destination="TJG-JZ-YRR" id="V1N-gI-U4J"/>
</connections>
</tableView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No contact found in your address book" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="JR3-k7-gVP" userLabel="emptyTableLabel">
<rect key="frame" x="0.0" y="110" width="375" height="449"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="6.5217391304347831" y="142.29910714285714"/>
</view>
<tableViewController id="TJG-JZ-YRR" userLabel="tableController" customClass="ContactsListTableView">
<connections>
<outlet property="cancelButton" destination="MZP-cb-ntf" id="4Hf-l6-Qyp"/>
<outlet property="deleteButton" destination="tFB-Vf-lUX" id="dF5-uF-nhK"/>
<outlet property="editButton" destination="DZc-zR-1Q7" id="TkL-MM-OFA"/>
<outlet property="emptyView" destination="JR3-k7-gVP" id="3vV-F3-Eit"/>
<outlet property="toggleSelectionButton" destination="5lZ-u7-Yex" id="C99-nu-2wJ"/>
<outlet property="view" destination="zOo-FS-W6l" id="cM7-Da-i7e"/>
</connections>
<point key="canvasLocation" x="739.13043478260875" y="137.94642857142856"/>
</tableViewController>
</objects>
<resources>
<image name="cancel_edit_default.png" width="23.200000762939453" height="23.200000762939453"/>
<image name="cancel_edit_disabled.png" width="23.200000762939453" height="23.200000762939453"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="contact_add_default.png" width="27.200000762939453" height="23.200000762939453"/>
<image name="contact_add_disabled.png" width="27.200000762939453" height="23.200000762939453"/>
<image name="contacts_all_default.png" width="25.600000381469727" height="21.600000381469727"/>
<image name="contacts_all_disabled.png" width="25.600000381469727" height="21.600000381469727"/>
<image name="contacts_all_selected.png" width="25.600000381469727" height="21.600000381469727"/>
<image name="contacts_sip_default.png" width="38" height="38"/>
<image name="contacts_sip_disabled.png" width="38" height="30"/>
<image name="contacts_sip_selected.png" width="38" height="38"/>
<image name="delete_default.png" width="16.799999237060547" height="21.600000381469727"/>
<image name="delete_disabled.png" width="16.799999237060547" height="21.600000381469727"/>
<image name="deselect_all.png" width="20.799999237060547" height="20.799999237060547"/>
<image name="select_all_default.png" width="20.799999237060547" height="20.799999237060547"/>
<image name="select_all_disabled.png" width="20.799999237060547" height="20.799999237060547"/>
</resources>
</document>

View file

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CountryListView">
<connections>
<outlet property="searchDisplayController" destination="Fzt-cO-ZZd" id="yWw-yG-tfg"/>
<outlet property="tableView" destination="UcW-gD-iwL" id="878-PR-Gn9"/>
<outlet property="view" destination="1" id="3"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="418-8u-hzT" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Rq2-JR-1jE" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SELECT A COUNTRY" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="MLt-gO-M3J" userLabel="titleLabel">
<rect key="frame" x="83" y="0.0" width="209" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="hOj-Kl-K9W" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="-1" eventType="touchUpInside" id="DTU-Ur-aPJ"/>
</connections>
</button>
</subviews>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" rowHeight="40" sectionHeaderHeight="22" sectionFooterHeight="22" id="UcW-gD-iwL">
<rect key="frame" x="0.0" y="109" width="375" height="558"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="separatorColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/>
<connections>
<outlet property="dataSource" destination="-1" id="29f-d6-ctV"/>
<outlet property="delegate" destination="-1" id="Dg5-gz-Qgm"/>
</connections>
</tableView>
<searchBar contentMode="redraw" id="Ipz-Nn-2z3">
<rect key="frame" x="0.0" y="65" width="375" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textInputTraits key="textInputTraits"/>
<connections>
<outlet property="delegate" destination="-1" id="iL7-Xf-Ila"/>
</connections>
</searchBar>
</subviews>
<color key="backgroundColor" red="0.93620026111602783" green="0.94070994853973389" blue="0.95069998502731323" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="simulatedStatusBarMetrics"/>
</view>
<searchDisplayController id="Fzt-cO-ZZd">
<connections>
<outlet property="delegate" destination="-1" id="TiS-Oi-O2O"/>
<outlet property="searchBar" destination="Ipz-Nn-2z3" id="MMD-qU-wyt"/>
<outlet property="searchContentsController" destination="-1" id="CXr-Rc-c3m"/>
<outlet property="searchResultsDataSource" destination="-1" id="D0N-dF-fAE"/>
<outlet property="searchResultsDelegate" destination="-1" id="hKg-ZM-V4D"/>
</connections>
</searchDisplayController>
</objects>
<resources>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,343 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="DialerView">
<connections>
<outlet property="addContactButton" destination="222" id="225"/>
<outlet property="addressField" destination="4" id="205"/>
<outlet property="backButton" destination="183" id="d75-ly-K6w"/>
<outlet property="backspaceButton" destination="8dc-hj-rvt" id="6p9-p4-QAN"/>
<outlet property="callButton" destination="224" id="231"/>
<outlet property="eightButton" destination="35" id="204"/>
<outlet property="fiveButton" destination="31" id="195"/>
<outlet property="fourButton" destination="30" id="194"/>
<outlet property="hashButton" destination="41" id="4Vx-Tl-ywI"/>
<outlet property="landscapeView" destination="171" id="mdM-t5-k4V"/>
<outlet property="nineButton" destination="36" id="200"/>
<outlet property="oneButton" destination="38" id="191"/>
<outlet property="padView" destination="180" id="bxG-9v-Pvj"/>
<outlet property="portraitView" destination="171" id="GLX-cG-iOA"/>
<outlet property="sevenButton" destination="34" id="197"/>
<outlet property="sixButton" destination="33" id="196"/>
<outlet property="starButton" destination="39" id="199"/>
<outlet property="threeButton" destination="29" id="193"/>
<outlet property="twoButton" destination="37" id="192"/>
<outlet property="view" destination="171" id="176"/>
<outlet property="zeroButton" destination="40" id="198"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="qaB-qV-B0p" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="540" height="960"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="171">
<rect key="frame" x="0.0" y="42" width="540" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" id="178" userLabel="dialer">
<rect key="frame" x="0.0" y="0.0" width="540" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="56Z-ia-Pln" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="540" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<textField opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter a number or an address" adjustsFontSizeToFit="NO" minimumFontSize="5" id="4" userLabel="addressField" customClass="UIAddressTextField">
<rect key="frame" x="31" y="0.0" width="426" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration" label="Enter an address"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" returnKeyType="join"/>
<connections>
<action selector="onAddressChange:" destination="-1" eventType="editingChanged" id="FdS-Kl-3dS"/>
<outlet property="delegate" destination="-1" id="190"/>
</connections>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8dc-hj-rvt" userLabel="backspaceButton" customClass="UIIconButton">
<rect key="frame" x="475" y="0.0" width="60" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<state key="normal" image="backspace_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="backspace_disabled.png"/>
<state key="highlighted" image="backspace_over.png"/>
<connections>
<action selector="onBackspaceClick:" destination="-1" eventType="touchUpInside" id="sWE-Ch-kAr"/>
</connections>
</button>
</subviews>
</view>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dialer_background.png" id="AH0-S5-0Ku" userLabel="logoImage">
<rect key="frame" x="100" y="279" width="340" height="294"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<view contentMode="scaleToFill" id="180" userLabel="pad">
<rect key="frame" x="0.0" y="66" width="540" height="720"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="38" userLabel="1" customClass="UIDigitButton">
<rect key="frame" x="0.0" y="0.0" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
<accessibility key="accessibilityConfiguration" label="1"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_1_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="240"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="37" userLabel="2" customClass="UIDigitButton">
<rect key="frame" x="184" y="0.0" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="2"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_2_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="241"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="29" userLabel="3" customClass="UIDigitButton">
<rect key="frame" x="367" y="0.0" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="3"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_3_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="242"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="30" userLabel="4" customClass="UIDigitButton">
<rect key="frame" x="0.0" y="180" width="173" height="171"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="4"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_4_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="243"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="31" userLabel="5" customClass="UIDigitButton">
<rect key="frame" x="184" y="180" width="173" height="171"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="5"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_5_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="244"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="33" userLabel="6" customClass="UIDigitButton">
<rect key="frame" x="367" y="180" width="173" height="171"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="6"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_6_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="245"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="34" userLabel="7" customClass="UIDigitButton">
<rect key="frame" x="0.0" y="361" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="7"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_7_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="246"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="35" userLabel="8" customClass="UIDigitButton">
<rect key="frame" x="184" y="361" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="8"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_8_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="247"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="36" userLabel="9" customClass="UIDigitButton">
<rect key="frame" x="367" y="361" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="9"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_9_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="248"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="39" userLabel="*" customClass="UIDigitButton">
<rect key="frame" x="0.0" y="543" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Star"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_star_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="249"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="40" userLabel="0" customClass="UIDigitButton">
<rect key="frame" x="184" y="543" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="0"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_0_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="250"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="41" userLabel="#" customClass="UIDigitButton">
<rect key="frame" x="367" y="543" width="173" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Hash"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_hash_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_hash_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="251"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<view contentMode="scaleToFill" id="182" userLabel="bottomBar">
<rect key="frame" x="0.0" y="786" width="540" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="183" userLabel="backButton">
<rect key="frame" x="0.0" y="0.0" width="180" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_alt_back_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_alt_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="233"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="222" userLabel="addContactButton">
<rect key="frame" x="0.0" y="0.0" width="180" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Add to contact"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="contact_add_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="230"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="224" userLabel="callButton" customClass="UICallButton">
<rect key="frame" x="180" y="0.0" width="360" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Call"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<outlet property="addressField" destination="4" id="235"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="-68" y="223"/>
</view>
</objects>
<resources>
<image name="backspace_default.png" width="36" height="19"/>
<image name="backspace_disabled.png" width="36" height="19"/>
<image name="backspace_over.png" width="36" height="19"/>
<image name="call_alt_back_default.png" width="50" height="36"/>
<image name="call_alt_back_disabled.png" width="50" height="36"/>
<image name="call_audio_start_default.png" width="36" height="36"/>
<image name="call_audio_start_disabled.png" width="36" height="36"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="color_L.png" width="2" height="2"/>
<image name="contact_add_default.png" width="34" height="29"/>
<image name="contact_add_disabled.png" width="34" height="29"/>
<image name="dialer_background.png" width="408" height="350"/>
<image name="numpad_0_default.png" width="52" height="48"/>
<image name="numpad_0_over.png" width="52" height="48"/>
<image name="numpad_1_default.png" width="52" height="48"/>
<image name="numpad_1_over.png" width="52" height="48"/>
<image name="numpad_2_default.png" width="52" height="48"/>
<image name="numpad_2_over.png" width="52" height="48"/>
<image name="numpad_3_default.png" width="52" height="48"/>
<image name="numpad_3_over.png" width="52" height="48"/>
<image name="numpad_4_default.png" width="52" height="48"/>
<image name="numpad_4_over.png" width="52" height="48"/>
<image name="numpad_5_default.png" width="52" height="48"/>
<image name="numpad_5_over.png" width="52" height="48"/>
<image name="numpad_6_default.png" width="52" height="48"/>
<image name="numpad_6_over.png" width="52" height="48"/>
<image name="numpad_7_default.png" width="52" height="48"/>
<image name="numpad_7_over.png" width="52" height="48"/>
<image name="numpad_8_default.png" width="52" height="48"/>
<image name="numpad_8_over.png" width="52" height="48"/>
<image name="numpad_9_default.png" width="52" height="48"/>
<image name="numpad_9_over.png" width="52" height="48"/>
<image name="numpad_hash_default.png" width="52" height="48"/>
<image name="numpad_hash_over.png" width="52" height="48"/>
<image name="numpad_over_background.png" width="2" height="2"/>
<image name="numpad_star_default.png" width="52" height="50"/>
<image name="numpad_star_over.png" width="52" height="50"/>
</resources>
</document>

View file

@ -1,677 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="DialerView">
<connections>
<outlet property="addContactButton" destination="222" id="225"/>
<outlet property="addressField" destination="4" id="205"/>
<outlet property="backButton" destination="183" id="d75-ly-K6w"/>
<outlet property="backspaceButton" destination="8dc-hj-rvt" id="6p9-p4-QAN"/>
<outlet property="callButton" destination="224" id="231"/>
<outlet property="eightButton" destination="35" id="204"/>
<outlet property="fiveButton" destination="31" id="195"/>
<outlet property="fourButton" destination="30" id="194"/>
<outlet property="hashButton" destination="41" id="4Vx-Tl-ywI"/>
<outlet property="landscapeView" destination="MqR-YI-CLm" id="18Z-8w-XWB"/>
<outlet property="nineButton" destination="36" id="200"/>
<outlet property="oneButton" destination="38" id="191"/>
<outlet property="portraitView" destination="171" id="yo2-xo-4wI"/>
<outlet property="sevenButton" destination="34" id="197"/>
<outlet property="sixButton" destination="33" id="196"/>
<outlet property="starButton" destination="39" id="199"/>
<outlet property="threeButton" destination="29" id="193"/>
<outlet property="twoButton" destination="37" id="192"/>
<outlet property="videoPreview" destination="30b-JN-Ibj" id="Kwj-av-WIg"/>
<outlet property="view" destination="171" id="176"/>
<outlet property="zeroButton" destination="40" id="198"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="qaB-qV-B0p" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="800" height="1290"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="171">
<rect key="frame" x="0.0" y="60" width="800" height="1130"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="1" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_D.png" id="PI3-CU-FXR" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="800" height="1130"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dialer_background.png" id="tsy-aZ-cHg" userLabel="logoImage">
<rect key="frame" x="8" y="112" width="784" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</imageView>
<view tag="3" contentMode="scaleAspectFill" id="30b-JN-Ibj" userLabel="preview">
<rect key="frame" x="0.0" y="0.0" width="800" height="1210"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view tag="4" contentMode="scaleAspectFit" id="g6f-Xa-Veg">
<rect key="frame" x="245" y="600" width="310" height="450"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view clipsSubviews="YES" tag="5" contentMode="scaleToFill" id="178" userLabel="dialer">
<rect key="frame" x="0.0" y="0.0" width="310" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="6" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="56Z-ia-Pln" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="310" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<textField opaque="NO" clearsContextBeforeDrawing="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter a number or an address" adjustsFontSizeToFit="NO" minimumFontSize="5" id="4" userLabel="addressField" customClass="UIAddressTextField">
<rect key="frame" x="8" y="0.0" width="239" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration" label="Enter an address"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" returnKeyType="join"/>
<connections>
<action selector="onAddressChange:" destination="-1" eventType="editingChanged" id="FdS-Kl-3dS"/>
<outlet property="delegate" destination="-1" id="190"/>
</connections>
</textField>
<button opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8dc-hj-rvt" userLabel="backspaceButton" customClass="UIIconButton">
<rect key="frame" x="245" y="0.0" width="60" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<state key="normal" image="backspace_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="backspace_disabled.png"/>
<state key="highlighted" image="backspace_over.png"/>
<connections>
<action selector="onBackspaceClick:" destination="-1" eventType="touchUpInside" id="sWE-Ch-kAr"/>
</connections>
</button>
</subviews>
</view>
<view tag="9" contentMode="scaleToFill" id="180" userLabel="pad">
<rect key="frame" x="0.0" y="80" width="310" height="290"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="38" userLabel="1" customClass="UIDigitButton">
<rect key="frame" x="27" y="8" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
<accessibility key="accessibilityConfiguration" label="1"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_1_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="240"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="37" userLabel="2" customClass="UIDigitButton">
<rect key="frame" x="130" y="8" width="49" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="2"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_2_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="241"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="29" userLabel="3" customClass="UIDigitButton">
<rect key="frame" x="232" y="8" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="3"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_3_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="242"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="13" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="30" userLabel="4" customClass="UIDigitButton">
<rect key="frame" x="27" y="78" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="4"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_4_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="243"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="14" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="31" userLabel="5" customClass="UIDigitButton">
<rect key="frame" x="130" y="78" width="49" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="5"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_5_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="244"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="15" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="33" userLabel="6" customClass="UIDigitButton">
<rect key="frame" x="232" y="78" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="6"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_6_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="245"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="34" userLabel="7" customClass="UIDigitButton">
<rect key="frame" x="27" y="150" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="7"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_7_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="246"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="17" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="35" userLabel="8" customClass="UIDigitButton">
<rect key="frame" x="130" y="150" width="49" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="8"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_8_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="247"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="18" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="36" userLabel="9" customClass="UIDigitButton">
<rect key="frame" x="232" y="150" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="9"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_9_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="248"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="19" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="39" userLabel="*" customClass="UIDigitButton">
<rect key="frame" x="27" y="223" width="50" height="61"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Star"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_star_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="249"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="20" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="40" userLabel="0" customClass="UIDigitButton">
<rect key="frame" x="130" y="223" width="49" height="61"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="0"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_0_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="250"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="21" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="41" userLabel="#" customClass="UIDigitButton">
<rect key="frame" x="232" y="223" width="50" height="61"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Hash"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_hash_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_hash_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="4" id="251"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view tag="22" contentMode="scaleToFill" id="182" userLabel="bottomBar">
<rect key="frame" x="0.0" y="370" width="310" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button hidden="YES" opaque="NO" tag="23" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="183" userLabel="backButton">
<rect key="frame" x="0.0" y="0.0" width="102" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_alt_back_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_alt_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="233"/>
</connections>
</button>
<button opaque="NO" tag="24" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="222" userLabel="addContactButton">
<rect key="frame" x="0.0" y="0.0" width="102" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Add to contact"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="contact_add_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="230"/>
</connections>
</button>
<button opaque="NO" tag="25" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="224" userLabel="callButton" customClass="UICallButton">
<rect key="frame" x="102" y="0.0" width="208" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Call"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<outlet property="addressField" destination="4" id="235"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<button opaque="NO" tag="28" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="Ufj-N6-yzz" userLabel="videoCameraSwitch" customClass="UICamSwitch">
<rect key="frame" x="52" y="52" width="52" height="52"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Switch camera"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="camera_switch_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="camera_switch_disabled.png"/>
<state key="selected" image="camera_switch_over.png"/>
<state key="highlighted" image="camera_switch_over.png"/>
<connections>
<outlet property="preview" destination="30b-JN-Ibj" id="k1G-ea-6Rx"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="-68" y="222"/>
</view>
<view contentMode="scaleToFill" id="bb3-7f-P2J" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="1290" height="800"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="MqR-YI-CLm">
<rect key="frame" x="50" y="30" width="1240" height="770"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="1" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_D.png" id="zau-s9-ek6" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="1240" height="770"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dialer_background.png" id="bV0-6N-YFL" userLabel="logoImage">
<rect key="frame" x="143" y="265" width="240" height="240"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</imageView>
<view tag="3" contentMode="scaleAspectFill" id="lTn-ab-KJ5" userLabel="preview">
<rect key="frame" x="0.0" y="0.0" width="1240" height="770"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view tag="4" contentMode="scaleToFill" id="PoL-pc-Siz">
<rect key="frame" x="800" y="150" width="308" height="450"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view clipsSubviews="YES" tag="5" contentMode="scaleToFill" id="bWv-bb-iGU" userLabel="dialer">
<rect key="frame" x="0.0" y="0.0" width="308" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="6" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="oRb-An-MG9" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="308" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<textField opaque="NO" clearsContextBeforeDrawing="NO" tag="7" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter a number or an address" adjustsFontSizeToFit="NO" minimumFontSize="5" id="Omx-NU-xKz" userLabel="addressField" customClass="UIAddressTextField">
<rect key="frame" x="8" y="0.0" width="237" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration" label="Enter an address"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" returnKeyType="join"/>
<connections>
<action selector="onAddressChange:" destination="-1" eventType="editingChanged" id="Mrk-Jf-aVG"/>
<outlet property="delegate" destination="-1" id="I1Q-pW-WqW"/>
</connections>
</textField>
<button opaque="NO" tag="8" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Zzz-qk-9Nv" userLabel="backspaceButton" customClass="UIIconButton">
<rect key="frame" x="243" y="0.0" width="60" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<state key="normal" image="backspace_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="backspace_disabled.png"/>
<state key="highlighted" image="backspace_over.png"/>
<connections>
<action selector="onBackspaceClick:" destination="-1" eventType="touchUpInside" id="a6G-bZ-MUN"/>
</connections>
</button>
</subviews>
</view>
<view tag="9" contentMode="scaleToFill" id="WVV-JM-vAB" userLabel="pad">
<rect key="frame" x="0.0" y="80" width="308" height="290"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="10" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="XNH-ME-cgh" userLabel="1" customClass="UIDigitButton">
<rect key="frame" x="27" y="9" width="50" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
<accessibility key="accessibilityConfiguration" label="1"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_1_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="fde-ao-erE"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="80y-z2-xNu" userLabel="2" customClass="UIDigitButton">
<rect key="frame" x="127" y="9" width="50" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="2"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_2_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="dgP-Dh-hKr"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="2VD-Qx-3nV" userLabel="3" customClass="UIDigitButton">
<rect key="frame" x="231" y="9" width="48" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="3"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_3_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="GJu-8d-P6C"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="13" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="0v7-Yf-R1e" userLabel="4" customClass="UIDigitButton">
<rect key="frame" x="27" y="74" width="50" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="4"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_4_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="LLR-dd-7Bw"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="14" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="uoL-3m-hHe" userLabel="5" customClass="UIDigitButton">
<rect key="frame" x="127" y="74" width="50" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="5"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_5_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="aYv-Av-5ln"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="15" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="O8K-fk-DbU" userLabel="6" customClass="UIDigitButton">
<rect key="frame" x="231" y="74" width="48" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="6"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_6_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="18X-Wm-Y74"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bc0-Lq-cOG" userLabel="7" customClass="UIDigitButton">
<rect key="frame" x="27" y="148" width="50" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="7"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_7_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="WlQ-5m-Q74"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="17" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="4qk-Qr-8je" userLabel="8" customClass="UIDigitButton">
<rect key="frame" x="127" y="148" width="50" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="8"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_8_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="Flg-0Q-Ajz"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="18" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="EXT-Ir-0wP" userLabel="9" customClass="UIDigitButton">
<rect key="frame" x="231" y="148" width="48" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="9"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_9_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="HhR-xs-sWe"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="19" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="G19-A6-Rxb" userLabel="*" customClass="UIDigitButton">
<rect key="frame" x="27" y="223" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Star"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_star_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="r6k-FB-rTc"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="20" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="X2v-mg-lUX" userLabel="0" customClass="UIDigitButton">
<rect key="frame" x="127" y="223" width="50" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="0"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_0_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="5FS-Ah-Er0"/>
</connections>
</button>
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="21" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Gy0-g6-fkd" userLabel="#" customClass="UIDigitButton">
<rect key="frame" x="231" y="223" width="48" height="59"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Hash"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" image="numpad_hash_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="numpad_hash_over.png" backgroundImage="numpad_over_background.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="XHz-7y-W70"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<view tag="22" contentMode="scaleToFill" id="uZC-xM-Vr8" userLabel="bottomBar">
<rect key="frame" x="0.0" y="370" width="308" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<button hidden="YES" opaque="NO" tag="23" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="NXp-Xe-hoC" userLabel="backButton">
<rect key="frame" x="0.0" y="0.0" width="101" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_alt_back_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_alt_back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="Spu-0j-69j"/>
</connections>
</button>
<button opaque="NO" tag="24" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="J9S-Iv-omW" userLabel="addContactButton">
<rect key="frame" x="0.0" y="0.0" width="101" height="80"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Add to contact"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="contact_add_default.png" backgroundImage="color_F.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="h8a-GJ-PF6"/>
</connections>
</button>
<button opaque="NO" tag="25" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bDX-Vc-MA9" userLabel="callButton" customClass="UICallButton">
<rect key="frame" x="101" y="0.0" width="207" height="80"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Call"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="call_audio_start_default.png" backgroundImage="color_A.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="call_audio_start_disabled.png"/>
<state key="highlighted" backgroundImage="color_L.png"/>
<connections>
<outlet property="addressField" destination="Omx-NU-xKz" id="L5w-fg-hu4"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
<button opaque="NO" tag="28" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="jLj-JN-7LZ" userLabel="videoCameraSwitch" customClass="UICamSwitch">
<rect key="frame" x="52" y="52" width="52" height="52"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Switch camera"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="camera_switch_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="camera_switch_disabled.png"/>
<state key="selected" image="camera_switch_over.png"/>
<state key="highlighted" image="camera_switch_over.png"/>
<connections>
<outlet property="preview" destination="lTn-ab-KJ5" id="iAl-HJ-S5k"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="-68" y="222.5"/>
</view>
</objects>
<resources>
<image name="backspace_default.png" width="36" height="19"/>
<image name="backspace_disabled.png" width="36" height="19"/>
<image name="backspace_over.png" width="36" height="19"/>
<image name="call_alt_back_default.png" width="50" height="36"/>
<image name="call_alt_back_disabled.png" width="50" height="36"/>
<image name="call_audio_start_default.png" width="36" height="36"/>
<image name="call_audio_start_disabled.png" width="36" height="36"/>
<image name="camera_switch_default.png" width="51" height="50"/>
<image name="camera_switch_disabled.png" width="51" height="50"/>
<image name="camera_switch_over.png" width="51" height="50"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_D.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="color_L.png" width="2" height="2"/>
<image name="contact_add_default.png" width="34" height="29"/>
<image name="contact_add_disabled.png" width="34" height="29"/>
<image name="dialer_background.png" width="408" height="350"/>
<image name="numpad_0_default.png" width="52" height="48"/>
<image name="numpad_0_over.png" width="52" height="48"/>
<image name="numpad_1_default.png" width="52" height="48"/>
<image name="numpad_1_over.png" width="52" height="48"/>
<image name="numpad_2_default.png" width="52" height="48"/>
<image name="numpad_2_over.png" width="52" height="48"/>
<image name="numpad_3_default.png" width="52" height="48"/>
<image name="numpad_3_over.png" width="52" height="48"/>
<image name="numpad_4_default.png" width="52" height="48"/>
<image name="numpad_4_over.png" width="52" height="48"/>
<image name="numpad_5_default.png" width="52" height="48"/>
<image name="numpad_5_over.png" width="52" height="48"/>
<image name="numpad_6_default.png" width="52" height="48"/>
<image name="numpad_6_over.png" width="52" height="48"/>
<image name="numpad_7_default.png" width="52" height="48"/>
<image name="numpad_7_over.png" width="52" height="48"/>
<image name="numpad_8_default.png" width="52" height="48"/>
<image name="numpad_8_over.png" width="52" height="48"/>
<image name="numpad_9_default.png" width="52" height="48"/>
<image name="numpad_9_over.png" width="52" height="48"/>
<image name="numpad_hash_default.png" width="52" height="48"/>
<image name="numpad_hash_over.png" width="52" height="48"/>
<image name="numpad_over_background.png" width="2" height="2"/>
<image name="numpad_star_default.png" width="52" height="50"/>
<image name="numpad_star_over.png" width="52" height="50"/>
</resources>
</document>

View file

@ -1,310 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="FirstLoginView">
<connections>
<outlet property="domainField" destination="w8z-ad-o8e" id="QC5-dU-UKn"/>
<outlet property="landscapeView" destination="fFD-iL-Jo0" id="RoE-70-E4p"/>
<outlet property="loginButton" destination="8H9-Gf-7ZL" id="e1g-x6-PCO"/>
<outlet property="passwordField" destination="BBC-uD-FIM" id="JEo-he-9QU"/>
<outlet property="portraitView" destination="Wa7-dw-UAu" id="cFs-v7-z1R"/>
<outlet property="usernameField" destination="vaw-qL-SCR" id="KTu-qn-3am"/>
<outlet property="view" destination="Wa7-dw-UAu" id="6r1-Cb-nOi"/>
<outlet property="waitView" destination="31" id="57"/>
</connections>
</placeholder>
<view contentMode="scaleToFill" id="Wa7-dw-UAu">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="1" contentMode="scaleToFill" id="Be1-UD-ZIL" customClass="TPKeyboardAvoidingScrollView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="linphone_logo.png" id="JsZ-cm-gih" userLabel="logoImage">
<rect key="frame" x="20" y="46" width="93" height="93"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="3" contentMode="left" text="Welcome" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="ddC-mF-O2L" userLabel="titleLabel">
<rect key="frame" x="121" y="46" width="254" height="48"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Welcome"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="33"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="4" contentMode="left" text="Enter your credentials" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="h9m-R1-9c4" userLabel="subtitleLabel">
<rect key="frame" x="121" y="98" width="254" height="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label=""/>
<fontDescription key="fontDescription" type="system" pointSize="19"/>
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="aM8-yf-s5d" userLabel="usernameLabel">
<rect key="frame" x="20" y="186" width="335" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="vaw-qL-SCR" userLabel="usernameField" customClass="UIAssistantTextField">
<rect key="frame" x="20" y="214" width="335" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Username"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
<connections>
<outlet property="delegate" destination="-1" id="Fml-De-aww"/>
<outlet property="errorLabel" destination="Ym3-AJ-VDD" id="YzJ-Uo-FtX"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="7" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Ym3-AJ-VDD" userLabel="usernameErrorLabel">
<rect key="frame" x="20" y="259" width="335" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="8" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DOMAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="FdB-x1-lgt" userLabel="domainLabel">
<rect key="frame" x="20" y="288" width="335" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="sip.linphone.org" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="w8z-ad-o8e" userLabel="domainField" customClass="UIAssistantTextField">
<rect key="frame" x="20" y="312" width="335" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Domain"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
<connections>
<outlet property="delegate" destination="-1" id="CgQ-c2-2d9"/>
<outlet property="errorLabel" destination="sng-3P-5z8" id="DHj-OF-TIc"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid domain" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="sng-3P-5z8" userLabel="domainErrorLabel">
<rect key="frame" x="20" y="357" width="335" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kjU-P0-ji6" userLabel="passwordLabel">
<rect key="frame" x="20" y="386" width="335" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="BBC-uD-FIM" userLabel="passwordField" customClass="UIAssistantTextField">
<rect key="frame" x="20" y="408" width="335" height="43"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Password"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="-1" id="e4F-kt-Udb"/>
<outlet property="errorLabel" destination="zTY-fc-a6l" id="uAR-NP-WXe"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="zTY-fc-a6l" userLabel="passwordErrorLabel">
<rect key="frame" x="20" y="459" width="335" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="14" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="8H9-Gf-7ZL" userLabel="downloadButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="20" y="498" width="335" height="54"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Fetch and apply">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="LOGIN"/>
<connections>
<action selector="onLoginClick:" destination="-1" eventType="touchUpInside" id="BX7-xj-kmf"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</scrollView>
<view hidden="YES" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" id="31" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" tag="17" contentMode="scaleToFill" animating="YES" style="whiteLarge" id="32" userLabel="activityIndicator">
<rect key="frame" x="169" y="314" width="37" height="37"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" white="1" alpha="0.66000000000000003" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
</view>
<view contentMode="scaleToFill" id="fFD-iL-Jo0">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="1" contentMode="scaleToFill" id="i7c-YH-msu" customClass="TPKeyboardAvoidingScrollView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="linphone_logo.png" id="eAY-9z-N0l" userLabel="logoImage">
<rect key="frame" x="158" y="23" width="64" height="64"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="3" contentMode="left" text="Welcome" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="HUU-k8-6kx" userLabel="titleLabel">
<rect key="frame" x="238" y="23" width="270" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Welcome"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="33"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="4" contentMode="left" text="Enter your credentials" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="0qN-Jr-OXT" userLabel="subtitleLabel">
<rect key="frame" x="238" y="62" width="270" height="25"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label=""/>
<fontDescription key="fontDescription" type="system" pointSize="19"/>
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<size key="shadowOffset" width="-1" height="-1"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="qbs-8f-pLW" userLabel="usernameLabel">
<rect key="frame" x="158" y="105" width="350" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="0Yf-d2-ElR" userLabel="usernameField" customClass="UIAssistantTextField">
<rect key="frame" x="158" y="123" width="350" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Username"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
<connections>
<outlet property="delegate" destination="-1" id="98R-AI-m4z"/>
<outlet property="errorLabel" destination="Bgv-t3-ZGF" id="s0p-Zx-jPj"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="7" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Bgv-t3-ZGF" userLabel="usernameErrorLabel">
<rect key="frame" x="158" y="146" width="350" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="8" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DOMAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1GT-Pk-UQT" userLabel="domainLabel">
<rect key="frame" x="158" y="182" width="350" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="sip.linphone.org" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="xOE-NA-3hm" userLabel="domainField" customClass="UIAssistantTextField">
<rect key="frame" x="158" y="200" width="350" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Domain"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
<connections>
<outlet property="delegate" destination="-1" id="65y-5D-Gja"/>
<outlet property="errorLabel" destination="Q6W-CO-Qyo" id="SeN-ng-mAi"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid domain" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Q6W-CO-Qyo" userLabel="domainErrorLabel">
<rect key="frame" x="158" y="223" width="350" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="3ie-wD-Jq5" userLabel="passwordLabel">
<rect key="frame" x="158" y="259" width="350" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="iFV-rZ-JMe" userLabel="passwordField" customClass="UIAssistantTextField">
<rect key="frame" x="158" y="277" width="350" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Password"/>
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="-1" id="EGl-fH-SOC"/>
<outlet property="errorLabel" destination="sac-b3-hPk" id="Cfh-39-Ehh"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="sac-b3-hPk" userLabel="passwordErrorLabel">
<rect key="frame" x="158" y="300" width="350" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="14" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="0lR-zp-xF9" userLabel="downloadButton" customClass="UIRoundBorderedButton">
<rect key="frame" x="158" y="328" width="350" height="39"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" label="Fetch and apply">
<bool key="isElement" value="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<state key="normal" title="LOGIN"/>
<connections>
<action selector="onLoginClick:" destination="-1" eventType="touchUpInside" id="mzP-1O-F9z"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</scrollView>
<view hidden="YES" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" id="lh1-8l-fdW" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" tag="17" contentMode="scaleToFill" animating="YES" style="whiteLarge" id="U6u-rm-UlH" userLabel="activityIndicator">
<rect key="frame" x="315" y="168" width="37" height="37"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" white="1" alpha="0.66000000000000003" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
</view>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
</objects>
<resources>
<image name="linphone_logo.png" width="26" height="22"/>
</resources>
</document>

View file

@ -1,396 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="landscape">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HistoryDetailsView">
<connections>
<outlet property="addContactButton" destination="50" id="52"/>
<outlet property="addressLabel" destination="EoB-ux-sD7" id="Ajw-2s-M6X"/>
<outlet property="avatarImage" destination="23" id="43"/>
<outlet property="backButton" destination="9" id="Pqj-y9-hqc"/>
<outlet property="contactLabel" destination="25" id="rTL-Ut-42o"/>
<outlet property="emptyLabel" destination="hvz-CS-NME" id="Qws-r1-XMh"/>
<outlet property="encryptedChatView" destination="JU4-bf-tVI" id="j6f-qz-VKd"/>
<outlet property="headerView" destination="33" id="iv2-Rj-j3j"/>
<outlet property="landscapeView" destination="NHC-7w-48z" id="kTJ-YT-Ejm"/>
<outlet property="linphoneImage" destination="mfN-Ai-9RX" id="Ubt-oH-lra"/>
<outlet property="optionsView" destination="k0D-99-OKO" id="5uE-lN-M3B"/>
<outlet property="portraitView" destination="4" id="0gH-12-O02"/>
<outlet property="tableView" destination="baU-d4-eu3" id="3q4-5X-yCB"/>
<outlet property="view" destination="4" id="10"/>
<outlet property="waitView" destination="dEJ-xc-518" id="ofo-cG-8s5"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="HKr-sq-hGv" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="4">
<rect key="frame" x="0.0" y="42" width="667" height="267"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="6" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="gee-PW-IqY" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="9" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="128" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png"/>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="11"/>
</connections>
</button>
<button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="50" userLabel="addButton" customClass="UIIconButton">
<rect key="frame" x="539" y="0.0" width="128" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add to contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="contact_add_default.png"/>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="53"/>
</connections>
</button>
</subviews>
</view>
<view tag="7" contentMode="scaleToFill" id="33" userLabel="headerView">
<rect key="frame" x="0.0" y="66" width="667" height="250"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" image="avatar.png" id="23" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="244" y="8" width="178" height="100"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="9" contentMode="left" text="John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="17" id="25" userLabel="contactLabel">
<rect key="frame" x="0.0" y="110" width="667" height="40"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" tag="10" contentMode="scaleAspectFit" image="linphone_user.png" id="mfN-Ai-9RX" userLabel="linphoneImage" customClass="UIRoundedImageView">
<rect key="frame" x="642" y="124" width="15" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="11" contentMode="left" text="johndoe@sip.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="EoB-ux-sD7" userLabel="addressLabel">
<rect key="frame" x="0.0" y="158" width="667" height="23"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" id="k0D-99-OKO" userLabel="optionsView">
<rect key="frame" x="0.0" y="189" width="667" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" tag="13" contentMode="scaleAspectFit" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="5eX-W0-T4B" userLabel="callButton">
<rect key="frame" x="179" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="call_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_start_body_disabled.png"/>
<state key="highlighted" image="call_start_body_over.png"/>
<connections>
<action selector="onCallClick:" destination="-1" eventType="touchUpInside" id="Vlx-14-3CH"/>
</connections>
</button>
<button opaque="NO" tag="12" contentMode="scaleAspectFit" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="obZ-W7-q8P" userLabel="chatButton">
<rect key="frame" x="317" y="0.0" width="50" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="chat_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_start_body_disabled.png"/>
<state key="highlighted" image="chat_start_body_over.png"/>
<connections>
<action selector="onChatClick:" destination="-1" eventType="touchUpInside" id="Dd5-7a-ev8"/>
</connections>
</button>
<view contentMode="scaleToFill" id="JU4-bf-tVI" userLabel="encryptedChatView">
<rect key="frame" x="456" y="-1" width="50" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="E2n-mF-saI" userLabel="encryptedChatButton" customClass="UIIconButton">
<rect key="frame" x="-1" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Chat"/>
<state key="normal" image="chat_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_start_body_disabled.png"/>
<state key="highlighted" image="chat_start_body_over.png"/>
<connections>
<action selector="onEncryptedChatClick:" destination="-1" eventType="touchUpInside" id="1Ci-9Q-eP2"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="security_toogle_icon_green.png" id="YuZ-ep-Rtj" userLabel="securityImage">
<rect key="frame" x="33" y="0.0" width="19" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
</subviews>
</view>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<tableView clipsSubviews="YES" tag="6" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="30" sectionHeaderHeight="28" sectionFooterHeight="28" id="k6N-Av-eOu">
<rect key="frame" x="0.0" y="316" width="667" height="0.0"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="baU-d4-eu3" id="p7o-Mx-Kmc"/>
<outlet property="delegate" destination="baU-d4-eu3" id="iS5-xg-0C2"/>
</connections>
</tableView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="40" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No log selected" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hvz-CS-NME" userLabel="emptyLabel">
<rect key="frame" x="0.0" y="66" width="667" height="201"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="8" contentMode="scaleToFill" id="dEJ-xc-518" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="667" height="267"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="NK3-ME-9jd" userLabel="activityIndicatorView">
<rect key="frame" x="326" y="122" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-3.2000000000000002" y="22.488755622188908"/>
</view>
<view contentMode="scaleToFill" id="LBc-mh-ozk" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="NHC-7w-48z">
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="Rtv-hu-bCz" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="JOe-5t-C7f" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="NJl-Lb-CU6" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="71" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png"/>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="zZF-e0-7RY"/>
</connections>
</button>
<button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="O7r-6t-b7w" userLabel="addButton" customClass="UIIconButton">
<rect key="frame" x="594" y="0.0" width="73" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add to contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="contact_add_default.png"/>
<state key="disabled" image="contact_add_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAddContactClick:" destination="-1" eventType="touchUpInside" id="pow-32-7RJ"/>
</connections>
</button>
</subviews>
</view>
<tableView clipsSubviews="YES" tag="6" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="30" sectionHeaderHeight="44" sectionFooterHeight="22" id="2jK-gw-ULv">
<rect key="frame" x="0.0" y="168" width="667" height="165"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="baU-d4-eu3" id="fI9-T2-u1D"/>
<outlet property="delegate" destination="baU-d4-eu3" id="xk6-7r-gBl"/>
</connections>
</tableView>
<view tag="7" contentMode="scaleToFill" id="Mwp-y3-g1b" userLabel="headerView">
<rect key="frame" x="0.0" y="66" width="667" height="102"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" image="avatar.png" id="d9m-G0-1u3" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="28" y="8" width="88" height="86"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="9" contentMode="left" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="17" id="Qbg-hm-bd7" userLabel="contactLabel">
<rect key="frame" x="160" y="8" width="356" height="50"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="33"/>
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="11" contentMode="left" text="johndoe@sip.linphone.org" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="XJa-f6-K0y" userLabel="addressLabel">
<rect key="frame" x="160" y="56" width="356" height="38"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" id="teU-AB-8hO" userLabel="optionsView">
<rect key="frame" x="0.0" y="29" width="667" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" tag="13" contentMode="scaleAspectFit" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="pBo-Oo-bAW" userLabel="callButton">
<rect key="frame" x="491" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="call_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="call_start_body_disabled.png"/>
<state key="highlighted" image="call_start_body_over.png"/>
<connections>
<action selector="onCallClick:" destination="-1" eventType="touchUpInside" id="QPr-DZ-52f"/>
</connections>
</button>
<button opaque="NO" tag="12" contentMode="scaleAspectFit" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iDG-Mn-jm2" userLabel="chatButton">
<rect key="frame" x="551" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" image="chat_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_start_body_disabled.png"/>
<state key="highlighted" image="chat_start_body_over.png"/>
<connections>
<action selector="onChatClick:" destination="-1" eventType="touchUpInside" id="1Xg-su-cG3"/>
</connections>
</button>
<view contentMode="scaleToFill" id="m90-u6-x3J" userLabel="encryptedChatView">
<rect key="frame" x="611" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8fY-hz-ECC" userLabel="encryptedChatButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="51" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Chat"/>
<state key="normal" image="chat_start_body_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="chat_start_body_disabled.png"/>
<state key="highlighted" image="chat_start_body_over.png"/>
<connections>
<action selector="onEncryptedChatClick:" destination="-1" eventType="touchUpInside" id="IYO-Rc-SGp"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="security_toogle_icon_green.png" id="8D9-me-ZdS" userLabel="securityImage">
<rect key="frame" x="33" y="0.0" width="19" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
</subviews>
</view>
</subviews>
</view>
<imageView hidden="YES" userInteractionEnabled="NO" tag="10" contentMode="scaleAspectFit" image="linphone_user.png" id="G2O-Yh-fZA" userLabel="linphoneImage">
<rect key="frame" x="123" y="8" width="30" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact avatar">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
<bool key="isElement" value="YES"/>
</accessibility>
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="40" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No log selected" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="IHY-Yg-pkN" userLabel="emptyLabel">
<rect key="frame" x="0.0" y="66" width="667" height="267"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view hidden="YES" tag="8" contentMode="scaleToFill" id="X29-vB-VIz" userLabel="waitView">
<rect key="frame" x="0.0" y="0.0" width="667" height="333"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="7l5-ZU-CbW" userLabel="activityIndicatorView">
<rect key="frame" x="326" y="155" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="702.39999999999998" y="-45.877061469265371"/>
</view>
<tableViewController id="baU-d4-eu3" customClass="HistoryDetailsTableView">
<connections>
<outlet property="view" destination="k6N-Av-eOu" id="Dos-d4-5l5"/>
</connections>
<point key="canvasLocation" x="1316.8" y="236.58170914542731"/>
</tableViewController>
</objects>
<resources>
<image name="avatar.png" width="259" height="259"/>
<image name="back_default.png" width="24" height="22"/>
<image name="back_disabled.png" width="24" height="22"/>
<image name="call_start_body_default.png" width="51" height="51"/>
<image name="call_start_body_disabled.png" width="51" height="51"/>
<image name="call_start_body_over.png" width="51" height="51"/>
<image name="chat_start_body_default.png" width="51" height="51"/>
<image name="chat_start_body_disabled.png" width="51" height="51"/>
<image name="chat_start_body_over.png" width="51" height="51"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="contact_add_default.png" width="34" height="29"/>
<image name="contact_add_disabled.png" width="34" height="29"/>
<image name="linphone_user.png" width="26" height="26"/>
<image name="security_toogle_icon_green.png" width="21" height="24"/>
</resources>
</document>

View file

@ -1,196 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HistoryListView">
<connections>
<outlet property="allButton" destination="4" id="27"/>
<outlet property="missedButton" destination="5" id="28"/>
<outlet property="selectedButtonImage" destination="o8E-gw-vhI" id="hNf-FA-7aQ"/>
<outlet property="tableController" destination="18" id="26"/>
<outlet property="view" destination="2" id="16"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="o8E-Bz-RWL" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="2">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="3" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="upG-IP-6mg" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<view contentMode="scaleToFill" id="38" userLabel="switchView">
<rect key="frame" x="0.0" y="0.0" width="150" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="4" userLabel="allButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="All contacts filter"/>
<inset key="titleEdgeInsets" minX="0.0" minY="16" maxX="0.0" maxY="0.0"/>
<state key="normal" image="history_all_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="history_all_disabled.png"/>
<state key="selected" image="history_all_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onAllClick:" destination="-1" eventType="touchUpInside" id="29"/>
</connections>
</button>
<button opaque="NO" contentMode="bottom" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="5" userLabel="missedButton" customClass="UIIconButton">
<rect key="frame" x="75" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Missed contacts filter"/>
<state key="normal" image="history_missed_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="history_missed_disabled.png"/>
<state key="selected" image="history_missed_selected.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onMissedClick:" destination="-1" eventType="touchUpInside" id="30"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_A.png" id="o8E-gw-vhI" userLabel="selectedButtonImage">
<rect key="frame" x="0.0" y="63" width="75" height="3"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES"/>
</imageView>
</subviews>
</view>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="00K-MU-NUc" userLabel="cancelButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<state key="normal" image="cancel_edit_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="cancel_edit_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onCancelClick:" destination="18" eventType="touchUpInside" id="DAX-W6-l0H"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="WQf-rB-DUt"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="nhN-oH-LQ9" userLabel="toggleSelectionButton" customClass="UIIconButton">
<rect key="frame" x="225" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Select all"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="deselect_all.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="select_all_disabled.png"/>
<state key="selected" image="select_all_default.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onSelectionToggle:" destination="18" eventType="touchUpInside" id="ADr-KR-SmA"/>
</connections>
</button>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="35" userLabel="deleteButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Delete all"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDeleteClick:" destination="-1" eventType="touchUpInside" id="37"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="6" userLabel="editButton" customClass="UIIconButton">
<rect key="frame" x="300" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Edit"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="delete_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="delete_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onEditClick:" destination="18" eventType="touchUpInside" id="5Ft-HW-cVh"/>
<action selector="onEditionChangeClick:" destination="-1" eventType="touchUpInside" id="9gC-6R-w0j"/>
</connections>
</button>
</subviews>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="35" sectionFooterHeight="1" id="17" userLabel="tableView">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
<color key="separatorColor" red="0.67030966281890869" green="0.71867996454238892" blue="0.75078284740447998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="18" id="23"/>
<outlet property="delegate" destination="18" id="24"/>
</connections>
</tableView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No call in your history" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xtr-Fp-60Z" userLabel="emptyTableLabel">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="355.79710144927537" y="250.11160714285714"/>
</view>
<tableViewController autoresizesArchivedViewToFullSize="NO" id="18" userLabel="tableController" customClass="HistoryListTableView">
<extendedEdge key="edgesForExtendedLayout"/>
<connections>
<outlet property="cancelButton" destination="00K-MU-NUc" id="KSi-MC-Usk"/>
<outlet property="deleteButton" destination="35" id="n8o-lE-u1t"/>
<outlet property="editButton" destination="6" id="Sgc-Z3-NeQ"/>
<outlet property="emptyView" destination="xtr-Fp-60Z" id="hgd-7A-cLI"/>
<outlet property="toggleSelectionButton" destination="nhN-oH-LQ9" id="77r-l0-3Yi"/>
<outlet property="view" destination="17" id="25"/>
</connections>
<point key="canvasLocation" x="863.768115942029" y="204.24107142857142"/>
</tableViewController>
</objects>
<resources>
<image name="cancel_edit_default.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="cancel_edit_disabled.png" width="47.200000762939453" height="47.200000762939453"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
<image name="delete_default.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="delete_disabled.png" width="34.400001525878906" height="44.799999237060547"/>
<image name="deselect_all.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="history_all_default.png" width="52.799999237060547" height="51.200000762939453"/>
<image name="history_all_disabled.png" width="52.799999237060547" height="51.200000762939453"/>
<image name="history_all_selected.png" width="52.799999237060547" height="51.200000762939453"/>
<image name="history_missed_default.png" width="52.799999237060547" height="52.799999237060547"/>
<image name="history_missed_disabled.png" width="52.799999237060547" height="52.799999237060547"/>
<image name="history_missed_selected.png" width="52.799999237060547" height="52.799999237060547"/>
<image name="select_all_default.png" width="43.200000762939453" height="43.200000762939453"/>
<image name="select_all_disabled.png" width="43.200000762939453" height="43.200000762939453"/>
</resources>
</document>

Binary file not shown.

View file

@ -1,74 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ImageView">
<connections>
<outlet property="backButton" destination="RW1-kp-wn7" id="DJc-Ps-J3p"/>
<outlet property="scrollView" destination="12" id="13"/>
<outlet property="view" destination="1" id="3"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="zEp-6r-r9n" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" id="2E4-s5-jYL" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Rir-PV-D7o" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<animations/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="RW1-kp-wn7" userLabel="backButton">
<rect key="frame" x="0.0" y="0.0" width="75" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<animations/>
<accessibility key="accessibilityConfiguration" label="New Discussion"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="vyb-kn-xSQ"/>
</connections>
</button>
</subviews>
<animations/>
</view>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" minimumZoomScale="0.0" maximumZoomScale="10" id="12" userLabel="scrollView" customClass="UIImageScrollView">
<rect key="frame" x="0.0" y="66" width="375" height="493"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</scrollView>
</subviews>
<animations/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
</subviews>
<animations/>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
</view>
</objects>
<resources>
<image name="back_default.png" width="24" height="21"/>
<image name="back_disabled.png" width="24" height="21"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

View file

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13527"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PhoneMainView">
<connections>
<outlet property="mainViewController" destination="208" id="209"/>
<outlet property="statusBarBG" destination="6sv-JD-j8Z" id="CCl-1v-2B7"/>
<outlet property="view" destination="152" id="WV3-Jd-QMD"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="Po9-aN-gz9" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="152">
<rect key="frame" x="0.0" y="42" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="1" contentMode="scaleToFill" id="avX-6g-QDq" userLabel="background">
<rect key="frame" x="0.0" y="0.0" width="375" height="559"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view contentMode="scaleToFill" misplaced="YES" id="6sv-JD-j8Z" userLabel="statusBarBG">
<rect key="frame" x="0.0" y="0.0" width="375" height="35"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="32.5" y="86.5"/>
</view>
<viewController nibName="UICompositeView" wantsFullScreenLayout="YES" id="208" userLabel="mainViewController" customClass="UICompositeView">
<extendedEdge key="edgesForExtendedLayout"/>
<nil key="simulatedStatusBarMetrics"/>
</viewController>
</objects>
</document>

View file

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SettingsView">
<connections>
<outlet property="backButton" destination="gTj-vM-UtG" id="RTt-uX-4Lf"/>
<outlet property="navigationController" destination="10" id="15"/>
<outlet property="settingsController" destination="6" id="8"/>
<outlet property="subView" destination="Qjf-HX-coQ" id="f2I-hh-aOI"/>
<outlet property="titleLabel" destination="SqM-h2-idp" id="shs-j2-U5I"/>
<outlet property="view" destination="4" id="9"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="20" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="4">
<rect key="frame" x="0.0" y="42" width="414" height="791"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="SRV-nz-KWT" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="RyH-Uy-VKo" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SETTINGS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SqM-h2-idp" userLabel="titleLabel">
<rect key="frame" x="92" y="0.0" width="230" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="gTj-vM-UtG" userLabel="backButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="91" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Back"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onBackClick:" destination="-1" eventType="touchUpInside" id="0PT-42-Pyi"/>
</connections>
</button>
</subviews>
</view>
<view contentMode="scaleToFill" id="Qjf-HX-coQ" userLabel="subView">
<rect key="frame" x="0.0" y="66" width="414" height="725"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-61.594202898550726" y="175.11160714285714"/>
</view>
<navigationController definesPresentationContext="YES" navigationBarHidden="YES" id="10" userLabel="navigationController" customClass="UINavigationControllerEx">
<extendedEdge key="edgesForExtendedLayout"/>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedTopBarMetrics"/>
<navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" barStyle="black" translucent="NO" id="11" userLabel="navigationBar" customClass="UINavigationBarEx">
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
</navigationController>
<viewController autoresizesArchivedViewToFullSize="NO" id="6" userLabel="settingsController" customClass="IASKAppSettingsViewControllerEx">
<extendedEdge key="edgesForExtendedLayout"/>
<navigationItem key="navigationItem" id="14" userLabel="settingsItem"/>
</viewController>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

Binary file not shown.

View file

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ShopView">
<connections>
<outlet property="tableViewController" destination="sBe-ML-IzT" id="8zr-PW-7c4"/>
<outlet property="view" destination="HJH-1o-RXN" id="AhB-ik-484"/>
<outlet property="waitingView" destination="tuB-rE-DiO" id="1cH-Ht-tQE"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="eP3-Qs-BZl" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view tag="299" contentMode="scaleToFill" id="HJH-1o-RXN">
<rect key="frame" x="0.0" y="66" width="414" height="830"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view tag="2" contentMode="scaleToFill" id="Whz-oo-Pwx" userLabel="topBar">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="h54-RV-eE6" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ETk-tB-ZNl" userLabel="dialerBackButton" customClass="UIIconButton">
<rect key="frame" x="0.0" y="0.0" width="82" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<accessibility key="accessibilityConfiguration" label="Add contact"/>
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
<state key="normal" image="back_default.png">
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<state key="disabled" image="back_disabled.png"/>
<state key="highlighted" backgroundImage="color_E.png"/>
<connections>
<action selector="onDialerBackClick:" destination="-1" eventType="touchUpInside" id="IrL-W4-g5z"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SHOP" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iNt-9d-7si" userLabel="titleLabel">
<rect key="frame" x="0.0" y="0.0" width="414" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" style="plain" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="cnd-cB-B4W">
<rect key="frame" x="0.0" y="66" width="414" height="764"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="sBe-ML-IzT" id="EPO-Za-dkU"/>
<outlet property="delegate" destination="sBe-ML-IzT" id="T0H-aj-0UQ"/>
</connections>
</tableView>
<view hidden="YES" tag="288" contentMode="scaleToFill" id="tuB-rE-DiO" userLabel="waitView">
<rect key="frame" x="0.0" y="66" width="414" height="797"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<activityIndicatorView opaque="NO" tag="9" contentMode="scaleToFill" animating="YES" style="gray" id="7Jb-oC-FC5" userLabel="activityIndicatorView">
<rect key="frame" x="199" y="387" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="-600.72463768115949" y="-494.53125"/>
</view>
<tableViewController id="sBe-ML-IzT" customClass="ShopTableView">
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="view" destination="cnd-cB-B4W" id="hcK-9Y-fd5"/>
</connections>
<point key="canvasLocation" x="49.275362318840585" y="-484.82142857142856"/>
</tableViewController>
</objects>
<resources>
<image name="back_default.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="back_disabled.png" width="38.400001525878906" height="35.200000762939453"/>
<image name="color_E.png" width="2" height="2"/>
<image name="color_F.png" width="2" height="2"/>
</resources>
</document>

View file

@ -1,136 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11198.2" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SideMenuView">
<connections>
<outlet property="addressLabel" destination="V8A-tK-4iV" id="YMm-ry-yJa"/>
<outlet property="avatarImage" destination="BNQ-7N-NGT" id="LXr-Yr-zSK"/>
<outlet property="grayBackground" destination="ccB-VK-LF9" id="Rbz-Ix-k62"/>
<outlet property="nameLabel" destination="XbU-2B-u1b" id="rKF-4e-1HA"/>
<outlet property="presenceImage" destination="C88-Ag-nm7" id="LH2-Mq-xLz"/>
<outlet property="sideMenuTableViewController" destination="Yyh-z6-IGO" id="6Xq-OQ-vYm"/>
<outlet property="swipeGestureRecognizer" destination="JRs-i1-zCl" id="YA3-UP-6Dc"/>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<swipeGestureRecognizer direction="left" id="JRs-i1-zCl" userLabel="OnLateralSwipe">
<connections>
<action selector="onLateralSwipe:" destination="-1" id="5td-pZ-6Vc"/>
<outlet property="delegate" destination="-1" id="yhK-9x-aT0"/>
</connections>
</swipeGestureRecognizer>
<view contentMode="scaleToFill" id="82U-ej-eJb" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<frame key="frameInset" minY="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view hidden="YES" alpha="0.69999999999999996" contentMode="scaleToFill" id="ccB-VK-LF9">
<frame key="frameInset"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outletCollection property="gestureRecognizers" destination="56h-cQ-B5V" appends="YES" id="umX-R7-2IR"/>
</connections>
</view>
<view contentMode="scaleToFill" id="i1P-cG-q8h" userLabel="headerView">
<frame key="frameInset" width="300" height="100"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="90B-Re-hmt" userLabel="backgroundColor">
<frame key="frameInset" height="100.00%"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="XbU-2B-u1b" userLabel="nameLabel">
<frame key="frameInset" minX="76" minY="15" width="100.00%" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" lineBreakMode="middleTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="V8A-tK-4iV" userLabel="addressLabel">
<frame key="frameInset" minX="76" minY="54" width="92.86%" height="38"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.98766469955444336" green="0.27512490749359131" blue="0.029739789664745331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="led_connected.png" id="C88-Ag-nm7" userLabel="presenceImage">
<frame key="frameInset" minY="58" width="16" height="29"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
</imageView>
<imageView contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar.png" id="BNQ-7N-NGT" userLabel="avatarImage" customClass="UIRoundedImageView">
<frame key="frameInset" minX="3" minY="15" width="68" height="77"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<outletCollection property="gestureRecognizers" destination="Kej-uL-ntg" appends="YES" id="eog-XV-xok"/>
</connections>
</imageView>
</subviews>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="1kD-az-BAx" appends="YES" id="OGc-fj-HQy"/>
</connections>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" style="plain" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="Ttt-1k-jAm">
<frame key="frameInset" minY="100" width="300" height="100.00%"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<outlet property="dataSource" destination="Yyh-z6-IGO" id="ytx-b8-NGX"/>
<outlet property="delegate" destination="Yyh-z6-IGO" id="c1j-vG-TbB"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="JRs-i1-zCl" appends="YES" id="SPs-Nb-Y0e"/>
</connections>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<point key="canvasLocation" x="322.5" y="209.5"/>
</view>
<tableViewController id="Yyh-z6-IGO" customClass="SideMenuTableView">
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="view" destination="Ttt-1k-jAm" id="Njc-lf-vXv"/>
</connections>
<point key="canvasLocation" x="815" y="194"/>
</tableViewController>
<tapGestureRecognizer id="Kej-uL-ntg" userLabel="OnAvatarClicked">
<connections>
<action selector="onAvatarClick:" destination="-1" id="KyX-RA-m6A"/>
</connections>
</tapGestureRecognizer>
<tapGestureRecognizer id="1kD-az-BAx" userLabel="OnHeaderClicked">
<connections>
<action selector="onHeaderClick:" destination="-1" id="yqn-58-lbb"/>
</connections>
</tapGestureRecognizer>
<tapGestureRecognizer id="56h-cQ-B5V" userLabel="onBackgroundClicked">
<connections>
<action selector="onBackgroundClicked:" destination="-1" id="U5P-C2-4FD"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="avatar.png" width="259" height="259"/>
<image name="color_F.png" width="2" height="2"/>
<image name="led_connected.png" width="12" height="12"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SideMenuView">
<connections>
<outlet property="addressLabel" destination="ypg-P8-Els" id="gRv-Fz-Dbk"/>
<outlet property="avatarImage" destination="BNQ-7N-NGT" id="LXr-Yr-zSK"/>
<outlet property="grayBackground" destination="ccB-VK-LF9" id="Rbz-Ix-k62"/>
<outlet property="nameLabel" destination="XbU-2B-u1b" id="rKF-4e-1HA"/>
<outlet property="presenceImage" destination="tNM-uE-Eum" id="dfy-Sb-hgE"/>
<outlet property="sideMenuTableViewController" destination="Yyh-z6-IGO" id="6Xq-OQ-vYm"/>
<outlet property="swipeGestureRecognizer" destination="JRs-i1-zCl" id="YA3-UP-6Dc"/>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<swipeGestureRecognizer direction="left" id="JRs-i1-zCl" userLabel="OnLateralSwipe">
<connections>
<action selector="onLateralSwipe:" destination="-1" id="5td-pZ-6Vc"/>
<outlet property="delegate" destination="-1" id="yhK-9x-aT0"/>
</connections>
</swipeGestureRecognizer>
<view contentMode="scaleToFill" id="82U-ej-eJb" userLabel="iphone6MetricsView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view hidden="YES" alpha="0.80000000000000004" contentMode="scaleToFill" id="ccB-VK-LF9">
<rect key="frame" x="0.0" y="0.0" width="375" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<connections>
<outletCollection property="gestureRecognizers" destination="56h-cQ-B5V" appends="YES" id="umX-R7-2IR"/>
</connections>
</view>
<view contentMode="scaleToFill" id="i1P-cG-q8h" userLabel="headerView">
<rect key="frame" x="0.0" y="0.0" width="187" height="100"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="90B-Re-hmt" userLabel="backgroundColor">
<rect key="frame" x="0.0" y="0.0" width="187" height="100"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="XbU-2B-u1b" userLabel="nameLabel">
<rect key="frame" x="76" y="15" width="111" height="31"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" lineBreakMode="middleTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="ypg-P8-Els" userLabel="addressLabel">
<rect key="frame" x="74" y="54" width="95" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="led_connected.png" id="tNM-uE-Eum" userLabel="presenceImage">
<rect key="frame" x="169" y="54" width="16" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
</imageView>
<imageView contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar.png" id="BNQ-7N-NGT" userLabel="avatarImage" customClass="UIRoundedImageView">
<rect key="frame" x="8" y="20" width="60" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<outletCollection property="gestureRecognizers" destination="Kej-uL-ntg" appends="YES" id="eog-XV-xok"/>
</connections>
</imageView>
</subviews>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="1kD-az-BAx" appends="YES" id="OGc-fj-HQy"/>
</connections>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" style="plain" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="Ttt-1k-jAm">
<rect key="frame" x="0.0" y="100" width="187" height="525"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<connections>
<outlet property="dataSource" destination="Yyh-z6-IGO" id="ytx-b8-NGX"/>
<outlet property="delegate" destination="Yyh-z6-IGO" id="c1j-vG-TbB"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="JRs-i1-zCl" appends="YES" id="SPs-Nb-Y0e"/>
</connections>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
<point key="canvasLocation" x="322.5" y="209.5"/>
</view>
<tableViewController id="Yyh-z6-IGO" customClass="SideMenuTableView">
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics"/>
<connections>
<outlet property="view" destination="Ttt-1k-jAm" id="Njc-lf-vXv"/>
</connections>
<point key="canvasLocation" x="815" y="194"/>
</tableViewController>
<tapGestureRecognizer id="Kej-uL-ntg" userLabel="OnAvatarClicked">
<connections>
<action selector="onAvatarClick:" destination="-1" id="KyX-RA-m6A"/>
</connections>
</tapGestureRecognizer>
<tapGestureRecognizer id="1kD-az-BAx" userLabel="OnHeaderClicked">
<connections>
<action selector="onHeaderClick:" destination="-1" id="yqn-58-lbb"/>
</connections>
</tapGestureRecognizer>
<tapGestureRecognizer id="56h-cQ-B5V" userLabel="onBackgroundClicked">
<connections>
<action selector="onBackgroundClicked:" destination="-1" id="U5P-C2-4FD"/>
</connections>
</tapGestureRecognizer>
</objects>
<resources>
<image name="avatar.png" width="255" height="255"/>
<image name="color_F.png" width="2" height="2"/>
<image name="led_connected.png" width="11" height="11"/>
</resources>
</document>

View file

@ -1,26 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
@interface CallConferenceTableView : UITableViewController
- (void)update;
@end

View file

@ -1,83 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CallConferenceTableView.h"
#import "UICallConferenceCell.h"
#import "LinphoneManager.h"
#import "Utils.h"
@implementation CallConferenceTableView
#pragma mark - UI change
- (void)update {
[self.tableView reloadData];
}
#pragma mark - UITableViewDataSource Functions
- (LinphoneCall *)conferenceCallForRow:(NSInteger)row {
const MSList *calls = linphone_core_get_calls(LC);
int i = -1;
while (calls) {
if (linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(calls->data))) {
i++;
if (i == row)
break;
}
calls = calls->next;
}
return (calls ? calls->data : NULL);
}
#pragma mark - UITableViewDataSource Functions
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = NSStringFromClass(UICallConferenceCell.class);
UICallConferenceCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[UICallConferenceCell alloc] initWithIdentifier:kCellId];
}
[cell setCall:[self conferenceCallForRow:indexPath.row]];
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
const MSList *calls = linphone_core_get_calls(LC);
int count = 0;
while (calls) {
if (linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(calls->data))) {
count++;
}
calls = calls->next;
}
return count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 1e-5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 1e-5;
}
@end

View file

@ -1,54 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
#import "TPMultiLayoutViewController.h"
#import "UIRoundedImageView.h"
#include "LinphoneManager.h"
@protocol IncomingCallViewDelegate <NSObject>
- (void)incomingCallAccepted:(LinphoneCall *)call evenWithVideo:(BOOL)video;
- (void)incomingCallDeclined:(LinphoneCall *)call;
- (void)incomingCallAborted:(LinphoneCall *)call;
@end
@interface CallIncomingView : TPMultiLayoutViewController <UICompositeViewDelegate> {
}
@property(nonatomic) Boolean earlyMedia;
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
@property(nonatomic, strong) IBOutlet UILabel *addressLabel;
@property(nonatomic, strong) IBOutlet UIRoundedImageView *avatarImage;
@property(nonatomic, assign) LinphoneCall *call;
@property(nonatomic, strong) id<IncomingCallViewDelegate> delegate;
@property(weak, nonatomic) IBOutlet UIView *tabVideoBar;
@property(weak, nonatomic) IBOutlet UIView *tabBar;
@property (weak, nonatomic) IBOutlet UIView *earlyMediaView;
- (IBAction)onAcceptClick:(id)event;
- (IBAction)onDeclineClick:(id)event;
- (IBAction)onAcceptAudioOnlyClick:(id)sender;
@end

View file

@ -1,150 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CallIncomingView.h"
#import "LinphoneManager.h"
#import "FastAddressBook.h"
#import "PhoneMainView.h"
#import "Utils.h"
@implementation CallIncomingView
#pragma mark - ViewController Functions
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(callUpdateEvent:)
name:kLinphoneCallUpdate
object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneCallUpdate object:nil];
_call = NULL;
}
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
isLeftFragment:YES
fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
if (_earlyMedia && [LinphoneManager.instance lpConfigBoolForKey:@"pref_accept_early_media"] && linphone_core_get_calls_nb(LC) < 2) {
_earlyMediaView.hidden = NO;
linphone_core_set_native_video_window_id(LC, (__bridge void *)(_earlyMediaView));
}
if (_call) {
[self update];
}
}
#pragma mark - Event Functions
- (void)callUpdateEvent:(NSNotification *)notif {
LinphoneCall *acall = [[notif.userInfo objectForKey:@"call"] pointerValue];
LinphoneCallState astate = [[notif.userInfo objectForKey:@"state"] intValue];
[self callUpdate:acall state:astate];
}
- (void)callUpdate:(LinphoneCall *)acall state:(LinphoneCallState)astate {
if (_call == acall && (astate == LinphoneCallEnd || astate == LinphoneCallError)) {
[_delegate incomingCallAborted:_call];
} else if ([LinphoneManager.instance lpConfigBoolForKey:@"auto_answer"]) {
LinphoneCallState state = linphone_call_get_state(_call);
if (state == LinphoneCallIncomingReceived) {
LOGI(@"Auto answering call");
[self onAcceptClick:nil];
}
}
}
#pragma mark -
- (void)update {
const LinphoneAddress *addr = linphone_call_get_remote_address(_call);
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr withAddressLabel:_addressLabel];
char *uri = linphone_address_as_string_uri_only(addr);
ms_free(uri);
[_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:YES withRoundedRadius:YES];
_tabBar.hidden = linphone_call_params_video_enabled(linphone_call_get_remote_params(_call));
_tabVideoBar.hidden = !_tabBar.hidden;
}
#pragma mark - Property Functions
static void hideSpinner(LinphoneCall *call, void *user_data) {
CallIncomingView *thiz = (__bridge CallIncomingView *)user_data;
thiz.earlyMedia = TRUE;
thiz.earlyMediaView.hidden = NO;
linphone_core_set_native_video_window_id(LC, (__bridge void *)(thiz.earlyMediaView));
}
- (void)setCall:(LinphoneCall *)call {
_call = call;
_earlyMedia = FALSE;
if ([LinphoneManager.instance lpConfigBoolForKey:@"pref_accept_early_media"] && linphone_core_get_calls_nb(LC) < 2) {
linphone_call_accept_early_media(_call);
// linphone_call_params_get_used_video_codec return 0 if no video stream enabled
if (linphone_call_params_get_used_video_codec(linphone_call_get_current_params(_call))) {
linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, (__bridge void *)(self));
}
} else {
_earlyMediaView.hidden = YES;
}
[self update];
[self callUpdate:_call state:linphone_call_get_state(call)];
}
#pragma mark - Action Functions
- (IBAction)onAcceptClick:(id)event {
[_delegate incomingCallAccepted:_call evenWithVideo:YES];
}
- (IBAction)onDeclineClick:(id)event {
[_delegate incomingCallDeclined:_call];
}
- (IBAction)onAcceptAudioOnlyClick:(id)sender {
[_delegate incomingCallAccepted:_call evenWithVideo:NO];
}
@end

View file

@ -1,42 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
#import "TPMultiLayoutViewController.h"
#include "linphone/linphonecore.h"
#import "UIRoundedImageView.h"
@interface CallOutgoingView : TPMultiLayoutViewController <UICompositeViewDelegate> {
}
@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage;
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
@property(weak, nonatomic) IBOutlet UISpeakerButton *speakerButton;
@property(weak, nonatomic) IBOutlet UILabel *addressLabel;
@property(weak, nonatomic) IBOutlet UIToggleButton *routesButton;
@property(weak, nonatomic) IBOutlet UIView *routesView;
@property(weak, nonatomic) IBOutlet UIBluetoothButton *routesBluetoothButton;
@property(weak, nonatomic) IBOutlet UIButton *routesEarpieceButton;
@property(weak, nonatomic) IBOutlet UISpeakerButton *routesSpeakerButton;
@property(weak, nonatomic) IBOutlet UIMutedMicroButton *microButton;
- (IBAction)onDeclineClick:(id)sender;
@end

View file

@ -1,157 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CallOutgoingView.h"
#import "PhoneMainView.h"
@implementation CallOutgoingView
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
isLeftFragment:NO
fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
- (void)viewDidLoad {
_routesEarpieceButton.enabled = !IPAD;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(bluetoothAvailabilityUpdateEvent:)
name:kLinphoneBluetoothAvailabilityUpdate
object:nil];
LinphoneCall *call = linphone_core_get_current_call(LC);
if (!call) {
return;
}
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr withAddressLabel:_addressLabel];
char *uri = linphone_address_as_string_uri_only(addr);
ms_free(uri);
[_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:NO withRoundedRadius:YES];
[self hideSpeaker:LinphoneManager.instance.bluetoothAvailable];
[_speakerButton update];
[_microButton update];
[_routesButton update];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// if there is no call (for whatever reason), we must wait viewDidAppear method
// before popping current view, because UICompositeView cannot handle view change
// directly in viewWillAppear (this would lead to crash in deallocated memory - easily
// reproductible on iPad mini).
if (!linphone_core_get_current_call(LC)) {
[PhoneMainView.instance popCurrentView];
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[NSNotificationCenter.defaultCenter removeObserver:self];
}
- (IBAction)onRoutesBluetoothClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setSpeakerEnabled:FALSE];
[LinphoneManager.instance setBluetoothEnabled:TRUE];
}
- (IBAction)onRoutesEarpieceClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setSpeakerEnabled:FALSE];
[LinphoneManager.instance setBluetoothEnabled:FALSE];
}
- (IBAction)onRoutesSpeakerClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setBluetoothEnabled:FALSE];
[LinphoneManager.instance setSpeakerEnabled:TRUE];
}
- (IBAction)onRoutesClick:(id)sender {
if ([_routesView isHidden]) {
[self hideRoutes:FALSE animated:ANIMATED];
} else {
[self hideRoutes:TRUE animated:ANIMATED];
}
}
- (IBAction)onDeclineClick:(id)sender {
LinphoneCall *call = linphone_core_get_current_call(LC);
if (call) {
linphone_call_terminate(call);
}
}
- (void)hideRoutes:(BOOL)hidden animated:(BOOL)animated {
if (hidden) {
[_routesButton setOff];
} else {
[_routesButton setOn];
}
_routesBluetoothButton.selected = LinphoneManager.instance.bluetoothEnabled;
_routesSpeakerButton.selected = LinphoneManager.instance.speakerEnabled;
_routesEarpieceButton.selected = !_routesBluetoothButton.selected && !_routesSpeakerButton.selected;
if (hidden != _routesView.hidden) {
[_routesView setHidden:hidden];
}
}
- (void)hideSpeaker:(BOOL)hidden {
_speakerButton.hidden = hidden;
_routesButton.hidden = !hidden;
}
#pragma mark - Event Functions
- (void)bluetoothAvailabilityUpdateEvent:(NSNotification *)notif {
bool available = [[notif.userInfo objectForKey:@"available"] intValue];
dispatch_async(dispatch_get_main_queue(), ^{
[self hideSpeaker:available];
});
}
@end

View file

@ -1,26 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
@interface CallPausedTableView : UITableViewController
- (void)update;
@end

View file

@ -1,96 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CallPausedTableView.h"
#import "UICallPausedCell.h"
#import "LinphoneManager.h"
#import "Utils.h"
@implementation CallPausedTableView
#pragma mark - UI change
- (void)update {
[self.tableView reloadData];
CGRect newOrigin = self.tableView.frame;
newOrigin.size.height =
[self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] *
[self tableView:self.tableView numberOfRowsInSection:0];
newOrigin.origin.y += self.tableView.frame.size.height - newOrigin.size.height;
self.tableView.frame = newOrigin;
}
#pragma mark - UITableViewDataSource Functions
- (LinphoneCall *)conferenceCallForRow:(NSInteger)row {
const MSList *calls = linphone_core_get_calls(LC);
int i = -1;
while (calls) {
if (linphone_call_get_state(calls->data) == LinphoneCallPaused) {
i++;
if (i == row)
break;
}
calls = calls->next;
}
// we should reach this only when we are querying for conference
return (calls ? calls->data : NULL);
}
#pragma mark - UITableViewDataSource Functions
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = NSStringFromClass(UICallPausedCell.class);
UICallPausedCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[UICallPausedCell alloc] initWithIdentifier:kCellId];
}
[cell setCall:[self conferenceCallForRow:indexPath.row]];
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
const MSList *calls = linphone_core_get_calls(LC);
int count = 0;
int conference_in_pause = 0;
while (calls) {
LinphoneCall *call = calls->data;
if (linphone_call_get_state(call) == LinphoneCallPaused) {
count++;
}
if (linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(call)) &&
!linphone_core_is_in_conference(LC)) {
conference_in_pause = 1;
}
calls = calls->next;
}
return count + conference_in_pause;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 1e-5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 1e-5;
}
@end

View file

@ -1,31 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "SideMenuTableView.h"
#import "PhoneMainView.h"
@interface CallSideMenuView : UIViewController
@property(weak, nonatomic) IBOutlet UILabel *statsLabel;
- (IBAction)onLateralSwipe:(id)sender;
@end

View file

@ -1,230 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CallSideMenuView.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
@implementation CallSideMenuView {
NSTimer *updateTimer;
}
#pragma mark - ViewController Functions
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (updateTimer != nil) {
[updateTimer invalidate];
}
updateTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(updateStats:)
userInfo:nil
repeats:YES];
[self updateStats:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (updateTimer != nil) {
[updateTimer invalidate];
updateTimer = nil;
}
}
- (IBAction)onLateralSwipe:(id)sender {
[PhoneMainView.instance.mainViewController hideSideMenu:YES];
}
+ (NSString *)iceToString:(LinphoneIceState)state {
switch (state) {
case LinphoneIceStateNotActivated:
return NSLocalizedString(@"Not activated", @"ICE has not been activated for this call");
break;
case LinphoneIceStateFailed:
return NSLocalizedString(@"Failed", @"ICE processing has failed");
break;
case LinphoneIceStateInProgress:
return NSLocalizedString(@"In progress", @"ICE process is in progress");
break;
case LinphoneIceStateHostConnection:
return NSLocalizedString(@"Direct connection",
@"ICE has established a direct connection to the remote host");
break;
case LinphoneIceStateReflexiveConnection:
return NSLocalizedString(
@"NAT(s) connection",
@"ICE has established a connection to the remote host through one or several NATs");
break;
case LinphoneIceStateRelayConnection:
return NSLocalizedString(@"Relay connection", @"ICE has established a connection through a relay");
break;
}
}
+ (NSString*)afinetToString:(int)remote_family {
return (remote_family == LinphoneAddressFamilyUnspec) ? @"Unspecified":(remote_family == LinphoneAddressFamilyInet) ? @"IPv4" : @"IPv6";
}
+ (NSString *)mediaEncryptionToString:(LinphoneMediaEncryption)enc {
switch (enc) {
case LinphoneMediaEncryptionDTLS:
return @"DTLS";
case LinphoneMediaEncryptionSRTP:
return @"SRTP";
case LinphoneMediaEncryptionZRTP:
return @"ZRTP";
case LinphoneMediaEncryptionNone:
break;
}
return NSLocalizedString(@"None", nil);
}
- (NSString *)updateStatsForCall:(LinphoneCall *)call stream:(LinphoneStreamType)stream {
NSMutableString *result = [[NSMutableString alloc] init];
const PayloadType *payload = NULL;
const LinphoneCallStats *stats;
const LinphoneCallParams *params = linphone_call_get_current_params(call);
NSString *name;
switch (stream) {
case LinphoneStreamTypeAudio:
name = @"Audio";
payload = linphone_call_params_get_used_audio_codec(params);
stats = linphone_call_get_audio_stats(call);
break;
case LinphoneStreamTypeText:
name = @"Text";
payload = linphone_call_params_get_used_text_codec(params);
stats = linphone_call_get_text_stats(call);
break;
case LinphoneStreamTypeVideo:
name = @"Video";
payload = linphone_call_params_get_used_video_codec(params);
stats = linphone_call_get_video_stats(call);
break;
case LinphoneStreamTypeUnknown:
break;
}
if (payload == NULL) {
return result;
}
[result appendString:@"\n"];
[result appendString:name];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Codec: %s/%iHz", payload->mime_type, payload->clock_rate]];
if (stream == LinphoneStreamTypeAudio) {
[result appendString:[NSString stringWithFormat:@"/%i channels", payload->channels]];
}
[result appendString:@"\n"];
// Encoder & decoder descriptions
const char *enc_desc = ms_factory_get_encoder(linphone_core_get_ms_factory(LC), payload->mime_type)->text;
const char *dec_desc = ms_factory_get_decoder(linphone_core_get_ms_factory(LC), payload->mime_type)->text;
if (strcmp(enc_desc, dec_desc) == 0) {
[result appendString:[NSString stringWithFormat:@"Encoder/Decoder: %s", enc_desc]];
[result appendString:@"\n"];
} else {
[result appendString:[NSString stringWithFormat:@"Encoder: %s", enc_desc]];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Decoder: %s", dec_desc]];
[result appendString:@"\n"];
}
if (stats != NULL) {
[result appendString:[NSString stringWithFormat:@"Download bandwidth: %1.1f kbits/s",
linphone_call_stats_get_download_bandwidth(stats)]];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Upload bandwidth: %1.1f kbits/s",
linphone_call_stats_get_upload_bandwidth(stats)]];
[result appendString:@"\n"];
if (stream == LinphoneStreamTypeVideo) {
/*[result appendString:[NSString stringWithFormat:@"Estimated download bandwidth: %1.1f kbits/s",
linphone_call_stats_get_estimated_download_bandwidth(stats)]];
[result appendString:@"\n"];*/
}
[result
appendString:[NSString stringWithFormat:@"ICE state: %@",
[self.class iceToString:linphone_call_stats_get_ice_state(stats)]]];
[result appendString:@"\n"];
[result
appendString:[NSString
stringWithFormat:@"Afinet: %@",
[self.class afinetToString:linphone_call_stats_get_ip_family_of_remote(
stats)]]];
[result appendString:@"\n"];
// RTP stats section (packet loss count, etc)
const rtp_stats_t rtp_stats = *linphone_call_stats_get_rtp_stats(stats);
[result
appendString:[NSString stringWithFormat:
@"RTP packets: %llu total, %lld cum loss, %llu discarded, %llu OOT, %llu bad",
rtp_stats.packet_recv, rtp_stats.cum_packet_loss, rtp_stats.discarded,
rtp_stats.outoftime, rtp_stats.bad]];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Sender loss rate: %.2f%%",
linphone_call_stats_get_sender_loss_rate(stats)]];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Receiver loss rate: %.2f%%",
linphone_call_stats_get_receiver_loss_rate(stats)]];
[result appendString:@"\n"];
if (stream == LinphoneStreamTypeVideo) {
const LinphoneVideoDefinition *recv_definition = linphone_call_params_get_received_video_definition(params);
const LinphoneVideoDefinition *sent_definition = linphone_call_params_get_sent_video_definition(params);
float sentFPS = linphone_call_params_get_sent_framerate(params);
float recvFPS = linphone_call_params_get_received_framerate(params);
[result appendString:[NSString stringWithFormat:@"Sent video resolution: %dx%d (%.1fFPS)", linphone_video_definition_get_width(sent_definition),
linphone_video_definition_get_height(sent_definition), sentFPS]];
[result appendString:@"\n"];
[result appendString:[NSString stringWithFormat:@"Received video resolution: %dx%d (%.1fFPS)",
linphone_video_definition_get_width(recv_definition),
linphone_video_definition_get_height(recv_definition), recvFPS]];
[result appendString:@"\n"];
}
}
return result;
}
- (void)updateStats:(NSTimer *)timer {
LinphoneCall *call = linphone_core_get_current_call(LC);
if (!call) {
_statsLabel.text = NSLocalizedString(@"No call in progress", nil);
return;
}
NSMutableString *stats = [[NSMutableString alloc] init];
LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call));
if (enc != LinphoneMediaEncryptionNone) {
[stats appendString:[NSString
stringWithFormat:@"Call encrypted using %@", [self.class mediaEncryptionToString:enc]]];
}
[stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeAudio]];
[stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeVideo]];
[stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeText]];
_statsLabel.text = stats;
}
@end

View file

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CallSideMenuView">
<connections>
<outlet property="statsLabel" destination="ZYY-EM-M2s" id="Syl-sZ-upy"/>
<outlet property="view" destination="YEG-7O-7jE" id="VGG-cE-thT"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="YEG-7O-7jE">
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.69999999999999973" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="100" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="ZYY-EM-M2s" userLabel="statsLabel">
<rect key="frame" x="0.0" y="0.0" width="300" height="625"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<string key="text">Audio: upr
Video: down</string>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<gestureRecognizers/>
<connections>
<outletCollection property="gestureRecognizers" destination="EB5-NY-DqU" appends="YES" id="Bz9-rW-UqV"/>
</connections>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
<point key="canvasLocation" x="473.5" y="318.5"/>
</view>
<tapGestureRecognizer id="EB5-NY-DqU">
<connections>
<action selector="onLateralSwipe:" destination="-1" id="Li9-LU-Om1"/>
</connections>
</tapGestureRecognizer>
</objects>
</document>

View file

@ -1,117 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "VideoZoomHandler.h"
#import "UICamSwitch.h"
#import "UICompositeView.h"
#import "CallPausedTableView.h"
#import "UIMutedMicroButton.h"
#import "UIPauseButton.h"
#import "UISpeakerButton.h"
#import "UIVideoButton.h"
#import "UIHangUpButton.h"
#import "UIDigitButton.h"
#import "UIRoundedImageView.h"
#import "UIBouncingView.h"
@class VideoView;
@interface CallView : TPMultiLayoutViewController <UIGestureRecognizerDelegate, UICompositeViewDelegate> {
@private
UITapGestureRecognizer *singleFingerTap;
NSTimer *hideControlsTimer;
NSTimer *videoDismissTimer;
BOOL videoHidden;
BOOL callRecording;
VideoZoomHandler *videoZoomHandler;
}
@property(nonatomic, strong) IBOutlet CallPausedTableView *pausedCallsTable;
@property(nonatomic, strong) IBOutlet UIView *videoGroup;
@property(nonatomic, strong) IBOutlet UIView *videoView;
@property(nonatomic, strong) IBOutlet UIView *videoPreview;
@property(nonatomic, strong) IBOutlet UICamSwitch *videoCameraSwitch;
@property(nonatomic, strong) IBOutlet UIActivityIndicatorView *videoWaitingForFirstImage;
@property(weak, nonatomic) IBOutlet UIView *callView;
@property(nonatomic, strong) IBOutlet UIPauseButton *callPauseButton;
@property(nonatomic, strong) IBOutlet UIButton *optionsConferenceButton;
@property(nonatomic, strong) IBOutlet UIVideoButton *videoButton;
@property(nonatomic, strong) IBOutlet UIMutedMicroButton *microButton;
@property(nonatomic, strong) IBOutlet UISpeakerButton *speakerButton;
@property(nonatomic, strong) IBOutlet UIToggleButton *routesButton;
@property(nonatomic, strong) IBOutlet UIToggleButton *optionsButton;
@property(nonatomic, strong) IBOutlet UIHangUpButton *hangupButton;
@property(nonatomic, strong) IBOutlet UIView *numpadView;
@property(nonatomic, strong) IBOutlet UIView *routesView;
@property(nonatomic, strong) IBOutlet UIView *optionsView;
@property(nonatomic, strong) IBOutlet UIButton *routesEarpieceButton;
@property(nonatomic, strong) IBOutlet UIButton *routesSpeakerButton;
@property(nonatomic, strong) IBOutlet UIButton *routesBluetoothButton;
@property(nonatomic, strong) IBOutlet UIButton *optionsAddButton;
@property(nonatomic, strong) IBOutlet UIButton *optionsTransferButton;
@property(nonatomic, strong) IBOutlet UIToggleButton *numpadButton;
@property(weak, nonatomic) IBOutlet UIPauseButton *conferencePauseButton;
@property(weak, nonatomic) IBOutlet UIBouncingView *chatNotificationView;
@property(weak, nonatomic) IBOutlet UILabel *chatNotificationLabel;
@property (weak, nonatomic) IBOutlet UIButton *recordButton;
@property (weak, nonatomic) IBOutlet UIButton *recordButtonOnView;
@property(weak, nonatomic) IBOutlet UIView *bottomBar;
@property(nonatomic, strong) IBOutlet UIDigitButton *oneButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *twoButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *threeButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *fourButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *fiveButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *sixButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *sevenButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *eightButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *nineButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *starButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *zeroButton;
@property(nonatomic, strong) IBOutlet UIDigitButton *hashButton;
@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage;
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
@property(weak, nonatomic) IBOutlet UILabel *durationLabel;
@property(weak, nonatomic) IBOutlet UIView *pausedByRemoteView;
@property(weak, nonatomic) IBOutlet UIView *noActiveCallView;
@property(weak, nonatomic) IBOutlet UIView *conferenceView;
@property(strong, nonatomic) IBOutlet CallPausedTableView *conferenceCallsTable;
@property (weak, nonatomic) IBOutlet UIView *waitView;
@property (weak, nonatomic) IBOutlet UIView *infoView;
- (IBAction)onRoutesClick:(id)sender;
- (IBAction)onRoutesBluetoothClick:(id)sender;
- (IBAction)onRoutesEarpieceClick:(id)sender;
- (IBAction)onRoutesSpeakerClick:(id)sender;
- (IBAction)onOptionsClick:(id)sender;
- (IBAction)onOptionsTransferClick:(id)sender;
- (IBAction)onOptionsAddClick:(id)sender;
- (IBAction)onOptionsConferenceClick:(id)sender;
- (IBAction)onNumpadClick:(id)sender;
- (IBAction)onChatClick:(id)sender;
- (IBAction)onRecordClick:(id)sender;
- (IBAction)onRecordOnViewClick:(id)sender;
@end

View file

@ -1,914 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <AVFoundation/AVAudioSession.h>
#import <AddressBook/AddressBook.h>
#import <AudioToolbox/AudioToolbox.h>
#import <OpenGLES/EAGL.h>
#import <OpenGLES/EAGLDrawable.h>
#import <QuartzCore/CAAnimation.h>
#import <QuartzCore/QuartzCore.h>
#import <UserNotifications/UserNotifications.h>
#import "CallView.h"
#import "CallSideMenuView.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
#import "Utils.h"
#include "linphone/linphonecore.h"
const NSInteger SECURE_BUTTON_TAG = 5;
@implementation CallView {
BOOL hiddenVolume;
}
#pragma mark - Lifecycle Functions
- (id)init {
self = [super initWithNibName:NSStringFromClass(self.class) bundle:[NSBundle mainBundle]];
if (self != nil) {
singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleControls:)];
videoZoomHandler = [[VideoZoomHandler alloc] init];
videoHidden = TRUE;
[self updateInfoView];
}
return self;
}
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
isLeftFragment:YES
fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
#pragma mark - ViewController Functions
- (void)viewDidLoad {
[super viewDidLoad];
_routesEarpieceButton.enabled = !IPAD;
// TODO: fixme! video preview frame is too big compared to openGL preview
// frame, so until this is fixed, temporary disabled it.
#if 0
_videoPreview.layer.borderColor = UIColor.whiteColor.CGColor;
_videoPreview.layer.borderWidth = 1;
#endif
[singleFingerTap setNumberOfTapsRequired:1];
[singleFingerTap setCancelsTouchesInView:FALSE];
[self.videoView addGestureRecognizer:singleFingerTap];
[videoZoomHandler setup:_videoGroup];
_videoGroup.alpha = 0;
[_videoCameraSwitch setPreview:_videoPreview];
UIPanGestureRecognizer *dragndrop =
[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveVideoPreview:)];
dragndrop.minimumNumberOfTouches = 1;
[_videoPreview addGestureRecognizer:dragndrop];
[_zeroButton setDigit:'0'];
[_zeroButton setDtmf:true];
[_oneButton setDigit:'1'];
[_oneButton setDtmf:true];
[_twoButton setDigit:'2'];
[_twoButton setDtmf:true];
[_threeButton setDigit:'3'];
[_threeButton setDtmf:true];
[_fourButton setDigit:'4'];
[_fourButton setDtmf:true];
[_fiveButton setDigit:'5'];
[_fiveButton setDtmf:true];
[_sixButton setDigit:'6'];
[_sixButton setDtmf:true];
[_sevenButton setDigit:'7'];
[_sevenButton setDtmf:true];
[_eightButton setDigit:'8'];
[_eightButton setDtmf:true];
[_nineButton setDigit:'9'];
[_nineButton setDtmf:true];
[_starButton setDigit:'*'];
[_starButton setDtmf:true];
[_hashButton setDigit:'#'];
[_hashButton setDtmf:true];
}
- (void)dealloc {
[PhoneMainView.instance.view removeGestureRecognizer:singleFingerTap];
// Remove all observer
[NSNotificationCenter.defaultCenter removeObserver:self];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_waitView.hidden = TRUE;
LinphoneManager.instance.nextCallIsTransfer = NO;
callRecording = FALSE;
_recordButtonOnView.hidden = TRUE;
// Update on show
[self hideRoutes:TRUE animated:FALSE];
[self hideOptions:TRUE animated:FALSE];
[self hidePad:TRUE animated:FALSE];
[self hideSpeaker:LinphoneManager.instance.bluetoothAvailable];
[self callDurationUpdate];
[self onCurrentCallChange];
// Set windows (warn memory leaks)
linphone_core_set_native_video_window_id(LC, (__bridge void *)(_videoView));
linphone_core_set_native_preview_window_id(LC, (__bridge void *)(_videoPreview));
[self previewTouchLift];
// Enable tap
[singleFingerTap setEnabled:TRUE];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(messageReceived:)
name:kLinphoneMessageReceived
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(bluetoothAvailabilityUpdateEvent:)
name:kLinphoneBluetoothAvailabilityUpdate
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(callUpdateEvent:)
name:kLinphoneCallUpdate
object:nil];
[NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(callDurationUpdate)
userInfo:nil
repeats:YES];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
[[UIDevice currentDevice] setProximityMonitoringEnabled:TRUE];
[PhoneMainView.instance setVolumeHidden:TRUE];
hiddenVolume = TRUE;
// we must wait didAppear to reset fullscreen mode because we cannot change it in viewwillappear
LinphoneCall *call = linphone_core_get_current_call(LC);
LinphoneCallState state = (call != NULL) ? linphone_call_get_state(call) : 0;
[self callUpdate:call state:state animated:FALSE];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIDevice currentDevice] setProximityMonitoringEnabled:FALSE];
[self disableVideoDisplay:TRUE animated:NO];
if (hideControlsTimer != nil) {
[hideControlsTimer invalidate];
hideControlsTimer = nil;
}
if (hiddenVolume) {
[PhoneMainView.instance setVolumeHidden:FALSE];
hiddenVolume = FALSE;
}
if (videoDismissTimer) {
[self dismissVideoActionSheet:videoDismissTimer];
[videoDismissTimer invalidate];
videoDismissTimer = nil;
}
// Remove observer
[NSNotificationCenter.defaultCenter removeObserver:self];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[UIApplication sharedApplication] setIdleTimerDisabled:false];
[[UIDevice currentDevice] setProximityMonitoringEnabled:FALSE];
[PhoneMainView.instance fullScreen:false];
// Disable tap
[singleFingerTap setEnabled:FALSE];
if (linphone_core_get_calls_nb(LC) == 0) {
// reseting speaker button because no more call
_speakerButton.selected = FALSE;
}
NSString *address = [LinphoneManager.instance lpConfigStringForKey:@"sas_dialog_denied"];
if (address) {
UIConfirmationDialog *securityDialog = [UIConfirmationDialog ShowWithMessage:NSLocalizedString(@"Trust has been denied. Make a call to start the authentication process again.", nil)
cancelMessage:NSLocalizedString(@"CANCEL", nil)
confirmMessage:NSLocalizedString(@"CALL", nil)
onCancelClick:^() {
}
onConfirmationClick:^() {
LinphoneAddress *addr = linphone_address_new(address.UTF8String);
[LinphoneManager.instance doCallWithSas:addr isSas:TRUE];
linphone_address_unref(addr);
} ];
[securityDialog.securityImage setImage:[UIImage imageNamed:@"security_alert_indicator.png"]];
securityDialog.securityImage.hidden = FALSE;
[securityDialog setSpecialColor];
[LinphoneManager.instance lpConfigSetString:nil forKey:@"sas_dialog_denied"];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
[self updateUnreadMessage:NO];
[self previewTouchLift];
[self hideStatusBar:!videoHidden && (_nameLabel.alpha <= 0.f)];
[_recordButtonOnView setHidden:!callRecording];
[self updateInfoView];
}
#pragma mark - UI modification
- (void)updateInfoView {
CGRect infoFrame = _infoView.frame;
CGRect pauseFrame = _callPauseButton.frame;
CGRect recordFrame = _recordButtonOnView.frame;
if (videoHidden) {
infoFrame.origin.y = (_avatarImage.frame.origin.y-66)/2;
pauseFrame.origin.y = _avatarImage.frame.origin.y + _avatarImage.frame.size.height - pauseFrame.size.height;
} else {
infoFrame.origin.y = 0;
pauseFrame.origin.y = _videoCameraSwitch.frame.origin.y+_videoGroup.frame.origin.y;
}
recordFrame.origin.y = pauseFrame.origin.y;
_infoView.frame = infoFrame;
_callPauseButton.frame = pauseFrame;
_recordButtonOnView.frame = recordFrame;
}
- (void)hideSpinnerIndicator:(LinphoneCall *)call {
_videoWaitingForFirstImage.hidden = TRUE;
}
static void hideSpinner(LinphoneCall *call, void *user_data) {
CallView *thiz = (__bridge CallView *)user_data;
[thiz hideSpinnerIndicator:call];
}
- (void)updateBottomBar:(LinphoneCall *)call state:(LinphoneCallState)state {
[_speakerButton update];
[_microButton update];
[_callPauseButton update];
[_conferencePauseButton update];
[_videoButton update];
[_hangupButton update];
_optionsButton.enabled = (!call || !linphone_core_sound_resources_locked(LC));
_optionsTransferButton.enabled = call && !linphone_core_sound_resources_locked(LC);
// enable conference button if 2 calls are presents and at least one is not in the conference
int confSize = linphone_core_get_conference_size(LC) - (linphone_core_is_in_conference(LC) ? 1 : 0);
_optionsConferenceButton.enabled =
((linphone_core_get_calls_nb(LC) > 1) && (linphone_core_get_calls_nb(LC) != confSize));
// Disable transfert in conference
if (linphone_core_get_current_call(LC) == NULL) {
[_optionsTransferButton setEnabled:FALSE];
} else {
[_optionsTransferButton setEnabled:TRUE];
}
switch (state) {
case LinphoneCallEnd:
case LinphoneCallError:
case LinphoneCallIncoming:
case LinphoneCallOutgoing:
[self hidePad:TRUE animated:TRUE];
[self hideOptions:TRUE animated:TRUE];
[self hideRoutes:TRUE animated:TRUE];
default:
break;
}
}
- (void)toggleControls:(id)sender {
bool controlsHidden = (_bottomBar.alpha == 0.0);
[self hideControls:!controlsHidden sender:sender];
}
- (void)timerHideControls:(id)sender {
[self hideControls:TRUE sender:sender];
}
- (void)hideControls:(BOOL)hidden sender:(id)sender {
if (videoHidden && hidden)
return;
if (hideControlsTimer) {
[hideControlsTimer invalidate];
hideControlsTimer = nil;
}
if ([[PhoneMainView.instance currentView] equal:CallView.compositeViewDescription]) {
// show controls
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.35];
_pausedCallsTable.tableView.alpha = _videoCameraSwitch.alpha = _callPauseButton.alpha = _routesView.alpha =
_optionsView.alpha = _numpadView.alpha = _bottomBar.alpha = (hidden ? 0 : 1);
_nameLabel.alpha = _durationLabel.alpha = (hidden ? 0 : .8f);
[self hideStatusBar:hidden];
[UIView commitAnimations];
[PhoneMainView.instance hideTabBar:hidden];
if (!hidden) {
// hide controls in 5 sec
hideControlsTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(timerHideControls:)
userInfo:nil
repeats:NO];
}
}
}
- (void)disableVideoDisplay:(BOOL)disabled animated:(BOOL)animation {
if (disabled == videoHidden && animation)
return;
videoHidden = disabled;
if (!disabled) {
[videoZoomHandler resetZoom];
}
if (animation) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
}
[_videoGroup setAlpha:disabled ? 0 : 1];
[self hideControls:!disabled sender:nil];
if (animation) {
[UIView commitAnimations];
}
// only show camera switch button if we have more than 1 camera
_videoCameraSwitch.hidden = (disabled || !LinphoneManager.instance.frontCamId);
_videoPreview.hidden = (disabled || !linphone_core_self_view_enabled(LC));
if (hideControlsTimer != nil) {
[hideControlsTimer invalidate];
hideControlsTimer = nil;
}
if(![PhoneMainView.instance isIphoneXDevice]){
[PhoneMainView.instance fullScreen:!disabled];
}
[PhoneMainView.instance hideTabBar:!disabled];
if (!disabled) {
#ifdef TEST_VIDEO_VIEW_CHANGE
[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(_debugChangeVideoView)
userInfo:nil
repeats:YES];
#endif
// [self batteryLevelChanged:nil];
[_videoWaitingForFirstImage setHidden:NO];
[_videoWaitingForFirstImage startAnimating];
LinphoneCall *call = linphone_core_get_current_call(LC);
// linphone_call_params_get_used_video_codec return 0 if no video stream enabled
if (call != NULL && linphone_call_params_get_used_video_codec(linphone_call_get_current_params(call))) {
linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, (__bridge void *)(self));
}
}
}
- (void)displayVideoCall:(BOOL)animated {
[self disableVideoDisplay:FALSE animated:animated];
}
- (void)displayAudioCall:(BOOL)animated {
[self disableVideoDisplay:TRUE animated:animated];
}
- (void)hideStatusBar:(BOOL)hide {
/* we cannot use [PhoneMainView.instance show]; because it will automatically
resize current view to fill empty space, which will resize video. This is
indesirable since we do not want to crop/rescale video view */
PhoneMainView.instance.mainViewController.statusBarView.hidden = hide;
}
- (void)callDurationUpdate {
int duration =
linphone_core_get_current_call(LC) ? linphone_call_get_duration(linphone_core_get_current_call(LC)) : 0;
_durationLabel.text = [LinphoneUtils durationToString:duration];
[_pausedCallsTable update];
[_conferenceCallsTable update];
}
- (void)onCurrentCallChange {
LinphoneCall *call = linphone_core_get_current_call(LC);
_noActiveCallView.hidden = (call || linphone_core_is_in_conference(LC));
_callView.hidden = !call;
_conferenceView.hidden = !linphone_core_is_in_conference(LC);
_callPauseButton.hidden = !call && !linphone_core_is_in_conference(LC);
[_callPauseButton setType:UIPauseButtonType_CurrentCall call:call];
[_conferencePauseButton setType:UIPauseButtonType_Conference call:call];
if (!_callView.hidden) {
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr];
char *uri = linphone_address_as_string_uri_only(addr);
ms_free(uri);
[_avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:YES withRoundedRadius:YES];
}
}
- (void)hidePad:(BOOL)hidden animated:(BOOL)animated {
if (hidden) {
[_numpadButton setOff];
} else {
[_numpadButton setOn];
}
if (hidden != _numpadView.hidden) {
if (animated) {
[self hideAnimation:hidden forView:_numpadView completion:nil];
} else {
[_numpadView setHidden:hidden];
}
}
}
- (void)hideRoutes:(BOOL)hidden animated:(BOOL)animated {
if (hidden) {
[_routesButton setOff];
} else {
[_routesButton setOn];
}
_routesBluetoothButton.selected = LinphoneManager.instance.bluetoothEnabled;
_routesSpeakerButton.selected = LinphoneManager.instance.speakerEnabled;
_routesEarpieceButton.selected = !_routesBluetoothButton.selected && !_routesSpeakerButton.selected;
if (hidden != _routesView.hidden) {
if (animated) {
[self hideAnimation:hidden forView:_routesView completion:nil];
} else {
[_routesView setHidden:hidden];
}
}
}
- (void)hideOptions:(BOOL)hidden animated:(BOOL)animated {
if (hidden) {
[_optionsButton setOff];
} else {
[_optionsButton setOn];
}
if (hidden != _optionsView.hidden) {
if (animated) {
[self hideAnimation:hidden forView:_optionsView completion:nil];
} else {
[_optionsView setHidden:hidden];
}
}
}
- (void)hideSpeaker:(BOOL)hidden {
_speakerButton.hidden = hidden;
_routesButton.hidden = !hidden;
}
#pragma mark - Event Functions
- (void)bluetoothAvailabilityUpdateEvent:(NSNotification *)notif {
bool available = [[notif.userInfo objectForKey:@"available"] intValue];
dispatch_async(dispatch_get_main_queue(), ^{
[self hideSpeaker:available];
});
}
- (void)callUpdateEvent:(NSNotification *)notif {
LinphoneCall *call = [[notif.userInfo objectForKey:@"call"] pointerValue];
LinphoneCallState state = [[notif.userInfo objectForKey:@"state"] intValue];
[self callUpdate:call state:state animated:TRUE];
}
- (void)callUpdate:(LinphoneCall *)call state:(LinphoneCallState)state animated:(BOOL)animated {
[self updateBottomBar:call state:state];
if (hiddenVolume) {
[PhoneMainView.instance setVolumeHidden:FALSE];
hiddenVolume = FALSE;
}
// Update tables
[_pausedCallsTable update];
[_conferenceCallsTable update];
static LinphoneCall *currentCall = NULL;
if (!currentCall || linphone_core_get_current_call(LC) != currentCall) {
currentCall = linphone_core_get_current_call(LC);
[self onCurrentCallChange];
}
// Fake call update
if (call == NULL) {
return;
}
BOOL shouldDisableVideo =
(!currentCall || !linphone_call_params_video_enabled(linphone_call_get_current_params(currentCall)));
if (videoHidden != shouldDisableVideo) {
if (!shouldDisableVideo) {
[self displayVideoCall:animated];
} else {
[self displayAudioCall:animated];
}
}
// camera is diabled duiring conference, it must be activated after leaving conference.
if (!shouldDisableVideo && !linphone_core_is_in_conference(LC)) {
linphone_call_enable_camera(call, TRUE);
}
[self updateInfoView];
if (state != LinphoneCallPausedByRemote) {
_pausedByRemoteView.hidden = YES;
}
switch (state) {
case LinphoneCallIncomingReceived:
case LinphoneCallOutgoingInit:
case LinphoneCallConnected:
case LinphoneCallStreamsRunning: {
// check video
if (!linphone_call_params_video_enabled(linphone_call_get_current_params(call))) {
const LinphoneCallParams *param = linphone_call_get_current_params(call);
const LinphoneCallAppData *callAppData =
(__bridge const LinphoneCallAppData *)(linphone_call_get_user_data(call));
if (state == LinphoneCallStreamsRunning && callAppData->videoRequested &&
linphone_call_params_low_bandwidth_enabled(param)) {
// too bad video was not enabled because low bandwidth
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Low bandwidth", nil)
message:NSLocalizedString(@"Video cannot be activated because of low bandwidth "
@"condition, only audio is available",
nil)
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Continue", nil)
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errView addAction:defaultAction];
[self presentViewController:errView animated:YES completion:nil];
callAppData->videoRequested = FALSE; /*reset field*/
}
}
break;
}
case LinphoneCallUpdatedByRemote: {
const LinphoneCallParams *current = linphone_call_get_current_params(call);
const LinphoneCallParams *remote = linphone_call_get_remote_params(call);
/* remote wants to add video */
if ((linphone_core_video_display_enabled(LC) && !linphone_call_params_video_enabled(current) &&
linphone_call_params_video_enabled(remote)) &&
(!linphone_core_get_video_policy(LC)->automatically_accept ||
(([UIApplication sharedApplication].applicationState != UIApplicationStateActive) &&
floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max))) {
linphone_core_defer_call_update(LC, call);
[self displayAskToEnableVideoCall:call];
} else if (linphone_call_params_video_enabled(current) && !linphone_call_params_video_enabled(remote)) {
[self displayAudioCall:animated];
}
break;
}
case LinphoneCallPausing:
case LinphoneCallPaused:
[self displayAudioCall:animated];
break;
case LinphoneCallPausedByRemote:
[self displayAudioCall:animated];
if (call == linphone_core_get_current_call(LC)) {
_pausedByRemoteView.hidden = NO;
}
break;
case LinphoneCallEnd:
case LinphoneCallError:
default:
break;
}
}
#pragma mark - ActionSheet Functions
- (void)displayAskToEnableVideoCall:(LinphoneCall *)call {
if (linphone_call_params_get_local_conference_mode(linphone_call_get_current_params(call))) {
return;
}
if (linphone_core_get_video_policy(LC)->automatically_accept &&
!([UIApplication sharedApplication].applicationState != UIApplicationStateActive))
return;
NSString *username = [FastAddressBook displayNameForAddress:linphone_call_get_remote_address(call)];
NSString *title = [NSString stringWithFormat:NSLocalizedString(@"%@ would like to enable video", nil), username];
if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive &&
floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) {
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = NSLocalizedString(@"Video request", nil);
content.body = title;
content.categoryIdentifier = @"video_request";
content.userInfo = @{
@"CallId" : [NSString stringWithUTF8String:linphone_call_log_get_call_id(linphone_call_get_call_log(call))]
};
UNNotificationRequest *req =
[UNNotificationRequest requestWithIdentifier:@"video_request" content:content trigger:NULL];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:req
withCompletionHandler:^(NSError *_Nullable error) {
// Enable or disable features based on authorization.
if (error) {
LOGD(@"Error while adding notification request :");
LOGD(error.description);
}
}];
} else {
UIConfirmationDialog *sheet = [UIConfirmationDialog ShowWithMessage:title
cancelMessage:nil
confirmMessage:NSLocalizedString(@"ACCEPT", nil)
onCancelClick:^() {
LOGI(@"User declined video proposal");
if (call == linphone_core_get_current_call(LC)) {
LinphoneCallParams *params = linphone_core_create_call_params(LC, call);
linphone_call_accept_update(call, params);
linphone_call_params_destroy(params);
[videoDismissTimer invalidate];
videoDismissTimer = nil;
}
}
onConfirmationClick:^() {
LOGI(@"User accept video proposal");
if (call == linphone_core_get_current_call(LC)) {
LinphoneCallParams *params = linphone_core_create_call_params(LC, call);
linphone_call_params_enable_video(params, TRUE);
linphone_call_accept_update(call, params);
linphone_call_params_destroy(params);
[videoDismissTimer invalidate];
videoDismissTimer = nil;
}
}
inController:self];
videoDismissTimer = [NSTimer scheduledTimerWithTimeInterval:30
target:self
selector:@selector(dismissVideoActionSheet:)
userInfo:sheet
repeats:NO];
}
}
- (void)dismissVideoActionSheet:(NSTimer *)timer {
UIConfirmationDialog *sheet = (UIConfirmationDialog *)timer.userInfo;
[sheet dismiss];
}
#pragma mark VideoPreviewMoving
- (void)moveVideoPreview:(UIPanGestureRecognizer *)dragndrop {
CGPoint center = [dragndrop locationInView:_videoPreview.superview];
_videoPreview.center = center;
if (dragndrop.state == UIGestureRecognizerStateEnded) {
[self previewTouchLift];
}
}
- (CGFloat)coerce:(CGFloat)value betweenMin:(CGFloat)min andMax:(CGFloat)max {
return MAX(min, MIN(value, max));
}
- (void)previewTouchLift {
CGRect previewFrame = _videoPreview.frame;
previewFrame.origin.x = [self coerce:previewFrame.origin.x
betweenMin:5
andMax:(UIScreen.mainScreen.bounds.size.width - 5 - previewFrame.size.width)];
previewFrame.origin.y = [self coerce:previewFrame.origin.y
betweenMin:5
andMax:(UIScreen.mainScreen.bounds.size.height - 5 - previewFrame.size.height)];
if (!CGRectEqualToRect(previewFrame, _videoPreview.frame)) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.3
animations:^{
LOGD(@"Recentering preview to %@", NSStringFromCGRect(previewFrame));
_videoPreview.frame = previewFrame;
}];
});
}
}
#pragma mark - Action Functions
- (IBAction)onNumpadClick:(id)sender {
if ([_numpadView isHidden]) {
[self hidePad:FALSE animated:ANIMATED];
} else {
[self hidePad:TRUE animated:ANIMATED];
}
}
- (IBAction)onChatClick:(id)sender {
const LinphoneCall *currentCall = linphone_core_get_current_call(LC);
const LinphoneAddress *addr = currentCall ? linphone_call_get_remote_address(currentCall) : NULL;
// TODO encrpted or unencrpted
[PhoneMainView.instance getOrCreateOneToOneChatRoom:addr waitView:_waitView isEncrypted:FALSE];
}
- (IBAction)onRecordClick:(id)sender {
if (![_optionsView isHidden])
[self hideOptions:TRUE animated:ANIMATED];
if (callRecording) {
[self onRecordOnViewClick:nil];
} else {
LOGD(@"Recording Starts");
[_recordButton setImage:[UIImage imageNamed:@"rec_off_default.png"] forState:UIControlStateNormal];
[_recordButtonOnView setHidden:FALSE];
LinphoneCall *call = linphone_core_get_current_call(LC);
linphone_call_start_recording(call);
callRecording = TRUE;
}
}
- (IBAction)onRecordOnViewClick:(id)sender {
LOGD(@"Recording Stops");
[_recordButton setImage:[UIImage imageNamed:@"rec_on_default.png"] forState:UIControlStateNormal];
[_recordButtonOnView setHidden:TRUE];
LinphoneCall *call = linphone_core_get_current_call(LC);
linphone_call_stop_recording(call);
callRecording = FALSE;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *writablePath = [paths objectAtIndex:0];
writablePath = [writablePath stringByAppendingString:@"/"];
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:writablePath error:NULL];
if (directoryContent) {
return;
}
}
- (IBAction)onRoutesBluetoothClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setSpeakerEnabled:FALSE];
[LinphoneManager.instance setBluetoothEnabled:TRUE];
}
- (IBAction)onRoutesEarpieceClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setSpeakerEnabled:FALSE];
[LinphoneManager.instance setBluetoothEnabled:FALSE];
}
- (IBAction)onRoutesSpeakerClick:(id)sender {
[self hideRoutes:TRUE animated:TRUE];
[LinphoneManager.instance setBluetoothEnabled:FALSE];
[LinphoneManager.instance setSpeakerEnabled:TRUE];
}
- (IBAction)onRoutesClick:(id)sender {
if ([_routesView isHidden]) {
[self hideRoutes:FALSE animated:ANIMATED];
} else {
[self hideRoutes:TRUE animated:ANIMATED];
}
}
- (IBAction)onOptionsClick:(id)sender {
if ([_optionsView isHidden]) {
[self hideOptions:FALSE animated:ANIMATED];
} else {
[self hideOptions:TRUE animated:ANIMATED];
}
}
- (IBAction)onOptionsTransferClick:(id)sender {
[self hideOptions:TRUE animated:TRUE];
DialerView *view = VIEW(DialerView);
[view setAddress:@""];
LinphoneManager.instance.nextCallIsTransfer = YES;
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
}
- (IBAction)onOptionsAddClick:(id)sender {
[self hideOptions:TRUE animated:TRUE];
DialerView *view = VIEW(DialerView);
[view setAddress:@""];
LinphoneManager.instance.nextCallIsTransfer = NO;
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
}
- (IBAction)onOptionsConferenceClick:(id)sender {
[self hideOptions:TRUE animated:TRUE];
linphone_core_add_all_to_conference(LC);
}
#pragma mark - Animation
- (void)hideAnimation:(BOOL)hidden forView:(UIView *)target completion:(void (^)(BOOL finished))completion {
if (hidden) {
int original_y = target.frame.origin.y;
CGRect newFrame = target.frame;
newFrame.origin.y = self.view.frame.size.height;
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
target.frame = newFrame;
}
completion:^(BOOL finished) {
CGRect originFrame = target.frame;
originFrame.origin.y = original_y;
target.hidden = YES;
target.frame = originFrame;
if (completion)
completion(finished);
}];
} else {
CGRect frame = target.frame;
int original_y = frame.origin.y;
frame.origin.y = self.view.frame.size.height;
target.frame = frame;
frame.origin.y = original_y;
target.hidden = NO;
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
target.frame = frame;
}
completion:^(BOOL finished) {
target.frame = frame; // in case application did not finish
if (completion)
completion(finished);
}];
}
}
#pragma mark - Bounce
- (void)messageReceived:(NSNotification *)notif {
[self updateUnreadMessage:TRUE];
}
- (void)updateUnreadMessage:(BOOL)appear {
int unreadMessage = [LinphoneManager unreadMessageCount];
if (unreadMessage > 0) {
_chatNotificationLabel.text = [NSString stringWithFormat:@"%i", unreadMessage];
[_chatNotificationView startAnimating:appear];
} else {
[_chatNotificationView stopAnimating:appear];
}
}
@end

View file

@ -1,24 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
@interface ChatConversationCreateCollectionViewController : UICollectionViewController
@end

View file

@ -1,41 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "ChatConversationCreateCollectionViewController.h"
@interface ChatConversationCreateCollectionViewController ()
@end
@implementation ChatConversationCreateCollectionViewController
static NSString * const reuseIdentifier = @"Cell";
- (void)viewDidLoad {
[super viewDidLoad];
// Register cell classes
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end

View file

@ -1,38 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
@interface ChatConversationCreateTableView : UITableViewController <UISearchBarDelegate>
@property(nonatomic) Boolean allFilter;
@property(nonatomic) Boolean notFirstTime;
@property(nonatomic, strong) NSMutableArray *contactsGroup;
@property(nonatomic) LinphoneMagicSearch *magicSearch;
@property(weak, nonatomic) IBOutlet UISearchBar *searchBar;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property (weak, nonatomic) IBOutlet UIIconButton *controllerNextButton;
@property (weak, nonatomic) IBOutlet UIView *waitView;
@property(nonatomic) Boolean isForEditing;
@property(nonatomic) Boolean isGroupChat;
@property(nonatomic) Boolean isEncrypted;
- (void) loadData;
@end

View file

@ -1,308 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "ChatConversationCreateTableView.h"
#import "UIChatCreateCell.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
#import "UIChatCreateCollectionViewCell.h"
@interface ChatConversationCreateTableView ()
@property(nonatomic, strong) NSMutableArray *addresses;
@property(nonatomic, strong) NSMutableArray *phoneOrAddr;
@property(nonatomic, strong) NSMutableArray *addressesCached;
@end
@implementation ChatConversationCreateTableView
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_magicSearch = linphone_core_create_magic_search(LC);
int y = _contactsGroup.count > 0
? _collectionView.frame.origin.y + _collectionView.frame.size.height
: _searchBar.frame.origin.y + _searchBar.frame.size.height;
[UIView animateWithDuration:0
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.tableView setFrame:CGRectMake(self.tableView.frame.origin.x,
y,
self.tableView.frame.size.width,
_waitView.frame.size.height - _waitView.frame.origin.y - y)];
}
completion:nil];
_addresses = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count];
_phoneOrAddr = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count];
_addressesCached = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count];
if(_notFirstTime) {
for(NSString *addr in _contactsGroup) {
[_collectionView registerClass:UIChatCreateCollectionViewCell.class forCellWithReuseIdentifier:addr];
}
[self searchBar:_searchBar textDidChange:_searchBar.text];
return;
}
_contactsGroup = [[NSMutableArray alloc] init];
[_searchBar setText:@""];
[self searchBar:_searchBar textDidChange:_searchBar.text];
self.tableView.accessibilityIdentifier = @"Suggested addresses";
}
- (void) viewWillDisappear:(BOOL)animated {
_notFirstTime = FALSE;
linphone_magic_search_unref(_magicSearch);
_magicSearch = NULL;
}
- (void) loadData {
[self reloadDataWithFilter:_searchBar.text];
}
- (void)reloadDataWithFilter:(NSString *)filter {
[_addresses removeAllObjects];
[_phoneOrAddr removeAllObjects];
[_addressesCached removeAllObjects];
if (!_magicSearch)
return;
bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, _allFilter ? "" : "*");
while (results) {
LinphoneSearchResult *result = results->data;
const LinphoneAddress *addr = linphone_search_result_get_address(result);
const char *phoneNumber = NULL;
Contact *contact = nil;
char *uri = nil;
NSString *address = nil;
if (addr) {
uri = linphone_address_as_string_uri_only(addr);
address = [NSString stringWithUTF8String:uri];
contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:[FastAddressBook normalizeSipURI:address]];
}
if (!addr || (!contact && linphone_search_result_get_friend(result))) {
phoneNumber = linphone_search_result_get_phone_number(result);
if (!phoneNumber) {
results = results->next;
continue;
}
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
if (cfg) {
const char *normalizedPhoneNumber = linphone_proxy_config_normalize_phone_number(cfg, phoneNumber);
if (!normalizedPhoneNumber) {
// get invalid phone number, continue
results = results->next;
continue;
}
addr = linphone_proxy_config_normalize_sip_uri(cfg, normalizedPhoneNumber);
uri = linphone_address_as_string_uri_only(addr);
address = [NSString stringWithUTF8String:uri];
}
}
if (!addr) {
results = results->next;
continue;
}
ms_free(uri);
[_addresses addObject:address];
[_phoneOrAddr addObject:phoneNumber ? [NSString stringWithUTF8String:phoneNumber] : address];
[_addressesCached addObject:[NSString stringWithFormat:@"%d",linphone_search_result_get_capabilities(result)]];
results = results->next;
}
[self.tableView reloadData];
}
#pragma mark - TableView methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _addresses.count;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
return 60.0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = NSStringFromClass(UIChatCreateCell.class);
UIChatCreateCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil)
cell = [[UIChatCreateCell alloc] initWithIdentifier:kCellId];
NSString *key = [_addresses objectAtIndex:indexPath.row];
NSString *phoneOrAddr = [_phoneOrAddr objectAtIndex:indexPath.row];
Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:[FastAddressBook normalizeSipURI:key]];
const LinphonePresenceModel *model = contact.friend ? linphone_friend_get_presence_model(contact.friend) : NULL;
Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact]
|| (model && linphone_presence_model_get_basic_status(model) == LinphonePresenceBasicStatusOpen);
LinphoneAddress *addr = [LinphoneUtils normalizeSipOrPhoneAddress:key];
if (!addr)
return cell;
cell.linphoneImage.hidden = !linphoneContact;
cell.securityImage.hidden = !(model && linphone_presence_model_has_capability(model, LinphoneFriendCapabilityLimeX3dh));
int capabilities = [[_addressesCached objectAtIndex:indexPath.row] intValue];
BOOL greyCellForEncryptedChat = _isEncrypted ? capabilities > 1 : TRUE;
BOOL greyCellForGroupChat = _isGroupChat ? capabilities > 0 : TRUE;
cell.userInteractionEnabled = cell.greyView.hidden = greyCellForEncryptedChat && greyCellForGroupChat;
cell.displayNameLabel.text = [FastAddressBook displayNameForAddress:addr];
cell.addressLabel.text = linphoneContact ? [NSString stringWithUTF8String:linphone_address_as_string(addr)] : phoneOrAddr;
cell.selectedImage.hidden = ![_contactsGroup containsObject:cell.addressLabel.text];
[cell.avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:NO withRoundedRadius:YES];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIChatCreateCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (!cell.userInteractionEnabled)
return;
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
if (!(cfg && linphone_proxy_config_get_conference_factory_uri(cfg)) || !_isGroupChat) {
LinphoneAddress *addr = linphone_address_new(cell.addressLabel.text.UTF8String);
[PhoneMainView.instance getOrCreateOneToOneChatRoom:addr waitView:_waitView isEncrypted:_isEncrypted];
if (!addr) {
LOGE(@"Chat room could not be created on server, because null address.");
[ChatConversationInfoView displayCreationError];
} else {
linphone_address_unref(addr);
}
return;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSInteger index = 0;
_searchBar.text = @"";
[self searchBar:_searchBar textDidChange:@""];
if(cell.selectedImage.hidden) {
if(![_contactsGroup containsObject:cell.addressLabel.text]) {
[_contactsGroup addObject:cell.addressLabel.text];
[_collectionView registerClass:UIChatCreateCollectionViewCell.class forCellWithReuseIdentifier:cell.addressLabel.text];
}
} else if([_contactsGroup containsObject:cell.addressLabel.text]) {
index = (NSInteger)[_contactsGroup indexOfObject:cell.addressLabel.text];
[_contactsGroup removeObject:cell.addressLabel.text];
if(index == _contactsGroup.count)
index = index-1;
}
cell.selectedImage.hidden = !cell.selectedImage.hidden;
_controllerNextButton.enabled = (_contactsGroup.count > 0) || _isForEditing;
if (_contactsGroup.count > 1 || (_contactsGroup.count == 1 && cell.selectedImage.hidden)) {
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[tableView setFrame:CGRectMake(tableView.frame.origin.x,
_collectionView.frame.origin.y + _collectionView.frame.size.height,
tableView.frame.size.width,
tableView.frame.size.height)];
}
completion:nil];
} else if (_contactsGroup.count == 1 && !cell.selectedImage.hidden) {
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[tableView setFrame:CGRectMake(tableView.frame.origin.x,
_collectionView.frame.origin.y + _collectionView.frame.size.height,
tableView.frame.size.width,
tableView.frame.size.height - _collectionView.frame.size.height)];
}
completion:nil];
} else {
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[tableView setFrame:CGRectMake(tableView.frame.origin.x,
_searchBar.frame.origin.y + _searchBar.frame.size.height,
tableView.frame.size.width,
tableView.frame.size.height + _collectionView.frame.size.height)];
}
completion:nil];
}
[_collectionView reloadData];
if (!cell.selectedImage.hidden) {
index = _contactsGroup.count - 1;
}
dispatch_async(dispatch_get_main_queue(), ^{
if(index > 0) {
NSIndexPath *path = [NSIndexPath indexPathForItem:index inSection:0];
[_collectionView scrollToItemAtIndexPath:path
atScrollPosition:(UICollectionViewScrollPositionCenteredHorizontally | UICollectionViewScrollPositionCenteredVertically)
animated:YES];
}
});
}
#pragma mark - Searchbar delegates
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
searchBar.showsCancelButton = (searchText.length > 0);
[self reloadDataWithFilter:searchText];
if ([searchText isEqualToString:@""]) {
if (_magicSearch)
linphone_magic_search_reset_search_cache(_magicSearch);
[_searchBar resignFirstResponder];
}
}
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(nonnull NSString *)text {
if (text.length < _searchBar.text.length && _magicSearch)
linphone_magic_search_reset_search_cache(_magicSearch);
return TRUE;
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
[searchBar setShowsCancelButton:FALSE animated:TRUE];
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
[searchBar setShowsCancelButton:(searchBar.text.length > 0) animated:TRUE];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
if (_magicSearch)
linphone_magic_search_reset_search_cache(_magicSearch);
[searchBar resignFirstResponder];
}
@end

View file

@ -1,54 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ChatConversationCreateView_h
#define ChatConversationCreateView_h
#import <UIKit/UIKit.h>
#import "ChatConversationCreateTableView.h"
#import "ChatConversationCreateCollectionViewController.h"
#import "UICompositeView.h"
@interface ChatConversationCreateView : UIViewController <UICompositeViewDelegate, UIGestureRecognizerDelegate, UICollectionViewDataSource>
@property(strong, nonatomic) IBOutlet ChatConversationCreateTableView *tableController;
@property(strong, nonatomic) IBOutlet ChatConversationCreateCollectionViewController *collectionController;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property (weak, nonatomic) IBOutlet UIIconButton *backButton;
@property (weak, nonatomic) IBOutlet UIIconButton *nextButton;
@property (weak, nonatomic) IBOutlet UIIconButton *allButton;
@property (weak, nonatomic) IBOutlet UIIconButton *linphoneButton;
@property (weak, nonatomic) IBOutlet UIImageView *selectedButtonImage;
@property (weak, nonatomic) IBOutlet UIView *waitView;
@property (weak, nonatomic) IBOutlet UIView *chiffreOptionView;
@property (weak, nonatomic) IBOutlet UIView *switchView;
@property (weak, nonatomic) IBOutlet UIImageView *chiffreImage;
@property (weak, nonatomic) IBOutlet UIButton *chiffreButton;
@property(nonatomic) Boolean isForEditing;
@property(nonatomic) Boolean isGroupChat;
@property(nonatomic) Boolean isEncrypted;
- (IBAction)onBackClick:(id)sender;
- (IBAction)onNextClick:(id)sender;
- (IBAction)onChiffreClick:(id)sender;
@end
#endif /* ChatConversationCreateView_h */

View file

@ -1,245 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "ChatConversationCreateView.h"
#import "PhoneMainView.h"
#import "UIChatCreateCollectionViewCell.h"
@implementation ChatConversationCreateView
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
isLeftFragment:NO
fragmentWith:ChatsListView.class];
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboards)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
layout.itemSize = CGSizeMake(100.0 , 50.0);
_collectionController.collectionView = _collectionView;
_collectionController = (ChatConversationCreateCollectionViewController *)[[UICollectionViewController alloc] initWithCollectionViewLayout:layout];
_collectionView.dataSource = self;
[_collectionView setCollectionViewLayout:layout];
_tableController.collectionView = _collectionView;
_tableController.controllerNextButton = _nextButton;
_isForEditing = FALSE;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self viewUpdateEvent:nil];
if (IPAD)
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(viewUpdateEvent:)
name:kLinphoneChatCreateViewChange
object:nil];
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
_chiffreOptionView.hidden = !(cfg && linphone_proxy_config_get_conference_factory_uri(cfg));
}
- (void)viewUpdateEvent:(NSNotification *)notif {
CGRect frame = _chiffreOptionView.frame;
if (_isGroupChat) {
_nextButton.hidden = FALSE;
_switchView.hidden = TRUE;
frame.origin.x = (self.view.frame.size.width - _chiffreOptionView.frame.size.width)/2;
} else {
_nextButton.hidden = TRUE;
_switchView.hidden = FALSE;
frame.origin.x = self.view.frame.size.width * 0.192;
}
_chiffreOptionView.frame = frame;
_isEncrypted = FALSE;
CGRect buttonFrame = _chiffreButton.frame;
_tableController.isEncrypted = _isEncrypted;
// no encrypted by default
buttonFrame.origin.x = 2;
[_chiffreImage setImage:[UIImage imageNamed:@"security_toogle_background_grey.png"]];
_chiffreButton.frame = buttonFrame;
_waitView.hidden = YES;
_backButton.hidden = IPAD;
if(_tableController.contactsGroup.count == 0) {
if (!_isForEditing)
_nextButton.enabled = FALSE;
_tableController.tableView.frame = CGRectMake(_tableController.tableView.frame.origin.x,
_tableController.searchBar.frame.origin.y + _tableController.searchBar.frame.size.height,
_tableController.tableView.frame.size.width,
_tableController.tableView.frame.size.height + _collectionView.frame.size.height);
} else {
_tableController.tableView.frame = CGRectMake(_tableController.tableView.frame.origin.x,
_collectionView.frame.origin.y + _collectionView.frame.size.height,
_tableController.tableView.frame.size.width,
_tableController.tableView.frame.size.height);
}
[_collectionView reloadData];
_tableController.isForEditing = _isForEditing;
_tableController.isGroupChat = _isGroupChat;
_tableController.isEncrypted = _isEncrypted;
[self changeView:ContactsLinphone];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (IPAD)
[NSNotificationCenter.defaultCenter removeObserver:self];
}
#pragma mark - Chat room functions
- (void)createChatRoom {
NSString *addr = _tableController.contactsGroup[0];
LinphoneAddress *remoteAddress = linphone_address_new(addr.UTF8String);
[PhoneMainView.instance getOrCreateOneToOneChatRoom:remoteAddress waitView:_waitView isEncrypted:_isEncrypted];
linphone_address_unref(remoteAddress);
}
#pragma mark - Buttons signals
- (IBAction)onBackClick:(id)sender {
[_tableController.contactsGroup removeAllObjects];
if (_tableController.isForEditing)
[PhoneMainView.instance popToView:ChatConversationInfoView.compositeViewDescription];
else
[PhoneMainView.instance popToView:ChatsListView.compositeViewDescription];
}
- (IBAction)onNextClick:(id)sender {
ChatConversationInfoView *view = VIEW(ChatConversationInfoView);
view.contacts = _tableController.contactsGroup;
view.create = !_isForEditing;
view.encrypted = _isEncrypted;
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
}
- (IBAction)onChiffreClick:(id)sender {
CGRect frame = _chiffreButton.frame;
_isEncrypted = !_isEncrypted;
_tableController.isEncrypted = _isEncrypted;
if (_isEncrypted) {
// encrypted
frame.origin.x = 20;
[_chiffreImage setImage:[UIImage imageNamed:@"security_toogle_background_green.png"]];
} else {
// no encrypted
frame.origin.x = 2;
[_chiffreImage setImage:[UIImage imageNamed:@"security_toogle_background_grey.png"]];
}
_chiffreButton.frame = frame;
[_tableController.tableView reloadData];
}
- (void)dismissKeyboards {
if ([self.tableController.searchBar isFirstResponder])
[self.tableController.searchBar resignFirstResponder];
}
#pragma mark - Contacts filter
typedef enum { ContactsAll, ContactsLinphone, ContactsMAX } ContactsCategory;
- (void)changeView:(ContactsCategory)view {
CGRect frame = _selectedButtonImage.frame;
if (_tableController.magicSearch)
linphone_magic_search_reset_search_cache(_tableController.magicSearch);
if (view == ContactsAll && !_allButton.selected) {
frame.origin.x = _allButton.frame.origin.x;
_allButton.selected = TRUE;
_linphoneButton.selected = FALSE;
_tableController.allFilter = TRUE;
[_tableController loadData];
} else if (view == ContactsLinphone && !_linphoneButton.selected) {
frame.origin.x = _linphoneButton.frame.origin.x;
_linphoneButton.selected = TRUE;
_allButton.selected = FALSE;
_tableController.allFilter = FALSE;
[_tableController loadData];
}
_selectedButtonImage.frame = frame;
}
- (IBAction)onAllClick:(id)event {
[self changeView:ContactsAll];
}
- (IBAction)onLinphoneClick:(id)event {
[self changeView:ContactsLinphone];
}
#pragma mark - GestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return NO;
}
#pragma mark - UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return _tableController.contactsGroup.count;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
- (UIChatCreateCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
NSString *uri = _tableController.contactsGroup[indexPath.item];
UIChatCreateCollectionViewCell *cell = (UIChatCreateCollectionViewCell *)[_collectionView dequeueReusableCellWithReuseIdentifier:uri forIndexPath:indexPath];
cell.controller = self;
cell.uri = uri;
LinphoneAddress *addr = NULL;
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
if (cfg && linphone_proxy_config_is_phone_number(cfg, uri.UTF8String)) {
char *phone = linphone_proxy_config_normalize_phone_number(cfg, uri.UTF8String);
addr = linphone_proxy_config_normalize_sip_uri(cfg, phone);
ms_free(phone);
} else
addr = linphone_address_new(uri.UTF8String);
cell = [cell initWithName:[FastAddressBook displayNameForAddress:addr]];
linphone_address_unref(addr);
return cell;
}
@end

View file

@ -1,53 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ChatConversationImdnView_h
#define ChatConversationImdnView_h
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
#import "UIRoundBorderedButton.h"
@interface ChatConversationImdnView : UIViewController <UICompositeViewDelegate, UITableViewDelegate, UITableViewDataSource>
{
@private
NSString *messageText;
}
@property(nonatomic) LinphoneChatMessage *msg;
@property(nonatomic) bctbx_list_t *displayedList;
@property(nonatomic) bctbx_list_t *receivedList;
@property(nonatomic) bctbx_list_t *notReceivedList;
@property(nonatomic) bctbx_list_t *errorList;
@property (weak, nonatomic) IBOutlet UIView *msgView;
@property (weak, nonatomic) IBOutlet UIImageView *msgBackgroundColorImage;
@property (weak, nonatomic) IBOutlet UIRoundedImageView *msgAvatarImage;
@property (weak, nonatomic) IBOutlet UIImageView *msgBottomBar;
@property (weak, nonatomic) IBOutlet UILabel *msgDateLabel;
@property (weak, nonatomic) IBOutlet UITextViewNoDefine *msgText;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
- (IBAction)onBackClick:(id)sender;
- (void)updateImdnList;
@end
#endif /* ChatConversationImdnView_h */

View file

@ -1,276 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Foundation/Foundation.h>
#import "ChatConversationImdnView.h"
#import "PhoneMainView.h"
#import "UIChatBubbleTextCell.h"
#import "UIChatConversationImdnTableViewCell.h"
@implementation ChatConversationImdnView
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
isLeftFragment:NO
fragmentWith:ChatsListView.class];
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
- (void)viewDidLoad {
[super viewDidLoad];
_msg = NULL;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
const LinphoneAddress *addr = linphone_chat_message_get_from_address(_msg);
BOOL outgoing = linphone_chat_message_is_outgoing(_msg);
_msgDateLabel.text = [NSString stringWithFormat:@"%@ - %@",
[LinphoneUtils timeToString:linphone_chat_message_get_time(_msg) withFormat:LinphoneDateChatBubble],
[FastAddressBook displayNameForAddress:addr]];
_msgAvatarImage.image = outgoing ? [LinphoneUtils selfAvatar] : [FastAddressBook imageForAddress:addr];
_msgText.text = messageText;
_msgBackgroundColorImage.image = _msgBottomBar.image = [UIImage imageNamed:(outgoing ? @"color_A.png" : @"color_D.png")];
_msgDateLabel.textColor = [UIColor colorWithPatternImage:_msgBackgroundColorImage.image];
_tableView.delegate = self;
_tableView.dataSource = self;
[self updateImdnList];
}
- (void)updateImdnList {
if (_msg) {
_displayedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDisplayed);
_receivedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDeliveredToUser);
_notReceivedList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateDelivered);
_errorList = linphone_chat_message_get_participants_by_imdn_state(_msg, LinphoneChatMessageStateNotDelivered);
[_tableView reloadData];
}
}
- (void)fitContent {
[self setMessageText];
BOOL outgoing = linphone_chat_message_is_outgoing(_msg);
_msgBackgroundColorImage.image = _msgBottomBar.image = [UIImage imageNamed:(outgoing ? @"color_A.png" : @"color_D.png")];
_msgDateLabel.textColor = [UIColor colorWithPatternImage:_msgBackgroundColorImage.image];
[_msgView setFrame:CGRectMake(_msgView.frame.origin.x,
_msgView.frame.origin.y,
_msgView.frame.size.width,
[UIChatBubbleTextCell ViewHeightForMessageText:_msg withWidth:self.view.frame.size.width textForImdn:messageText].height)];
[_tableView setFrame:CGRectMake(_tableView.frame.origin.x,
_msgView.frame.origin.y + _msgView.frame.size.height + 10,
_tableView.frame.size.width,
self.view.frame.size.height - (_msgView.frame.origin.y + _msgView.frame.size.height))];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self fitContent];
}
- (void)setMessageText {
const char *utf8Text= linphone_chat_message_get_text_content(_msg);
LinphoneContent *fileContent = linphone_chat_message_get_file_transfer_information(_msg);
messageText = nil;
if (utf8Text) {
messageText = [NSString stringWithUTF8String:utf8Text];
if (fileContent)
messageText = [NSString stringWithFormat:@"%@\n%@", messageText, [NSString stringWithUTF8String: linphone_content_get_name(fileContent)]];
} else {
messageText = [NSString stringWithUTF8String: linphone_content_get_name(fileContent)];
}
}
#pragma mark - TableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSInteger numberOfSection = 0;
if (_displayedList) numberOfSection++;
if (_receivedList) numberOfSection++;
if (_notReceivedList) numberOfSection++;
if (_errorList) numberOfSection++;
return numberOfSection;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 23.0;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
return 44.0;
}
- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
label.numberOfLines = 1;
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 23)];
UIImage *image = NULL;
if (section == 0) {
if (_displayedList) {
label.text = NSLocalizedString(@"Read", nil);
label.textColor = [UIColor colorWithRed:(24 / 255.0) green:(167 / 255.0) blue:(175 / 255.0) alpha:1.0];
image = [UIImage imageNamed:@"chat_read"];
} else if (_receivedList) {
label.text = NSLocalizedString(@"Delivered", nil);
label.textColor = [UIColor grayColor];
image = [UIImage imageNamed:@"chat_delivered"];
} else if (_notReceivedList) {
label.text = NSLocalizedString(@"Sent", nil);
label.textColor = [UIColor grayColor];
} else if (_errorList) {
label.text = NSLocalizedString(@"Error", nil);
label.textColor = [UIColor redColor];
image = [UIImage imageNamed:@"chat_error"];
}
} else if (section == 1) {
if (_displayedList && _receivedList) {
label.text = NSLocalizedString(@"Delivered", nil);
label.textColor = [UIColor grayColor];
image = [UIImage imageNamed:@"chat_delivered"];
} else if (_notReceivedList) {
label.text = NSLocalizedString(@"Sent", nil);
label.textColor = [UIColor grayColor];
} else if (_errorList) {
label.text = NSLocalizedString(@"Error", nil);
label.textColor = [UIColor redColor];
image = [UIImage imageNamed:@"chat_error"];
}
} else if (section == 2) {
if (_displayedList && _receivedList && _notReceivedList) {
label.text = NSLocalizedString(@"Sent", nil);
label.textColor = [UIColor grayColor];
} else if (_errorList) {
label.text = NSLocalizedString(@"Error", nil);
label.textColor = [UIColor redColor];
image = [UIImage imageNamed:@"chat_error"];
}
} else if (section == 3) {
label.text = NSLocalizedString(@"Error", nil);
label.textColor = [UIColor redColor];
image = [UIImage imageNamed:@"chat_error"];
}
[view addSubview:label];
[label sizeToFit];
[label setCenter:view.center];
if (image) {
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[view addSubview:imageView];
[imageView setFrame:CGRectMake(label.frame.origin.x + label.frame.size.width + 5, 2, 19, 19)];
}
[view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"color_G.png"]]];
return view;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
if (_displayedList)
return bctbx_list_size(_displayedList);
else if (_receivedList)
return bctbx_list_size(_receivedList);
else if (_notReceivedList)
return bctbx_list_size(_notReceivedList);
else if (_errorList)
return bctbx_list_size(_errorList);
} else if (section == 1) {
if (_displayedList &&_receivedList)
return bctbx_list_size(_receivedList);
else if (_notReceivedList)
return bctbx_list_size(_notReceivedList);
else if (_errorList)
return bctbx_list_size(_errorList);
} else if (section == 2) {
if (_displayedList && _receivedList && _notReceivedList)
return bctbx_list_size(_notReceivedList);
else if (_errorList)
return bctbx_list_size(_errorList);
} else if (section == 3)
return bctbx_list_size(_errorList);
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
bctbx_list_t *list = NULL;
if (indexPath.section == 0) {
if (_displayedList)
list = _displayedList;
else if (_receivedList)
list = _receivedList;
else if (_notReceivedList)
list = _notReceivedList;
else if (_errorList)
list = _errorList;
} else if (indexPath.section == 1) {
if (_displayedList &&_receivedList)
list = _receivedList;
else if (_notReceivedList)
list = _notReceivedList;
else if (_errorList)
list = _errorList;
} else if (indexPath.section == 2) {
if (_displayedList && _receivedList && _notReceivedList)
list = _notReceivedList;
else if (_errorList)
list = _errorList;
} else if (indexPath.section == 3)
list = _errorList;
if (!list)
return nil;
NSString *kCellId = NSStringFromClass(UIChatConversationImdnTableViewCell.class);
UIChatConversationImdnTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[UIChatConversationImdnTableViewCell alloc] initWithIdentifier:kCellId];
}
LinphoneParticipantImdnState *state = bctbx_list_nth_data(list, (int)indexPath.row);
const LinphoneParticipant *participant = linphone_participant_imdn_state_get_participant(state);
time_t time = linphone_participant_imdn_state_get_state_change_time(state);
const LinphoneAddress *addr = linphone_participant_get_address(participant);
cell.displayName.text = [FastAddressBook displayNameForAddress:addr];
cell.avatar.image = [FastAddressBook imageForAddress:addr];
cell.dateLabel.text = [LinphoneUtils timeToString:time withFormat:LinphoneDateChatBubble];
cell.userInteractionEnabled = false;
return cell;
}
- (IBAction)onBackClick:(id)sender {
[PhoneMainView.instance popCurrentView];
}
@end

View file

@ -1,52 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <UIKit/UIKit.h>
#import "UICompositeView.h"
#import "UIRoundBorderedButton.h"
@interface ChatConversationInfoView : UIViewController <UICompositeViewDelegate, UIGestureRecognizerDelegate, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource>
@property(nonatomic) BOOL create;
@property(nonatomic) BOOL imAdmin;
@property(nonatomic) BOOL encrypted;
@property(nonatomic, strong) NSMutableArray *contacts;
@property(nonatomic, strong) NSMutableArray *admins;
@property(nonatomic, strong) NSMutableArray *oldContacts;
@property(nonatomic, strong) NSMutableArray *oldAdmins;
@property(nonatomic) NSString *oldSubject;
@property(nonatomic) LinphoneChatRoom *room;
@property(nonatomic) LinphoneChatRoomCbs *chatRoomCbs;
@property (weak, nonatomic) IBOutlet UIIconButton *nextButton;
@property (weak, nonatomic) IBOutlet UIRoundBorderedButton *quitButton;
@property (weak, nonatomic) IBOutlet UIIconButton *addButton;
@property (weak, nonatomic) IBOutlet UITextField *nameLabel;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIView *waitView;
@property (weak, nonatomic) IBOutlet UIView *participantsBar;
+ (void)displayCreationError;
- (IBAction)onNextClick:(id)sender;
- (IBAction)onBackClick:(id)sender;
- (IBAction)onQuitClick:(id)sender;
@end

View file

@ -1,396 +0,0 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Foundation/Foundation.h>
#import "ChatConversationInfoView.h"
#import "PhoneMainView.h"
#import "UIChatConversationInfoTableViewCell.h"
#import "linphone/core.h"
@implementation ChatConversationInfoView
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if (compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:self.class
statusBar:StatusBarView.class
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
isLeftFragment:NO
fragmentWith:ChatsListView.class];
}
return compositeDescription;
}
- (UICompositeViewDescription *)compositeViewDescription {
return self.class.compositeViewDescription;
}
+ (void)displayCreationError {
static UIAlertController *errorView = nil;
// avoid having multiple popups
[PhoneMainView.instance dismissViewControllerAnimated:YES completion:nil];
errorView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Chat room creation error", nil)
message:NSLocalizedString(@"Chat room could not be created on server", nil)
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil)
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errorView addAction:defaultAction];
[PhoneMainView.instance presentViewController:errorView animated:YES completion:nil];
}
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissKeyboards)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
UITapGestureRecognizer *particpantsBarTap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(onAddClick:)];
particpantsBarTap.delegate = self;
[_participantsBar addGestureRecognizer:particpantsBarTap];
_nameLabel.delegate = self;
_tableView.dataSource = self;
_tableView.delegate = self;
_admins = [[NSMutableArray alloc] init];
_oldAdmins = [[NSMutableArray alloc] init];
_oldContacts = [[NSMutableArray alloc] init];
_room = NULL;
_chatRoomCbs = NULL;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_waitView.hidden = YES;
if (_create)
_room = NULL;
_nameLabel.text = _room && linphone_chat_room_get_subject(_room)
? [NSString stringWithUTF8String:linphone_chat_room_get_subject(_room)]
: @"";
_nextButton.enabled = _nameLabel.text.length > 0 && _contacts.count > 0;
LinphoneParticipant *me = _room && !linphone_chat_room_has_been_left(_room)
? linphone_chat_room_get_me(_room)
: NULL;
_imAdmin = me
? linphone_participant_is_admin(me)
: false;
_quitButton.hidden = _create || (me == NULL);
_nameLabel.enabled = _create || _imAdmin;
_addButton.hidden = !_create && !_imAdmin;
_nextButton.hidden = !_create && !_imAdmin;
CGFloat height = _quitButton.hidden
? self.view.frame.size.height - _tableView.frame.origin.y
: _quitButton.frame.origin.y - _tableView.frame.origin.y - 10;
[_tableView setFrame:CGRectMake(
_tableView.frame.origin.x,
_tableView.frame.origin.y,
_tableView.frame.size.width,
height
)];
if (_room) {
_chatRoomCbs = linphone_factory_create_chat_room_cbs(linphone_factory_get());
linphone_chat_room_cbs_set_state_changed(_chatRoomCbs, main_view_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(_chatRoomCbs, chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(_chatRoomCbs, chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(_chatRoomCbs, chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(_chatRoomCbs, chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_user_data(_chatRoomCbs, (__bridge void*)self);
linphone_chat_room_add_callbacks(_room, _chatRoomCbs);
}
[_tableView reloadData];
}
- (void)viewWillDisappear:(BOOL)animated {
if (!_room || !_chatRoomCbs)
return;
linphone_chat_room_remove_callbacks(_room, _chatRoomCbs);
_chatRoomCbs = NULL;
}
#pragma mark - next functions
- (void)onCreate {
bctbx_list_t *addresses = NULL;
for (NSString *addr in _contacts) {
LinphoneAddress *linphoneAddress = linphone_address_new(addr.UTF8String);
if (!linphoneAddress)
continue;
if (!addresses) {
addresses = bctbx_list_new((void *)linphoneAddress);
continue;
}
addresses = bctbx_list_append(addresses, (void *)linphoneAddress);
}
[PhoneMainView.instance createChatRoom:_nameLabel.text.UTF8String addresses:addresses andWaitView:_waitView isEncrypted:_encrypted isGroup:TRUE];
bctbx_list_free_with_data(addresses, (void (*)(void *))linphone_address_unref);
}
- (void)onValidate {
ChatConversationView *view = VIEW(ChatConversationView);
// Change subject if necessary
if (![_oldSubject isEqualToString:_nameLabel.text])
linphone_chat_room_set_subject(_room, _nameLabel.text.UTF8String);
// Add participants if necessary
bctbx_list_t *addedPartipants = NULL;
for (NSString *uri in _contacts) {
if ([_oldContacts containsObject:uri])
continue;
LinphoneAddress *addr = linphone_address_new(uri.UTF8String);
linphone_address_clean(addr);//keep only username@domain
if (addedPartipants)
addedPartipants = bctbx_list_append(addedPartipants, addr);
else
addedPartipants = bctbx_list_new(addr);
}
if (addedPartipants) {
linphone_chat_room_add_participants(_room, addedPartipants);
bctbx_list_free_with_data(addedPartipants, (void (*)(void *))linphone_address_unref);
}
// Remove participants if necessary
bctbx_list_t *removedPartipants = NULL;
for (NSString *uri in _oldContacts) {
if ([_contacts containsObject:uri])
continue;
LinphoneAddress *addr = linphone_address_new(uri.UTF8String);
LinphoneParticipant *participant = linphone_participant_ref(linphone_chat_room_find_participant(_room, addr));
if (!participant)
continue;
if (removedPartipants)
removedPartipants = bctbx_list_append(removedPartipants, participant);
else
removedPartipants = bctbx_list_new(participant);
linphone_address_unref(addr);
}
if (removedPartipants) {
linphone_chat_room_remove_participants(_room, removedPartipants);
bctbx_list_free_with_data(removedPartipants, (void (*)(void *))linphone_participant_unref);
}
// add admins if necessary
for (NSString *admin in _admins) {
if ([_oldAdmins containsObject:admin])
continue;
LinphoneAddress *addr = linphone_address_new(admin.UTF8String);
LinphoneParticipant *participant = linphone_chat_room_find_participant(_room, addr);
if (!participant)
continue;
linphone_chat_room_set_participant_admin_status(_room, participant, true);
linphone_address_unref(addr);
}
// remove admins if necessary
for (NSString *admin in _oldAdmins) {
if ([_admins containsObject:admin])
continue;
LinphoneAddress *addr = linphone_address_new(admin.UTF8String);
LinphoneParticipant *participant = linphone_chat_room_find_participant(_room, addr);
if (!participant)
continue;
linphone_chat_room_set_participant_admin_status(_room, participant, false);
linphone_address_unref(addr);
}
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
}
#pragma mark - Buttons responders
- (IBAction)onNextClick:(id)sender {
if(_create)
[self onCreate];
else
[self onValidate];
}
- (IBAction)onBackClick:(id)sender {
if(_create) {
ChatConversationCreateView *view = VIEW(ChatConversationCreateView);
view.tableController.contactsGroup = [_contacts mutableCopy];
view.tableController.notFirstTime = TRUE;
view.isForEditing = FALSE;
[PhoneMainView.instance popToView:view.compositeViewDescription];
} else {
ChatConversationView *view = VIEW(ChatConversationView);
[PhoneMainView.instance popToView:view.compositeViewDescription];
}
}
- (IBAction)onQuitClick:(id)sender {
NSString *msg =
[NSString stringWithFormat:NSLocalizedString(@"Do you want to leave this conversation?", nil)];
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:NSLocalizedString(@"LEAVE", nil)
onCancelClick:^() {}
onConfirmationClick:^() {
linphone_chat_room_leave(_room);
}];
}
- (IBAction)onAddClick:(id)sender {
if (_create || _imAdmin) {
ChatConversationCreateView *view = VIEW(ChatConversationCreateView);
view.tableController.notFirstTime = TRUE;
view.isForEditing = !_create;
view.isGroupChat = TRUE;
view.tableController.contactsGroup = [_contacts mutableCopy];
[PhoneMainView.instance popToView:view.compositeViewDescription];
}
}
#pragma mark - TableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _contacts.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = NSStringFromClass(UIChatConversationInfoTableViewCell.class);
UIChatConversationInfoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[UIChatConversationInfoTableViewCell alloc] initWithIdentifier:kCellId];
}
cell.uri = _contacts[indexPath.row];
LinphoneAddress *addr = linphone_address_new(cell.uri.UTF8String);
cell.nameLabel.text = [FastAddressBook displayNameForAddress:addr];
[cell.avatarImage setImage:[FastAddressBook imageForAddress:addr] bordered:YES withRoundedRadius:YES];
cell.controllerView = self;
if(![_admins containsObject:cell.uri]) {
cell.adminLabel.enabled = FALSE;
cell.adminImage.image = [UIImage imageNamed:@"check_unselected.png"];
}
cell.adminButton.hidden = _create || (!_imAdmin && !cell.adminLabel.enabled) || ![_oldContacts containsObject:cell.uri];
cell.adminButton.userInteractionEnabled = _imAdmin;
cell.removeButton.hidden = !_create && !_imAdmin;
linphone_address_unref(addr);
return cell;
}
#pragma mark - searchBar delegate
- (void)dismissKeyboards {
if ([_nameLabel isFirstResponder]) {
[_nameLabel resignFirstResponder];
}
}
#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
_nextButton.enabled = (!((string.length == 0 || string == nil || [string isEqual:@""]) && (textField.text.length == 1))
&& _contacts.count > 0);
return TRUE;
}
#pragma mark - chat room callbacks
- (void)myAdminStatusChanged:(BOOL)admin {
NSString *message = admin
? NSLocalizedString(@"You are now an admin of the chat room", nil)
: NSLocalizedString(@"You are no longer an admin of the chat room", nil);
static UIAlertController *alertView = nil;
// avoid having multiple popups
[PhoneMainView.instance dismissViewControllerAnimated:YES completion:nil];
alertView = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"%@", message]
message:nil
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil)
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[alertView addAction:defaultAction];
[PhoneMainView.instance presentViewController:alertView animated:YES completion:nil];
}
void chat_room_subject_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
view.nameLabel.text = [NSString stringWithUTF8String:linphone_event_log_get_subject(event_log)];
}
void chat_room_participant_added(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
[view.oldContacts addObject:participantAddress];
[view.contacts addObject:participantAddress];
[view.tableView reloadData];
}
void chat_room_participant_removed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
[view.oldContacts removeObject:participantAddress];
[view.contacts removeObject:participantAddress];
[view.tableView reloadData];
}
void chat_room_participant_admin_status_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationInfoView *view = (__bridge ChatConversationInfoView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr));
NSString *participantAddress = [NSString stringWithUTF8String:linphone_address_as_string(linphone_event_log_get_participant_address(event_log))];
LinphoneParticipant *me = linphone_chat_room_get_me(cr);
if (me && linphone_address_equal(linphone_participant_get_address(me), linphone_event_log_get_participant_address(event_log))) {
[view myAdminStatusChanged:(linphone_event_log_get_type(event_log) == LinphoneEventLogTypeConferenceParticipantSetAdmin)];
[view viewWillAppear:TRUE];
return;
}
if (linphone_event_log_get_type(event_log) == LinphoneEventLogTypeConferenceParticipantSetAdmin) {
[view.admins addObject:participantAddress];
[view.oldAdmins addObject:participantAddress];
} else { // linphone_event_log_get_type(event_log) == LinphoneEventLogTypeConferenceParticipantUnsetAdmin
[view.admins removeObject:participantAddress];
[view.oldAdmins removeObject:participantAddress];
}
[view.tableView reloadData];
}
@end

Some files were not shown because too many files have changed in this diff Show more