From 4216ecdc1397e7d1f818507ccdb8ef45c18dfb05 Mon Sep 17 00:00:00 2001 From: Danmei Chen Date: Thu, 1 Jul 2021 17:40:42 +0200 Subject: [PATCH] fix devices list can not do call --- Classes/DevicesListView.h | 11 +- Classes/DevicesListView.m | 133 +++++++++++++++--------- Classes/EphemeralSettingsView.m | 1 - Classes/LinphoneUI/UIDeviceCell.h | 14 ++- Classes/LinphoneUI/UIDeviceCell.m | 44 ++++---- Classes/LinphoneUI/UIDeviceCell.xib | 46 +++++--- Classes/LinphoneUI/UIDevicesDetails.h | 35 ------- Classes/LinphoneUI/UIDevicesDetails.m | 104 ------------------ Classes/LinphoneUI/UIDevicesDetails.xib | 77 -------------- linphone.xcodeproj/project.pbxproj | 10 -- 10 files changed, 152 insertions(+), 323 deletions(-) delete mode 100644 Classes/LinphoneUI/UIDevicesDetails.h delete mode 100644 Classes/LinphoneUI/UIDevicesDetails.m delete mode 100644 Classes/LinphoneUI/UIDevicesDetails.xib diff --git a/Classes/DevicesListView.h b/Classes/DevicesListView.h index ebfb823d4..f399f59f8 100644 --- a/Classes/DevicesListView.h +++ b/Classes/DevicesListView.h @@ -23,9 +23,15 @@ @interface DevicesMenuEntry : NSObject { @public LinphoneParticipant *participant; - NSInteger numberOfDevices; - BOOL myself; + LinphoneParticipantDevice *device; + BOOL isFirst; + BOOL isUnique; + BOOL isMyself; + NSInteger index; + BOOL isListOpen; + NSString *displayName; }; + @end @interface DevicesListView : UIViewController @@ -34,7 +40,6 @@ @property (weak, nonatomic) IBOutlet UITableView *tableView; @property(nonatomic) LinphoneChatRoom *room; -@property bctbx_list_t *devices; @property NSMutableArray *devicesMenuEntries; - (IBAction)onBackClick:(id)sender; diff --git a/Classes/DevicesListView.m b/Classes/DevicesListView.m index 4a957c559..4913b6173 100644 --- a/Classes/DevicesListView.m +++ b/Classes/DevicesListView.m @@ -19,18 +19,19 @@ #import "DevicesListView.h" #import "PhoneMainView.h" -#import "UIDevicesDetails.h" #import "UIDeviceCell.h" @implementation DevicesMenuEntry - -- (id)initWithTitle:(LinphoneParticipant *)par number:(NSInteger)num isMe:(BOOL)isMe{ - if ((self = [super init])) { - participant = par; - numberOfDevices = num; - myself = isMe; - } - return self; +- (id)init:(LinphoneParticipantDevice *)dev isMe:(BOOL)isMe isFirst:(BOOL)first isUnique:(BOOL)unique index:(NSInteger)idx{ + if ((self = [super init])) { + device = dev; + isMyself = isMe; + isFirst = first; + isUnique = unique; + index = idx; + isListOpen = FALSE; + } + return self; } @end @@ -64,29 +65,36 @@ static UICompositeViewDescription *compositeDescription = nil; _tableView.delegate = self; bctbx_list_t *participants = linphone_chat_room_get_participants(_room); _devicesMenuEntries = [NSMutableArray array]; - - if (linphone_chat_room_get_capabilities(_room) & LinphoneChatRoomCapabilitiesOneToOne) { - LinphoneParticipant *firstParticipant = participants ? (LinphoneParticipant *)participants->data : NULL; - const LinphoneAddress *addr = firstParticipant ? linphone_participant_get_address(firstParticipant) : linphone_chat_room_get_peer_address(_room); - [ContactDisplay setDisplayNameLabel:_addressLabel forAddress:addr]; - _devices = linphone_participant_get_devices(firstParticipant); - _addressLabel.text = [NSString stringWithFormat:NSLocalizedString(@"devices", nil)]; - [_devicesMenuEntries - addObject:[[DevicesMenuEntry alloc] initWithTitle:firstParticipant number:0 isMe:FALSE]]; - } else { - LinphoneParticipant *participant; - for (int i=0; idata : NULL; + const LinphoneAddress *addr = firstParticipant ? linphone_participant_get_address(firstParticipant) : linphone_chat_room_get_peer_address(_room); + [ContactDisplay setDisplayNameLabel:_addressLabel forAddress:addr]; + } else { + _addressLabel.text = [NSString stringWithUTF8String:linphone_chat_room_get_subject(_room) ?: LINPHONE_DUMMY_SUBJECT]; _addressLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%@'s devices", nil), _addressLabel.text]; - } - + } + + LinphoneParticipant *participant; + for (int i=0; idisplayName = lab.text; + entry->participant = participant; + [_devicesMenuEntries addObject:entry]; + bctbx_list_free(devices); + } + LinphoneParticipant *me = linphone_chat_room_get_me(_room); - [_devicesMenuEntries addObject:[[DevicesMenuEntry alloc] initWithTitle:me number:0 isMe:TRUE]]; + bctbx_list_t *devices = linphone_participant_get_devices(me); + DevicesMenuEntry *entry = [[DevicesMenuEntry alloc] init:(LinphoneParticipantDevice *)bctbx_list_nth_data(devices, 0) isMe:TRUE isFirst:TRUE isUnique:(bctbx_list_size(devices)<2) index:bctbx_list_size(participants)]; + entry->participant = me; + [_devicesMenuEntries addObject:entry]; + bctbx_list_free(devices); + + bctbx_list_free(participants); _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; [_tableView reloadData]; @@ -105,42 +113,65 @@ static UICompositeViewDescription *compositeDescription = nil; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - - return [_devicesMenuEntries count]; + return [_devicesMenuEntries count]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { - DevicesMenuEntry *entry = [_devicesMenuEntries objectAtIndex:indexPath.row]; - return entry->numberOfDevices > 1 ? (entry->numberOfDevices + 1) * 56.0 : 56.0; + return 56.0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSString *kCellId = NSStringFromClass(UIDevicesDetails.class); - UIDevicesDetails *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; - - if (cell == nil) { - cell = [[UIDevicesDetails alloc] initWithIdentifier:kCellId]; - } - - DevicesMenuEntry *entry = [_devicesMenuEntries objectAtIndex:indexPath.row]; - - entry->myself ? cell.addressLabel.text = NSLocalizedString(@"Me", nil) : [ContactDisplay setDisplayNameLabel:cell.addressLabel forAddress:linphone_participant_get_address(entry->participant)]; - cell.participant = entry->participant; - [cell update:(entry->numberOfDevices != 0)]; + NSString *kCellId = NSStringFromClass(UIDeviceCell.class); + UIDeviceCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; + if (cell == nil) { + cell = [[UIDeviceCell alloc] initWithIdentifier:kCellId]; + } + DevicesMenuEntry *entry = [_devicesMenuEntries objectAtIndex:indexPath.row]; + if (entry->isFirst) { + entry->isMyself ? cell.deviceLabel.text = NSLocalizedString(@"Me", nil) : [ContactDisplay setDisplayNameLabel:cell.deviceLabel forAddress:linphone_participant_get_address(entry->participant)]; + } + cell.device = entry->device; + cell.isFirst = entry->isFirst; + cell.isUnique = entry->isUnique; + cell.isListOpen = entry->isListOpen; + [cell update]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { DevicesMenuEntry *entry = [_devicesMenuEntries objectAtIndex:indexPath.row]; - NSInteger num = 0; - if (entry->numberOfDevices == 0) { - num = bctbx_list_size(linphone_participant_get_devices(entry->participant)); + if (entry->isUnique || !entry->isFirst) { + if (!entry->device) { + LOGE(@"Can not call, because the device is null."); + [_tableView reloadData]; + } else { + const LinphoneAddress *addr = linphone_participant_device_get_address(entry->device); + [CallManager.instance startCallWithAddr:(LinphoneAddress *)addr isSas:TRUE]; + } + } else { + bctbx_list_t *devices = linphone_participant_get_devices(entry->participant); + if (entry->isListOpen) { + entry->isListOpen = FALSE; + [_devicesMenuEntries replaceObjectAtIndex:indexPath.row withObject:entry]; + for (int i=0; i< bctbx_list_size(devices); i++) { + [_devicesMenuEntries removeObjectAtIndex:indexPath.row+1]; + } + } else { + entry->isListOpen = TRUE; + [_devicesMenuEntries replaceObjectAtIndex:indexPath.row withObject:entry]; + LinphoneParticipantDevice *device; + for (int i=0; iisMyself isFirst:FALSE isUnique:FALSE index:entry->index]; + [_devicesMenuEntries insertObject:tempEntry atIndex:indexPath.row+i+1]; + } + } + bctbx_list_free(devices); + [_tableView reloadData]; } - [_devicesMenuEntries replaceObjectAtIndex:indexPath.row withObject:[[DevicesMenuEntry alloc] initWithTitle:entry->participant number:num isMe:entry->myself]]; - [_tableView reloadData]; } @end diff --git a/Classes/EphemeralSettingsView.m b/Classes/EphemeralSettingsView.m index ab34989a4..7f9e78f6f 100644 --- a/Classes/EphemeralSettingsView.m +++ b/Classes/EphemeralSettingsView.m @@ -19,7 +19,6 @@ #import "EphemeralSettingsView.h" #import "PhoneMainView.h" -#import "UIDevicesDetails.h" #import "UIDeviceCell.h" diff --git a/Classes/LinphoneUI/UIDeviceCell.h b/Classes/LinphoneUI/UIDeviceCell.h index 6a7d8a6a4..518f5ea75 100644 --- a/Classes/LinphoneUI/UIDeviceCell.h +++ b/Classes/LinphoneUI/UIDeviceCell.h @@ -19,14 +19,20 @@ #import -@interface UIDeviceCell : UITableViewCell +@interface UIDeviceCell : UITableViewCell +@property (weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; +@property (weak, nonatomic) IBOutlet UIImageView *securityImage; @property (weak, nonatomic) IBOutlet UILabel *deviceLabel; @property (weak, nonatomic) IBOutlet UIButton *securityButton; -@property LinphoneParticipantDevice *device; -@property BOOL isOneToOne; +@property (weak, nonatomic) IBOutlet UIButton *dropMenuButton; + +@property LinphoneParticipantDevice *device; +@property BOOL isFirst; +@property BOOL isUnique; +@property BOOL isListOpen; + -- (IBAction)onSecurityCallClick:(id)sender; - (id)initWithIdentifier:(NSString *)identifier; - (void)update; @end diff --git a/Classes/LinphoneUI/UIDeviceCell.m b/Classes/LinphoneUI/UIDeviceCell.m index 1639cd530..dc02eff79 100644 --- a/Classes/LinphoneUI/UIDeviceCell.m +++ b/Classes/LinphoneUI/UIDeviceCell.m @@ -38,30 +38,30 @@ - (void)update { if (!_device) { LOGE(@"Can not update, because the device is null."); + _securityButton.hidden = FALSE; + _dropMenuButton.hidden = TRUE; return; } - [_securityButton setImage:[FastAddressBook imageForSecurityLevel:linphone_participant_device_get_security_level(_device)] forState:UIControlStateNormal]; - - char *uri = linphone_address_as_string_uri_only(linphone_participant_device_get_address(_device)); - _deviceLabel.text = [NSString stringWithUTF8String:linphone_participant_device_get_name(_device) ? : - uri]; - ms_free(uri); - if (_isOneToOne) { - CGRect frame =_deviceLabel.frame; - frame.origin.x = 30; - _deviceLabel.frame = frame; - } - - self.selectionStyle =UITableViewCellSelectionStyleNone; - UITapGestureRecognizer *particpantsBarTap = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(onSecurityCallClick:)]; - particpantsBarTap.delegate = self; - [self addGestureRecognizer:particpantsBarTap]; -} - -- (IBAction)onSecurityCallClick:(id)sender { - const LinphoneAddress *addr = linphone_participant_device_get_address(_device); - [CallManager.instance startCallWithAddr:(LinphoneAddress *)addr isSas:TRUE]; + + if (_isFirst) { + _securityImage.hidden = _avatarImage.hidden = FALSE; + } else { + _securityImage.hidden = _avatarImage.hidden = TRUE; + char *uri = linphone_address_as_string_uri_only(linphone_participant_device_get_address(_device)); + _deviceLabel.text = [NSString stringWithUTF8String:linphone_participant_device_get_name(_device) ? : + uri]; + ms_free(uri); + } + if (_isUnique || !_isFirst) { + [_securityButton setImage:[FastAddressBook imageForSecurityLevel:linphone_participant_device_get_security_level(_device)] forState:UIControlStateNormal]; + _securityButton.hidden = FALSE; + _dropMenuButton.hidden = TRUE; + } else { + UIImage *image = _isListOpen ? [UIImage imageNamed:@"chevron_list_open"] : [UIImage imageNamed:@"chevron_list_close"]; + [_dropMenuButton setImage:image forState:UIControlStateNormal]; + _securityButton.hidden = TRUE; + _dropMenuButton.hidden = FALSE; + } } @end diff --git a/Classes/LinphoneUI/UIDeviceCell.xib b/Classes/LinphoneUI/UIDeviceCell.xib index 4406d2c32..29a6c6eb4 100644 --- a/Classes/LinphoneUI/UIDeviceCell.xib +++ b/Classes/LinphoneUI/UIDeviceCell.xib @@ -1,52 +1,66 @@ - + - + - - + + + + + - - + + - + - - + - - + + + diff --git a/Classes/LinphoneUI/UIDevicesDetails.h b/Classes/LinphoneUI/UIDevicesDetails.h deleted file mode 100644 index 906bad9c8..000000000 --- a/Classes/LinphoneUI/UIDevicesDetails.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2010-2020 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 . - */ -#import - -@interface UIDevicesDetails : UITableViewCell - -@property (weak, nonatomic) IBOutlet UIButton *dropMenuButton; -@property (weak, nonatomic) IBOutlet UILabel *addressLabel; -@property (weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage; -@property (weak, nonatomic) IBOutlet UIImageView *securityImage; -@property (weak, nonatomic) IBOutlet UIButton *securityButton; -@property (weak, nonatomic) IBOutlet UITableView *devicesTable; -@property bctbx_list_t *devices; -@property LinphoneParticipant *participant; - -- (IBAction)onSecurityCallClick:(id)sender; -- (id)initWithIdentifier:(NSString *)identifier; -- (void)update:(BOOL)listOpen; -@end diff --git a/Classes/LinphoneUI/UIDevicesDetails.m b/Classes/LinphoneUI/UIDevicesDetails.m deleted file mode 100644 index bb47c8a5c..000000000 --- a/Classes/LinphoneUI/UIDevicesDetails.m +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2010-2020 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 . - */ - -#import "UIDevicesDetails.h" -#import "UIDeviceCell.h" - -@implementation UIDevicesDetails -#pragma mark - Lifecycle Functions -- (id)initWithIdentifier:(NSString *)identifier { - if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]) != nil) { - NSArray *arrayOfViews = - [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; - - // resize cell to match .nib size. It is needed when resized the cell to - // correctly adapt its height too - UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]); - [self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)]; - [self addSubview:sub]; - _devicesTable.dataSource = self; - _devicesTable.delegate = self; - } - return self; -} - -- (void)update:(BOOL)listOpen { - _devices = linphone_participant_get_devices(_participant); - - UIImage *image = [FastAddressBook imageForSecurityLevel:linphone_participant_get_security_level(_participant)]; - if (bctbx_list_size(_devices) == 1) { - [_securityButton setImage:image forState:UIControlStateNormal]; - _securityButton.hidden = FALSE; - _dropMenuButton.hidden = TRUE; - UITapGestureRecognizer *particpantsBarTap = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(onSecurityCallClick:)]; - particpantsBarTap.delegate = self; - [self addGestureRecognizer:particpantsBarTap]; - } else { - UIImage *image = listOpen ? [UIImage imageNamed:@"chevron_list_open"] : [UIImage imageNamed:@"chevron_list_close"]; - [_dropMenuButton setImage:image forState:UIControlStateNormal]; - } - [_securityImage setImage:image]; -} - -- (IBAction)onSecurityCallClick:(id)sender { - LinphoneParticipantDevice *device = (LinphoneParticipantDevice *)bctbx_list_nth_data(_devices, 0); - const LinphoneAddress *addr = linphone_participant_device_get_address(device); - [CallManager.instance startCallWithAddr:(LinphoneAddress *)addr isSas:TRUE]; -} - -#pragma mark - TableView - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return bctbx_list_size(_devices); -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { - return 56.0; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - - NSString *kCellId = NSStringFromClass(UIDeviceCell.class); - UIDeviceCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; - - if (cell == nil) { - cell = [[UIDeviceCell alloc] initWithIdentifier:kCellId]; - } - LinphoneParticipantDevice *device = (LinphoneParticipantDevice *)bctbx_list_nth_data(_devices, (int)[indexPath row]); - cell.device = device; - cell.isOneToOne = FALSE; - [cell update]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath - -{ - cell.backgroundColor = [UIColor colorWithRed:(245 / 255.0) green:(245 / 255.0) blue:(245 / 255.0) alpha:1.0]; - -} - -@end diff --git a/Classes/LinphoneUI/UIDevicesDetails.xib b/Classes/LinphoneUI/UIDevicesDetails.xib deleted file mode 100644 index 56bbbb860..000000000 --- a/Classes/LinphoneUI/UIDevicesDetails.xib +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 0a53db91c..9d049a72a 100644 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -112,8 +112,6 @@ 61AEBEA321906AFC00F35E7F /* (null) in Frameworks */ = {isa = PBXBuildFile; }; 61AEBEBD2191990A00F35E7F /* DevicesListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 61AEBEBC2191990A00F35E7F /* DevicesListView.m */; }; 61AEBEBF2191991F00F35E7F /* DevicesListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEBE2191991F00F35E7F /* DevicesListView.xib */; }; - 61AEBEC22191D7C800F35E7F /* UIDevicesDetails.m in Sources */ = {isa = PBXBuildFile; fileRef = 61AEBEC12191D7C800F35E7F /* UIDevicesDetails.m */; }; - 61AEBEC42191D7D900F35E7F /* UIDevicesDetails.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEC32191D7D900F35E7F /* UIDevicesDetails.xib */; }; 61AEBEC62191E47500F35E7F /* chevron_list_close.png in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEC52191E47500F35E7F /* chevron_list_close.png */; }; 61AEBEC82191E48400F35E7F /* chevron_list_close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEC72191E48400F35E7F /* chevron_list_close@2x.png */; }; 61AEBECA2191E49300F35E7F /* chevron_list_open.png in Resources */ = {isa = PBXBuildFile; fileRef = 61AEBEC92191E49200F35E7F /* chevron_list_open.png */; }; @@ -1027,9 +1025,6 @@ 61AEBEB5219198EF00F35E7F /* DevicesListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DevicesListView.h; sourceTree = ""; }; 61AEBEBC2191990A00F35E7F /* DevicesListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DevicesListView.m; sourceTree = ""; }; 61AEBEBE2191991F00F35E7F /* DevicesListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DevicesListView.xib; sourceTree = ""; }; - 61AEBEC02191D7B400F35E7F /* UIDevicesDetails.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDevicesDetails.h; sourceTree = ""; }; - 61AEBEC12191D7C800F35E7F /* UIDevicesDetails.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIDevicesDetails.m; sourceTree = ""; }; - 61AEBEC32191D7D900F35E7F /* UIDevicesDetails.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UIDevicesDetails.xib; sourceTree = ""; }; 61AEBEC52191E47500F35E7F /* chevron_list_close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chevron_list_close.png; sourceTree = ""; }; 61AEBEC72191E48400F35E7F /* chevron_list_close@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chevron_list_close@2x.png"; sourceTree = ""; }; 61AEBEC92191E49200F35E7F /* chevron_list_open.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chevron_list_open.png; sourceTree = ""; }; @@ -2239,9 +2234,6 @@ 61CCC3D721933B380060EDEA /* UIDeviceCell.h */, 61CCC3DE21933B580060EDEA /* UIDeviceCell.m */, 61CCC3E021933B660060EDEA /* UIDeviceCell.xib */, - 61AEBEC02191D7B400F35E7F /* UIDevicesDetails.h */, - 61AEBEC12191D7C800F35E7F /* UIDevicesDetails.m */, - 61AEBEC32191D7D900F35E7F /* UIDevicesDetails.xib */, 2214EB8712F84EBB002A5394 /* UIHangUpButton.h */, 2214EB8812F84EBB002A5394 /* UIHangUpButton.m */, D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */, @@ -3683,7 +3675,6 @@ 63E27A521C50EDB000D332AE /* hold.mkv in Resources */, 633FEEDC1D3CD55A0014B822 /* numpad_8_default@2x.png in Resources */, 633FEDAE1D3CD5590014B822 /* call_add_default.png in Resources */, - 61AEBEC42191D7D900F35E7F /* UIDevicesDetails.xib in Resources */, 633FEE1D1D3CD5590014B822 /* chat_start_body_default~ipad@2x.png in Resources */, 633FEEEB1D3CD55A0014B822 /* numpad_hash_default.png in Resources */, 633FEF221D3CD55A0014B822 /* route_bluetooth_default.png in Resources */, @@ -4281,7 +4272,6 @@ D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */, D350F20E15A43BB100149E54 /* AssistantView.m in Sources */, D3F795D615A582810077328B /* ChatConversationView.m in Sources */, - 61AEBEC22191D7C800F35E7F /* UIDevicesDetails.m in Sources */, D32B6E2915A5BC440033019F /* ChatConversationTableView.m in Sources */, D3A8BB7015A6C7D500F96BE5 /* UIChatBubbleTextCell.m in Sources */, 63D11C531C3D501200E8FCEE /* Log.m in Sources */,