send first messages in a group chat room

This commit is contained in:
Benjamin Reis 2017-10-31 10:57:58 +01:00
parent 7024dd3a5a
commit 5188189383
9 changed files with 241 additions and 72 deletions

View file

@ -21,6 +21,7 @@
#import "ChatConversationTableView.h"
#import "UIChatBubbleTextCell.h"
#import "UIChatBubblePhotoCell.h"
#import "UIChatNotifiedEventCell.h"
#import "PhoneMainView.h"
@implementation ChatConversationTableView
@ -165,25 +166,35 @@
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = nil;
LinphoneChatMessage *chat = bctbx_list_nth_data(messageList, (int)[indexPath row]);
if (linphone_chat_message_get_file_transfer_information(chat) ||
linphone_chat_message_get_external_body_url(chat)) {
kCellId = NSStringFromClass(UIChatBubblePhotoCell.class);
} else {
kCellId = NSStringFromClass(UIChatBubbleTextCell.class);
}
UIChatBubbleTextCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[NSClassFromString(kCellId) alloc] initWithIdentifier:kCellId];
}
[cell setChatMessage:chat];
if (chat) {
[cell update];
}
[cell setChatRoomDelegate:_chatRoomDelegate];
[super accessoryForCell:cell atPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
//LinphoneEventLog *event = bctbx_list_nth_data(messageList, (int)[indexPath row]);
//if (linphone_event_log_get_type(event) == LinphoneEventLogTypeConferenceChatMessage) {
LinphoneChatMessage *chat = bctbx_list_nth_data(messageList, (int)[indexPath row]); //linphone_event_log_get_chat_message(event);
if (linphone_chat_message_get_file_transfer_information(chat) ||
linphone_chat_message_get_external_body_url(chat)) {
kCellId = NSStringFromClass(UIChatBubblePhotoCell.class);
} else {
kCellId = NSStringFromClass(UIChatBubbleTextCell.class);
}
UIChatBubbleTextCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[NSClassFromString(kCellId) alloc] initWithIdentifier:kCellId];
}
[cell setChatMessage:chat];
if (chat) {
[cell update];
}
[cell setChatRoomDelegate:_chatRoomDelegate];
[super accessoryForCell:cell atPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
/*} else {
kCellId = NSStringFromClass(UIChatNotifiedEventCell.class);
UIChatNotifiedEventCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
[cell setEvent:event];
[super accessoryForCell:cell atPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}*/
}
#pragma mark - UITableViewDelegate Functions

View file

@ -117,6 +117,14 @@ static UICompositeViewDescription *compositeDescription = nil;
name:kLinphoneCallUpdate
object:nil];
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_chatRoom);
linphone_chat_room_cbs_set_state_changed(cbs, on_chat_room_state_changed);
linphone_chat_room_cbs_set_subject_changed(cbs, on_chat_room_subject_changed);
linphone_chat_room_cbs_set_participant_added(cbs, on_chat_room_participant_added);
linphone_chat_room_cbs_set_participant_removed(cbs, on_chat_room_participant_removed);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, on_chat_room_participant_admin_status_changed);
linphone_chat_room_cbs_set_user_data(cbs, (__bridge void*)self);
[self updateSuperposedButtons];
if (_tableController.isEditing) {
@ -132,28 +140,20 @@ static UICompositeViewDescription *compositeDescription = nil;
if (linphone_chat_room_get_subject(_chatRoom))
_addressLabel.text = [NSString stringWithUTF8String:linphone_chat_room_get_subject(_chatRoom)];
if (!linphone_chat_room_can_handle_participants(_chatRoom)) {
_particpantsLabel.hidden = TRUE;
} else {
_particpantsLabel.hidden = FALSE;
bctbx_list_t *participants = linphone_chat_room_get_participants(_chatRoom);
_particpantsLabel.text = @"";
while (participants) {
LinphoneParticipant *participant = (LinphoneParticipant *)participants->data;
if (![_particpantsLabel.text isEqualToString:@""])
_particpantsLabel.text = [_particpantsLabel.text stringByAppendingString:@", "];
_particpantsLabel.text = [_particpantsLabel.text stringByAppendingString:[NSString stringWithUTF8String:linphone_address_get_display_name(linphone_participant_get_address(participant))
? linphone_address_get_display_name(linphone_participant_get_address(participant))
: linphone_address_get_username(linphone_participant_get_address(participant))]];
participants = participants->next;
}
}
[self updateParticipantLabel];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
LinphoneChatRoomCbs *cbs = linphone_chat_room_get_callbacks(_chatRoom);
linphone_chat_room_cbs_set_state_changed(cbs, NULL);
linphone_chat_room_cbs_set_subject_changed(cbs, NULL);
linphone_chat_room_cbs_set_participant_added(cbs, NULL);
linphone_chat_room_cbs_set_participant_removed(cbs, NULL);
linphone_chat_room_cbs_set_participant_admin_status_changed(cbs, NULL);
linphone_chat_room_cbs_set_user_data(cbs, NULL);
[_messageField resignFirstResponder];
[self setComposingVisible:FALSE withDelay:0]; // will hide the "user is composing.." message
@ -360,7 +360,27 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)updateSuperposedButtons {
[_backToCallButton update];
_infoButton.hidden = !linphone_chat_room_can_handle_participants(_chatRoom) || !_backToCallButton.hidden;
_callButton.hidden = !_backToCallButton.hidden && !_infoButton.hidden;
_callButton.hidden = !_backToCallButton.hidden || !_infoButton.hidden;
}
- (void)updateParticipantLabel {
if (!linphone_chat_room_can_handle_participants(_chatRoom)) {
_particpantsLabel.hidden = TRUE;
} else {
_particpantsLabel.hidden = FALSE;
bctbx_list_t *participants = linphone_chat_room_get_participants(_chatRoom);
_particpantsLabel.text = @"";
while (participants) {
LinphoneParticipant *participant = (LinphoneParticipant *)participants->data;
if (![_particpantsLabel.text isEqualToString:@""])
_particpantsLabel.text = [_particpantsLabel.text stringByAppendingString:@", "];
_particpantsLabel.text = [_particpantsLabel.text stringByAppendingString:[NSString stringWithUTF8String:linphone_address_get_display_name(linphone_participant_get_address(participant))
? linphone_address_get_display_name(linphone_participant_get_address(participant))
: linphone_address_get_username(linphone_participant_get_address(participant))]];
participants = participants->next;
}
}
}
#pragma mark - Event Functions
@ -704,4 +724,31 @@ static UICompositeViewDescription *compositeDescription = nil;
}];
}
#pragma mark - chat room callbacks
void on_chat_room_state_changed(LinphoneChatRoom *cr, LinphoneChatRoomState newState) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
if (view) {};
}
void on_chat_room_subject_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
view.addressLabel.text = [NSString stringWithUTF8String:linphone_chat_room_get_subject(cr)];
}
void on_chat_room_participant_added(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
[view updateParticipantLabel];
}
void on_chat_room_participant_removed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
[view updateParticipantLabel];
}
void on_chat_room_participant_admin_status_changed(LinphoneChatRoom *cr, const LinphoneEventLog *event_log) {
ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_callbacks(cr));
if (view) {};
}
@end

View file

@ -17,8 +17,6 @@
<outlet property="bottomBarColor" destination="mlr-pl-B6T" id="4Lk-Vn-E8h"/>
<outlet property="bubbleView" destination="ucH-2r-rar" id="XWU-yi-1z8"/>
<outlet property="contactDateLabel" destination="GRe-ur-aSb" id="DQA-v4-IjX"/>
<outlet property="eventContactDateLabel" destination="LEt-tj-YCt" id="EwK-F4-O5f"/>
<outlet property="eventView" destination="4Hz-lQ-xx1" id="abe-u8-FDQ"/>
<outlet property="imdmIcon" destination="WlS-fU-Aut" id="bYC-jb-Amo"/>
<outlet property="imdmLabel" destination="yKD-pC-Nhu" id="ge9-Yl-qsr"/>
<outlet property="messageText" destination="CYa-If-oB4" id="7xm-UF-1qB"/>
@ -34,37 +32,15 @@
</connections>
</tapGestureRecognizer>
<view contentMode="scaleToFill" misplaced="YES" id="ucH-2r-rar">
<rect key="frame" x="0.0" y="0.0" width="334" height="110"/>
<rect key="frame" x="0.0" y="0.0" width="334" height="74"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" id="4Hz-lQ-xx1" userLabel="eventView">
<rect key="frame" x="0.0" y="0.0" width="334" height="43"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" misplaced="YES" text="11:35 John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="LEt-tj-YCt" userLabel="eventContactDateLabel">
<rect key="frame" x="112" y="18" width="110" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" image="color_E.png" id="wbB-p7-QMP" userLabel="RightBar">
<rect key="frame" x="230" y="24" width="104" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" image="color_E.png" id="PjI-cq-XPw" userLabel="LeftBar">
<rect key="frame" x="0.0" y="24" width="104" height="1"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
</subviews>
</view>
<view clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" id="vdk-RV-QRU" userLabel="innerView">
<rect key="frame" x="6" y="44" width="322" height="57"/>
<rect key="frame" x="6" y="9" width="322" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.20000000000000001" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_A.png" id="ZIO-Cb-28G" userLabel="backgroundColorImage">
<rect key="frame" x="0.0" y="0.0" width="322" height="57"/>
<rect key="frame" x="0.0" y="0.0" width="322" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="avatar.png" id="P1c-sD-eOv" userLabel="avatarImage" customClass="UIRoundedImageView">
@ -93,11 +69,11 @@
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_A.png" id="mlr-pl-B6T" userLabel="bottomBarColor">
<rect key="frame" x="0.0" y="56" width="322" height="1"/>
<rect key="frame" x="0.0" y="55" width="322" height="1"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
</imageView>
<textView clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" editable="NO" text="Lore ipsum..." id="CYa-If-oB4" userLabel="messageText" customClass="UITextViewNoDefine">
<rect key="frame" x="50" y="15" width="279" height="50"/>
<rect key="frame" x="50" y="15" width="279" 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"/>
@ -109,14 +85,14 @@
<accessibility key="accessibilityConfiguration" label="Delivery failed"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Read" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yKD-pC-Nhu" userLabel="imdmLabel">
<rect key="frame" x="238" y="40" width="64" height="20"/>
<rect key="frame" x="238" y="39" width="64" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="11"/>
<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="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" image="chat_read.png" id="WlS-fU-Aut" userLabel="imdmIcon">
<rect key="frame" x="306" y="42" width="13" height="13"/>
<rect key="frame" x="306" y="41" width="13" height="13"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<accessibility key="accessibilityConfiguration" label="Delivery failed"/>
</imageView>
@ -129,7 +105,7 @@
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="16" y="92"/>
<point key="canvasLocation" x="16" y="110"/>
</view>
</objects>
<resources>
@ -138,6 +114,5 @@
<image name="chat_read.png" width="24" height="24"/>
<image name="chat_unsecure.png" width="18" height="27"/>
<image name="color_A.png" width="2" height="2"/>
<image name="color_E.png" width="2" height="2"/>
</resources>
</document>

View file

@ -39,8 +39,6 @@
@property(weak, nonatomic) IBOutlet UIImageView *LIMEKO;
@property(weak, nonatomic) IBOutlet UIImageView *imdmIcon;
@property(weak, nonatomic) IBOutlet UILabel *imdmLabel;
@property (weak, nonatomic) IBOutlet UILabel *eventContactDateLabel;
@property (weak, nonatomic) IBOutlet UIView *eventView;
+ (CGSize)ViewSizeForMessage:(LinphoneChatMessage *)chat withWidth:(int)width;

View file

@ -0,0 +1,23 @@
//
// UIChatNotifiedEventCell.h
// linphone
//
// Created by REIS Benjamin on 30/10/2017.
//
#ifndef UIChatNotifiedEventCell_h
#define UIChatNotifiedEventCell_h
#import <UIKit/UIKit.h>
#import "ChatConversationTableView.h"
@interface UIChatNotifiedEventCell : UITableViewCell
@property(readonly, nonatomic) LinphoneEventLog *event;
@property (weak, nonatomic) IBOutlet UILabel *contactDateLabel;
- (void)setEvent:(LinphoneEventLog *)event;
@end
#endif /* UIChatNotifiedEventCell_h */

View file

@ -0,0 +1,49 @@
//
// UIChatNotifiedEventCell.m
// linphone
//
// Created by REIS Benjamin on 30/10/2017.
//
#import <Foundation/Foundation.h>
#import "UIChatNotifiedEventCell.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
#import <AssetsLibrary/ALAsset.h>
#import <AssetsLibrary/ALAssetRepresentation.h>
@implementation UIChatNotifiedEventCell
#pragma mark - Lifecycle Functions
- (id)initWithIdentifier:(NSString *)identifier {
if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]) != nil) {
if ([identifier isEqualToString:NSStringFromClass(self.class)]) {
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:arrayOfViews.count - 1]);
[self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)];
[self addSubview:sub];
}
}
return self;
}
- (void)dealloc {
_event = NULL;
}
#pragma mark -
- (void)setEvent:(LinphoneEventLog *)event {
}
- (void)layoutSubviews {
[super layoutSubviews];
}
@end

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13196" 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="13174"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UIChatNotifiedEventCell">
<connections>
<outlet property="contactDateLabel" destination="t5k-5N-iBU" id="b6X-2a-1jl"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="C2W-tA-Fws">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vAS-G5-9nz" userLabel="eventView" customClass="UITableViewCell">
<rect key="frame" x="0.0" y="0.0" width="375" height="45"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" fixedFrame="YES" text="11:35 John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t5k-5N-iBU" userLabel="eventContactDateLabel">
<rect key="frame" x="125" y="18" width="124" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="Contact name"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_E.png" translatesAutoresizingMaskIntoConstraints="NO" id="nHs-Ev-fGT" userLabel="RightBar">
<rect key="frame" x="258" y="24" width="117" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="color_E.png" translatesAutoresizingMaskIntoConstraints="NO" id="hk1-mC-xLF" userLabel="LeftBar">
<rect key="frame" x="0.0" y="24" width="116" height="1"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
</subviews>
</view>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="366.5" y="248"/>
</view>
</objects>
<resources>
<image name="color_E.png" width="2" height="2"/>
</resources>
</document>

View file

@ -68,6 +68,8 @@
<string>Make calls with your friends</string>
<key>NSMicrophoneUsageDescription</key>
<string>Use microphone to make audio calls</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Add tranfered files to your library</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Share photos with your friends and customize avatars</string>
<key>NSVoIPUsageDescription</key>

View file

@ -683,6 +683,8 @@
8C5BCEDF1EB385B100A9AAEF /* bctoolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5BCEC71EB3859200A9AAEF /* bctoolbox.framework */; };
8C5BCEE01EB385B100A9AAEF /* linphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5BCEC81EB3859200A9AAEF /* linphone.framework */; };
8C73477C1D9BA3A00022EE8C /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */; };
8C92ABE81FA773190006FB5D /* UIChatNotifiedEventCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8C92ABE71FA773190006FB5D /* UIChatNotifiedEventCell.xib */; };
8C92ABF31FA773E50006FB5D /* UIChatNotifiedEventCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C92ABF21FA773E50006FB5D /* UIChatNotifiedEventCell.m */; };
8C9C5E0D1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */; };
8C9C5E111F83BD97006987FA /* UIChatCreateCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9C5E0F1F83BD97006987FA /* UIChatCreateCollectionViewCell.m */; };
8C9C5E121F83BD97006987FA /* UIChatCreateCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8C9C5E101F83BD97006987FA /* UIChatCreateCollectionViewCell.xib */; };
@ -1702,6 +1704,9 @@
8C5D1B9A1D9BC48100DC6539 /* UIShopTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIShopTableCell.m; sourceTree = "<group>"; };
8C5D1B9B1D9BC48100DC6539 /* UIShopTableCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIShopTableCell.xib; sourceTree = "<group>"; };
8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
8C92ABE71FA773190006FB5D /* UIChatNotifiedEventCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UIChatNotifiedEventCell.xib; sourceTree = "<group>"; };
8C92ABF11FA773C20006FB5D /* UIChatNotifiedEventCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIChatNotifiedEventCell.h; sourceTree = "<group>"; };
8C92ABF21FA773E50006FB5D /* UIChatNotifiedEventCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIChatNotifiedEventCell.m; sourceTree = "<group>"; };
8C9C5E0B1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChatConversationCreateCollectionViewController.h; sourceTree = "<group>"; };
8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChatConversationCreateCollectionViewController.m; sourceTree = "<group>"; };
8C9C5E0E1F83BD97006987FA /* UIChatCreateCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIChatCreateCollectionViewCell.h; sourceTree = "<group>"; };
@ -2192,6 +2197,9 @@
D3A8BB6E15A6C7D500F96BE5 /* UIChatBubbleTextCell.h */,
D3A8BB6F15A6C7D500F96BE5 /* UIChatBubbleTextCell.m */,
639E9CA51C0DB7EA00019A75 /* UIChatBubbleTextCell.xib */,
8C92ABF11FA773C20006FB5D /* UIChatNotifiedEventCell.h */,
8C92ABF21FA773E50006FB5D /* UIChatNotifiedEventCell.m */,
8C92ABE71FA773190006FB5D /* UIChatNotifiedEventCell.xib */,
D3EA540F159853750037DC6B /* UIChatCell.h */,
D3EA5410159853750037DC6B /* UIChatCell.m */,
639CEB0B1A1DF4FA004DE38F /* UIChatCell.xib */,
@ -3419,6 +3427,7 @@
D38187F815FE355D00C3EDCA /* TabBarView.xib in Resources */,
633FEE2F1D3CD5590014B822 /* color_G.png in Resources */,
633FEECE1D3CD55A0014B822 /* numpad_6_over@2x.png in Resources */,
8C92ABE81FA773190006FB5D /* UIChatNotifiedEventCell.xib in Resources */,
633FEDAB1D3CD5590014B822 /* backspace_disabled@2x.png in Resources */,
633FEDD91D3CD5590014B822 /* call_start_body_default~ipad@2x.png in Resources */,
633FEE401D3CD5590014B822 /* contacts_all_selected.png in Resources */,
@ -4091,6 +4100,7 @@
D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */,
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */,
D380801315C299D0005BE9BC /* ColorSpaceUtilites.m in Sources */,
8C92ABF31FA773E50006FB5D /* UIChatNotifiedEventCell.m in Sources */,
633FEF581D3CD5E00014B822 /* UIAvatarPresence.m in Sources */,
637157A11B283FE200C91677 /* FileTransferDelegate.m in Sources */,
D378AB2A15DCDB4A0098505D /* ImagePickerView.m in Sources */,