Merge branch 'new_ui' of git://git.linphone.org/linphone-iphone into castel

Conflicts:
	linphone.xcodeproj/project.pbxproj
This commit is contained in:
Yann Diorcet 2012-08-16 14:37:07 +02:00
commit 022ef3235e
24 changed files with 393 additions and 472 deletions

View file

@ -0,0 +1,35 @@
/* ContactDetailsImagePickerController.h
*
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#import "UICompositeViewController.h"
@protocol ContactDetailsImagePickerDelegate <NSObject>
- (void)changeContactImage:(UIImage*)image;
@end
@interface ContactDetailsImagePickerController : UIImagePickerController <UICompositeViewDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
@private
id<ContactDetailsImagePickerDelegate> imagePickerDelegate;
}
@property (nonatomic, retain) id<ContactDetailsImagePickerDelegate> imagePickerDelegate;
@end

View file

@ -0,0 +1,82 @@
/* ContactDetailsImagePickerController.m
*
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#import "ContactDetailsImagePickerController.h"
#import "PhoneMainView.h"
@implementation ContactDetailsImagePickerController
@synthesize imagePickerDelegate;
#pragma mark - UICompositeViewDelegate Functions
static UICompositeViewDescription *compositeDescription = nil;
+ (UICompositeViewDescription *)compositeViewDescription {
if(compositeDescription == nil) {
compositeDescription = [[UICompositeViewDescription alloc] init:@"ContactDetailsImage"
content:@"ContactDetailsImagePickerController"
stateBar:nil
stateBarEnabled:false
tabBar:@"UIMainBar"
tabBarEnabled:true
fullscreen:false
landscapeMode:[LinphoneManager runningOnIpad]
portraitMode:true];
}
return compositeDescription;
}
#pragma mark - ViewController Functions
- (void)viewDidLoad {
[super viewDidLoad];
[self setDelegate:self];
}
#pragma mark -
- (void)dismiss {
if([[[PhoneMainView instance] currentView] equal:[ContactDetailsImagePickerController compositeViewDescription]]) {
[[PhoneMainView instance] popCurrentView];
}
}
#pragma mark - UIImagePickerControllerDelegate Functions
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if(image == nil) {
image = [info objectForKey:UIImagePickerControllerOriginalImage];
}
if(image != nil) {
[imagePickerDelegate changeContactImage:image];
}
[self dismiss];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismiss];
}
@end

View file

@ -64,7 +64,7 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:@"UIMainBar"
tabBarEnabled:true
fullscreen:false
landscapeMode:true
landscapeMode:[LinphoneManager runningOnIpad]
portraitMode:true];
}
return compositeDescription;
@ -79,6 +79,7 @@ static UICompositeViewDescription *compositeDescription = nil;
}
}
#pragma mark - Property Functions
- (void)setDataList:(NSDictionary *)adatalist {

View file

@ -500,7 +500,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
/* MODIFICATION disable chat
} else {
// Go to Chat room view
[[PhoneMainView instance] popToView:[ChatViewController compositeViewDescription]];
[[PhoneMainView instance] popToView:[ChatViewController compositeViewDescription]]; // Got to Chat and push ChatRoom
ChatRoomViewController *controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:[ChatRoomViewController compositeViewDescription] push:TRUE], ChatRoomViewController);
if(controller != nil) {
[controller setRemoteAddress:dest];

View file

@ -82,22 +82,30 @@ int __aeabi_idiv(int a, int b) {
}
}
- (void)applicationDidEnterBackground:(UIApplication *)application{
[LinphoneLogger logc:LinphoneLoggerLog format:"applicationDidEnterBackground"];
if(![LinphoneManager isLcReady]) return;
[[LinphoneManager instance] enterBackgroundMode];
}
- (void)applicationWillResignActive:(UIApplication *)application {
[LinphoneLogger logc:LinphoneLoggerLog format:"applicationWillResignActive"];
if(![LinphoneManager isLcReady]) return;
LinphoneCore* lc = [LinphoneManager getLc];
LinphoneCall* call = linphone_core_get_current_call(lc);
if (call == NULL)
return;
if (call){
/* save call context */
LinphoneManager* instance = [LinphoneManager instance];
instance->currentCallContextBeforeGoingBackground.call = call;
instance->currentCallContextBeforeGoingBackground.cameraIsEnabled = linphone_call_camera_enabled(call);
/* save call context */
LinphoneManager* instance = [LinphoneManager instance];
instance->currentCallContextBeforeGoingBackground.call = call;
instance->currentCallContextBeforeGoingBackground.cameraIsEnabled = linphone_call_camera_enabled(call);
const LinphoneCallParams* params = linphone_call_get_current_params(call);
if (linphone_call_params_video_enabled(params)) {
linphone_call_enable_camera(call, false);
}
const LinphoneCallParams* params = linphone_call_get_current_params(call);
if (linphone_call_params_video_enabled(params)) {
linphone_call_enable_camera(call, false);
}
}
if (![[LinphoneManager instance] resignActive]) {
// destroying eventHandler if app cannot go in background.
@ -111,7 +119,8 @@ int __aeabi_idiv(int a, int b) {
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
- (void)applicationDidBecomeActive:(UIApplication *)application {
[LinphoneLogger logc:LinphoneLoggerLog format:"applicationDidBecomeActive"];
[self startApplication];
[[LinphoneManager instance] becomeActive];
@ -121,19 +130,19 @@ int __aeabi_idiv(int a, int b) {
LinphoneCore* lc = [LinphoneManager getLc];
LinphoneCall* call = linphone_core_get_current_call(lc);
if (call == NULL)
return;
LinphoneManager* instance = [LinphoneManager instance];
if (call == instance->currentCallContextBeforeGoingBackground.call) {
const LinphoneCallParams* params = linphone_call_get_current_params(call);
if (linphone_call_params_video_enabled(params)) {
linphone_call_enable_camera(
if (call){
LinphoneManager* instance = [LinphoneManager instance];
if (call == instance->currentCallContextBeforeGoingBackground.call) {
const LinphoneCallParams* params = linphone_call_get_current_params(call);
if (linphone_call_params_video_enabled(params)) {
linphone_call_enable_camera(
call,
instance->currentCallContextBeforeGoingBackground.cameraIsEnabled);
}
instance->currentCallContextBeforeGoingBackground.call = 0;
}
}
instance->currentCallContextBeforeGoingBackground.call = 0;
}
}
}
@ -185,6 +194,20 @@ int __aeabi_idiv(int a, int b) {
- (void)applicationWillTerminate:(UIApplication *)application {
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
[self startApplication];
if([LinphoneManager isLcReady]) {
if([[url scheme] isEqualToString:@"sip"]) {
// Go to ChatRoom view
DialerViewController *controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:[DialerViewController compositeViewDescription]], DialerViewController);
if(controller != nil) {
[controller setAddress:[url absoluteString]];
}
}
}
return YES;
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[LinphoneLogger log:LinphoneLoggerDebug format:@"PushNotification: Receive %@", userInfo];
NSDictionary *aps = [userInfo objectForKey:@"aps"];

View file

@ -362,7 +362,8 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
for(int i = 0; i < [tokenData length]; ++i) {
[tokenString appendFormat:@"%02X", (unsigned int)tokenBuffer[i]];
}
// NSLocalizedString(@"IC_MSG", nil); // Fake
// NSLocalizedString(@"IC_MSG", nil); // Fake for genstrings
// NSLocalizedString(@"IM_MSG", nil); // Fake for genstrings
NSString *params = [NSString stringWithFormat:@"APN-TOK=%@;APN-MSG=IM_MSG;APN-CAL=IC_MSG;APN-CAL-SND=ring.caf;APN-MSG-SND=msg.caf", tokenString];
linphone_proxy_config_set_contact_parameters(proxyCfg, [params UTF8String]);
}
@ -376,9 +377,9 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
}
- (BOOL)synchronize {
if (![LinphoneManager isLcReady]) return YES;
LinphoneCore *lc=[LinphoneManager getLc];
if (lc==NULL) return YES;
BOOL account_changed;
account_changed=[self valueChangedForKey:@"username_preference"]

View file

@ -108,6 +108,7 @@ typedef struct _LinphoneManagerSounds {
- (void)destroyLibLinphone;
- (BOOL)resignActive;
- (void)becomeActive;
- (BOOL)enterBackgroundMode;
+ (void)kickOffNetworkConnection;
- (void)setupNetworkReachabilityCallback;

View file

@ -712,7 +712,8 @@ static LinphoneCoreVTable linphonec_vtable = {
else
ms_set_cpu_count(1);
settingsStore = [[LinphoneCoreSettingsStore alloc] init];
if (!settingsStore)
settingsStore = [[LinphoneCoreSettingsStore alloc] init];
[LinphoneLogger logc:LinphoneLoggerWarning format:"Linphone [%s] started on [%s]"
,linphone_core_get_version()
@ -730,10 +731,12 @@ static LinphoneCoreVTable linphonec_vtable = {
[mIterateTimer invalidate];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setDelegate:nil];
#if 0
if (settingsStore != nil) {
[settingsStore release];
settingsStore = nil;
}
#endif
if (theLinphoneCore != nil) { //just in case application terminate before linphone core initialization
[LinphoneLogger logc:LinphoneLoggerLog format:"Destroy linphonecore"];
linphone_core_destroy(theLinphoneCore);
@ -749,19 +752,19 @@ static LinphoneCoreVTable linphonec_vtable = {
- (BOOL)resignActive {
if ([[LinphoneManager instance] settingsStore] != Nil)
[[[LinphoneManager instance] settingsStore] synchronize];
return [self enterBackgroundMode];
linphone_core_stop_dtmf_stream(theLinphoneCore);
return YES;
}
- (BOOL)enterBackgroundMode {
LinphoneProxyConfig* proxyCfg;
linphone_core_get_default_proxy(theLinphoneCore, &proxyCfg);
linphone_core_stop_dtmf_stream(theLinphoneCore);
if (proxyCfg && [settingsStore boolForKey:@"backgroundmode_preference"]) {
if (proxyCfg && [[NSUserDefaults standardUserDefaults] boolForKey:@"backgroundmode_preference"]) {
//For registration register
linphone_core_refresh_registers(theLinphoneCore);
//wait for registration answer
int i=0;
while (!linphone_proxy_config_is_registered(proxyCfg) && i++<40 ) {

View file

@ -20,9 +20,6 @@
#import "UICallBar.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
#import "CPAnimationSequence.h"
#import "CPAnimationStep.h"
#import "Utils.h"
#include "linphonecore.h"
@ -340,29 +337,55 @@
}
#pragma mark -
#pragma mark -
- (void)showAnimation:(NSString*)animationID target:(UIView*)target completion:(void (^)(BOOL finished))completion {
CGRect frame = [target frame];
int original_y = frame.origin.y;
frame.origin.y = [[self view] frame].size.height;
[target setFrame:frame];
[target setHidden:FALSE];
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
CGRect frame = [target frame];
frame.origin.y = original_y;
[target setFrame:frame];
}
completion:^(BOOL finished){
CGRect frame = [target frame];
frame.origin.y = original_y;
[target setFrame:frame];
completion(finished);
}];
}
- (void)hideAnimation:(NSString*)animationID target:(UIView*)target completion:(void (^)(BOOL finished))completion {
CGRect frame = [target frame];
int original_y = frame.origin.y;
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
CGRect frame = [target frame];
frame.origin.y = [[self view] frame].size.height;
[target setFrame:frame];
}
completion:^(BOOL finished){
CGRect frame = [target frame];
frame.origin.y = original_y;
[target setHidden:TRUE];
[target setFrame:frame];
completion(finished);
}];
}
- (void)showPad:(BOOL)animated {
[dialerButton setOn];
if([padView isHidden]) {
if(animated) {
CGRect frame = [padView frame];
int original_y = frame.origin.y;
frame.origin.y = [[self view] frame].size.height;
[padView setFrame:frame];
[padView setHidden:FALSE];
CPAnimationSequence* move = [[CPAnimationSequence sequenceWithSteps:
[[CPAnimationStep after:0.0
for:0.5
options:UIViewAnimationOptionCurveEaseOut
animate:^{
CGRect frame = [padView frame];
frame.origin.y = original_y;
[padView setFrame:frame];
}] autorelease],
nil
] autorelease];
[move run];
[self showAnimation:@"show" target:padView completion:^(BOOL finished){}];
} else {
[padView setHidden:FALSE];
}
@ -373,28 +396,7 @@
[dialerButton setOff];
if(![padView isHidden]) {
if(animated) {
CGRect frame = [padView frame];
int original_y = frame.origin.y;
CPAnimationSequence* move = [[CPAnimationSequence sequenceWithSteps:
[[CPAnimationStep after:0.0
for:0.5
options:UIViewAnimationOptionCurveEaseIn
animate:^{
CGRect frame = [padView frame];
frame.origin.y = [[self view] frame].size.height;
[padView setFrame:frame];
}] autorelease],
[[CPAnimationStep after:0.0
animate:^{
CGRect frame = [padView frame];
frame.origin.y = original_y;
[padView setHidden:TRUE];
[padView setFrame:frame];
}] autorelease],
nil
] autorelease];
[move run];
[self hideAnimation:@"hide" target:padView completion:^(BOOL finished){}];
} else {
[padView setHidden:TRUE];
}
@ -405,23 +407,7 @@
[optionsButton setOn];
if([optionsView isHidden]) {
if(animated) {
CGRect frame = [optionsView frame];
int original_y = frame.origin.y;
frame.origin.y = [[self view] frame].size.height;
[optionsView setFrame:frame];
[optionsView setHidden:FALSE];
CPAnimationSequence* move = [[CPAnimationSequence sequenceWithSteps:
[[CPAnimationStep after:0.0
for:0.5
options:UIViewAnimationOptionCurveEaseOut
animate:^{
CGRect frame = [optionsView frame];
frame.origin.y = original_y;
[optionsView setFrame:frame];
}] autorelease],
nil
] autorelease];
[move run];
[self showAnimation:@"show" target:optionsView completion:^(BOOL finished){}];
} else {
[optionsView setHidden:FALSE];
}
@ -432,28 +418,7 @@
[optionsButton setOff];
if(![optionsView isHidden]) {
if(animated) {
CGRect frame = [optionsView frame];
int original_y = frame.origin.y;
CPAnimationSequence* move = [[CPAnimationSequence sequenceWithSteps:
[[CPAnimationStep after:0.0
for:0.5
options:UIViewAnimationOptionCurveEaseIn
animate:^{
CGRect frame = [optionsView frame];
frame.origin.y = [[self view] frame].size.height;
[optionsView setFrame:frame];
}] autorelease],
[[CPAnimationStep after:0.0
animate:^{
CGRect frame = [optionsView frame];
frame.origin.y = original_y;
[optionsView setHidden:TRUE];
[optionsView setFrame:frame];
}] autorelease],
nil
] autorelease];
[move run];
[self hideAnimation:@"hide" target:optionsView completion:^(BOOL finished){}];
} else {
[optionsView setHidden:TRUE];
}

View file

@ -20,9 +20,10 @@
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import "ContactDetailsImagePickerController.h"
#import "ContactDetailsDelegate.h"
@interface UIContactDetailsHeader : UIViewController<UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate> {
@interface UIContactDetailsHeader : UIViewController<UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, ContactDetailsImagePickerDelegate> {
UILabel *addressLabel;
UIImageView *avatarImage;
UIView *normalView;
@ -45,7 +46,9 @@
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) IBOutlet id<ContactDetailsDelegate> contactDetailsDelegate;
@property(nonatomic,getter=isEditing) BOOL editing;
@property(nonatomic,getter=isEditing) BOOL editing;
- (IBAction)onAvatarClick:(id)event;
+ (CGFloat)height:(BOOL)editing;

View file

@ -22,6 +22,7 @@
#import "UIEditableTableViewCell.h"
#import "FastAddressBook.h"
#import "UILinphone.h"
#import "PhoneMainView.h"
@implementation UIContactDetailsHeader
@ -231,6 +232,40 @@
}
#pragma mark - Action Functions
- (IBAction)onAvatarClick:(id)event {
if(self.isEditing) {
ContactDetailsImagePickerController *controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:[ContactDetailsImagePickerController compositeViewDescription] push:TRUE], ContactDetailsImagePickerController);
if(controller != nil) {
[controller setAllowsEditing:TRUE];
[controller setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[controller setImagePickerDelegate:self];
}
}
}
#pragma mark - ContactDetailsImagePickerDelegate Functions
- (void)changeContactImage:(UIImage*)image {
NSError* error = NULL;
if(!ABPersonRemoveImageData(contact, (CFErrorRef*)error)) {
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't add entry: %@", [error localizedDescription]];
}
NSData *dataRef = UIImagePNGRepresentation(image);
CFDataRef cfdata = CFDataCreate(NULL,[dataRef bytes], [dataRef length]);
if(!ABPersonSetImageData(contact, cfdata, (CFErrorRef*)error)) {
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't add entry: %@", [error localizedDescription]];
}
CFRelease(cfdata);
[self update];
}
#pragma mark - UITableViewDelegate Functions
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

View file

@ -12,6 +12,7 @@
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIButton</string>
<string>IBUIImageView</string>
<string>IBUILabel</string>
<string>IBUITableView</string>
@ -58,7 +59,7 @@
<string key="NSFrame">{{20, 6}, {65, 65}}</string>
<reference key="NSSuperview" ref="1033790597"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="959860357"/>
<reference key="NSNextKeyView" ref="854571707"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
@ -67,6 +68,40 @@
<string key="NSResourceName">avatar_unknown_small.png</string>
</object>
</object>
<object class="IBUIButton" id="854571707">
<reference key="NSNextResponder" ref="1033790597"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 6}, {65, 65}}</string>
<reference key="NSSuperview" ref="1033790597"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="959860357"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<object class="NSColor" key="IBUIHighlightedTitleColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleShadowColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
<object class="IBUIFontDescription" key="IBUIFontDescription">
<int key="type">2</int>
<double key="pointSize">15</double>
</object>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">15</double>
<int key="NSfFlags">16</int>
</object>
</object>
<object class="IBUIView" id="959860357">
<reference key="NSNextResponder" ref="1033790597"/>
<int key="NSvFlags">290</int>
@ -277,6 +312,15 @@ AAgACAAIAAEAAQABAAE</bytes>
</object>
<int key="connectionID">19</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">onAvatarClick:</string>
<reference key="source" ref="854571707"/>
<reference key="destination" ref="372490531"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">23</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@ -305,6 +349,7 @@ AAgACAAIAAEAAQABAAE</bytes>
<reference ref="906825234"/>
<reference ref="959860357"/>
<reference ref="451441616"/>
<reference ref="854571707"/>
</array>
<reference key="parent" ref="0"/>
</object>
@ -349,6 +394,12 @@ AAgACAAIAAEAAQABAAE</bytes>
<reference key="object" ref="579848711"/>
<reference key="parent" ref="451441616"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">22</int>
<reference key="object" ref="854571707"/>
<reference key="parent" ref="1033790597"/>
<string key="objectName">avatarButton</string>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@ -359,6 +410,7 @@ AAgACAAIAAEAAQABAAE</bytes>
<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -368,13 +420,24 @@ AAgACAAIAAEAAQABAAE</bytes>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">21</int>
<int key="maxID">23</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">UIContactDetailsHeader</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">onImageClick:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">onImageClick:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">onImageClick:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="addressLabel">UILabel</string>
<string key="avatarImage">UIImageView</string>

View file

@ -34,6 +34,8 @@
#import "DialerViewController.h"
#import "ContactsViewController.h"
#import "ContactDetailsViewController.h"
#import "ContactDetailsLabelViewController.h"
#import "ContactDetailsImagePickerController.h"
#import "HistoryViewController.h"
#import "HistoryDetailsViewController.h"
#import "InCallViewController.h"

View file

@ -526,7 +526,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
- (UIViewController*)popCurrentView {
[LinphoneLogger logc:LinphoneLoggerLog format:"PhoneMainView: Pop view"];
if([viewStack count] > 0) {
if([viewStack count] > 1) {
[viewStack removeLastObject];
[self _changeCurrentView:[viewStack lastObject] transition:[PhoneMainView getBackwardTransition] force:TRUE];
return [mainViewController getCurrentViewController];
@ -598,7 +598,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
UILocalNotification* notif = [[[UILocalNotification alloc] init] autorelease];
if (notif) {
notif.repeatInterval = 0;
notif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ sent you a message",nil), address];
notif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"IM_MSG",nil), address];
notif.alertAction = NSLocalizedString(@"Show", nil);
notif.soundName = @"msg.caf";
notif.userInfo = [NSDictionary dictionaryWithObject:[chat remoteContact] forKey:@"chat"];
@ -650,7 +650,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
appData->notification = [[UILocalNotification alloc] init];
if (appData->notification) {
appData->notification.repeatInterval = 0;
appData->notification.alertBody =[NSString stringWithFormat:NSLocalizedString(@" %@ is calling you",nil), address];
appData->notification.alertBody =[NSString stringWithFormat:NSLocalizedString(@"IC_MSG",nil), address];
appData->notification.alertAction = NSLocalizedString(@"Answer", nil);
appData->notification.soundName = @"ring.caf";
appData->notification.userInfo = [NSDictionary dictionaryWithObject:[NSData dataWithBytes:&call length:sizeof(call)] forKey:@"call"];

View file

@ -1,26 +0,0 @@
// Created by Yang Meyer on 26.07.11.
// Copyright 2011-2012 compeople AG. All rights reserved.
#import <Foundation/Foundation.h>
#import "CPAnimationStep.h"
/**
A CPAnimationSequence defines a sequence of CPAnimationStep objects, which can
be `-run` animatedly or non-animatedly.
CPAnimationSequence implements the Composite design pattern, with CPAnimationStep
as the base class.
*/
@interface CPAnimationSequence : CPAnimationStep
#pragma mark - constructors
+ (id) sequenceWithSteps:(CPAnimationStep*)first, ... NS_REQUIRES_NIL_TERMINATION;
#pragma mark - properties
/** Animations steps, from first to last. */
@property (nonatomic, strong, readonly) NSArray* steps;
@end

View file

@ -1,84 +0,0 @@
// Created by Yang Meyer on 26.07.11.
// Copyright 2011-2012 compeople AG. All rights reserved.
#import "CPAnimationSequence.h"
@interface CPAnimationStep(hidden)
- (NSArray*) animationStepArray;
@end
@interface CPAnimationSequence()
@property (nonatomic, strong, readwrite) NSArray* steps;
@end
#pragma mark -
@implementation CPAnimationSequence
@synthesize steps;
#pragma mark - Object lifecycle
+ (id) sequenceWithSteps:(CPAnimationStep*)first, ... {
CPAnimationSequence* instance = [[self alloc] init];
if (instance) {
NSMutableArray* tempSteps = [[NSMutableArray alloc] initWithCapacity:10];
va_list args;
va_start(args, first);
[tempSteps insertObject:first atIndex:0];
CPAnimationStep* aStep;
while ((aStep = va_arg(args, CPAnimationStep*))) {
[tempSteps insertObject:aStep atIndex:0];
}
instance.steps = [NSArray arrayWithArray:tempSteps];
va_end(args);
[tempSteps release];
}
return instance;
}
- (void) dealloc {
[steps release];
[super dealloc];
}
#pragma mark - property override
- (void) setDelay:(NSTimeInterval)delay {
NSAssert(NO, @"Setting a delay on a sequence is undefined and therefore disallowed!");
}
- (void) setDuration:(NSTimeInterval)duration {
NSAssert(NO, @"Setting a duration on a sequence is undefined and therefore disallowed!");
}
- (void) setOptions:(UIViewAnimationOptions)options {
NSAssert(NO, @"Setting options on a sequence is undefined and therefore disallowed!");
}
#pragma mark - build the sequence
- (NSArray*) animationStepArray {
NSMutableArray* array = [NSMutableArray arrayWithCapacity:[self.steps count]];
for (CPAnimationStep* current in self.steps) {
[array addObjectsFromArray:[current animationStepArray]];
}
return array;
}
#pragma mark - pretty-print
- (NSString*) description {
NSMutableString* sequenceBody = [[NSMutableString alloc] initWithCapacity:100*[self.steps count]];
for (CPAnimationStep* step in self.steps) {
[sequenceBody appendString:[step description]];
}
// indent
[sequenceBody replaceOccurrencesOfString:@"\n"
withString:@"\n "
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, [sequenceBody length])];
return [NSString stringWithFormat:@"\n(sequence:%@\n)", sequenceBody];
}
@end

View file

@ -1,46 +0,0 @@
// Created by Yang Meyer on 26.07.11.
// Copyright 2011 compeople AG. All rights reserved.
#import <Foundation/Foundation.h>
/** Helper type definition for the component. */
typedef void (^AnimationStep)(void);
/**
A CPAnimationStep defines a single animation object with a delay, duration, execution block and animation options.
*/
@interface CPAnimationStep : NSObject
#pragma mark - constructors
+ (id) after:(NSTimeInterval)delay
animate:(AnimationStep)step;
+ (id) for:(NSTimeInterval)duration
animate:(AnimationStep)step;
+ (id) after:(NSTimeInterval)delay
for:(NSTimeInterval)duration
animate:(AnimationStep)step;
+ (id) after:(NSTimeInterval)delay
for:(NSTimeInterval)duration
options:(UIViewAnimationOptions)theOptions
animate:(AnimationStep)step;
#pragma mark - properties (normally already set by the constructor)
@property (nonatomic) NSTimeInterval delay;
@property (nonatomic) NSTimeInterval duration;
@property (nonatomic, strong) AnimationStep step;
@property (nonatomic) UIViewAnimationOptions options;
#pragma mark - execution
/** Starts the step execution. */
- (void) runAnimated:(BOOL)animated;
/** Shortcut for [step runAnimated:YES] */
- (void) run;
@end

View file

@ -1,132 +0,0 @@
// Created by Yang Meyer on 26.07.11.
// Copyright 2011-2012 compeople AG. All rights reserved.
#import "CPAnimationStep.h"
@interface CPAnimationStep()
/** A temporary reverse queue of animation steps, i.e. from last to first.
It is created when the step is run, and is modified during the animation,
and is destroyed when the animation finishes. */
@property (nonatomic, strong) NSMutableArray* consumableSteps;
@end
@implementation CPAnimationStep
@synthesize delay, duration, step, options;
@synthesize consumableSteps;
#pragma mark overrides
#pragma mark construction
+ (id) after:(NSTimeInterval)delay animate:(AnimationStep)step {
return [self after:delay for:0.0 options:0 animate:step];
}
+ (id) for:(NSTimeInterval)duration animate:(AnimationStep)step {
return [self after:0.0 for:duration options:0 animate:step];
}
+ (id) after:(NSTimeInterval)delay for:(NSTimeInterval)duration animate:(AnimationStep)step {
return [self after:delay for:duration options:0 animate:step];
}
+ (id) after:(NSTimeInterval)theDelay
for:(NSTimeInterval)theDuration
options:(UIViewAnimationOptions)theOptions
animate:(AnimationStep)theStep {
CPAnimationStep* instance = [[self alloc] init];
if (instance) {
instance.delay = theDelay;
instance.duration = theDuration;
instance.options = theOptions;
instance.step = theStep;
}
return instance;
}
- (void)dealloc {
[step release];
[super dealloc];
}
#pragma mark action
// From http://stackoverflow.com/questions/4007023/blocks-instead-of-performselectorwithobjectafterdelay
+ (void) runBlock:(AnimationStep)block afterDelay:(NSTimeInterval)delay {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay), dispatch_get_current_queue(), block);
}
- (NSArray*) animationStepArray {
// subclasses must override this!
return [NSArray arrayWithObject:self];
}
- (void) runAnimated:(BOOL)animated {
if (!self.consumableSteps) {
self.consumableSteps = [[NSMutableArray alloc] initWithArray:[self animationStepArray]];
}
if (![self.consumableSteps count]) { // recursion anchor
[self.consumableSteps release];
self.consumableSteps = nil;
return; // we're done
}
void (^completionStep)(BOOL) = ^(BOOL animated){
[self.consumableSteps removeLastObject];
[self runAnimated:animated]; // recurse!
};
CPAnimationStep* currentStep = [self.consumableSteps lastObject];
// Note: do not animate to short steps
if (animated && currentStep.duration >= 0.02) {
[UIView animateWithDuration:currentStep.duration
delay:currentStep.delay
options:currentStep.options
animations:currentStep.step
completion:^(BOOL finished) {
if (finished) {
completionStep(TRUE);
} else {
completionStep(FALSE);
}
}];
} else {
void (^execution)(void) = ^{
currentStep.step();
completionStep(FALSE);
};
if (animated && currentStep.delay) {
[CPAnimationStep runBlock:execution afterDelay:currentStep.delay];
} else {
execution();
}
}
}
- (void) run {
[self runAnimated:YES];
}
#pragma mark - pretty-print
- (NSString*) description {
NSMutableString* result = [[NSMutableString alloc] initWithCapacity:100];
[result appendString:@"\n["];
if (self.delay > 0.0) {
[result appendFormat:@"after:%.1f ", self.delay];
}
if (self.duration > 0.0) {
[result appendFormat:@"for:%.1f ", self.duration];
}
if (self.options > 0) {
[result appendFormat:@"options:%d ", self.options];
}
[result appendFormat:@"animate:%@", self.step];
[result appendString:@"]"];
return result;
}
@end

View file

@ -178,12 +178,12 @@ static UICompositeViewDescription *compositeDescription = nil;
[waitView setHidden:TRUE];
}
+ (UIView*)findTextField:(ViewElement)tag view:(UIView*)view {
+ (UIView*)findView:(ViewElement)tag view:(UIView*)view {
for(UIView *child in [view subviews]) {
if([child tag] == tag){
return (UITextField*)child;
} else {
UIView *o = [WizardViewController findTextField:tag view:child];
UIView *o = [WizardViewController findView:tag view:child];
if(o)
return o;
}
@ -191,17 +191,17 @@ static UICompositeViewDescription *compositeDescription = nil;
return nil;
}
- (UITextField*)findTextField:(ViewElement)tag {
UIView *view = [WizardViewController findTextField:tag view:contentView];
if([view isKindOfClass:[UITextField class]])
return (UITextField*)view;
+ (UITextField*)findTextField:(ViewElement)tag view:(UIView*)view {
UIView *aview = [WizardViewController findView:tag view:view];
if([aview isKindOfClass:[UITextField class]])
return (UITextField*)aview;
return nil;
}
- (UILabel*)findLabel:(ViewElement)tag {
UIView *view = [WizardViewController findTextField:tag view:contentView];
if([view isKindOfClass:[UILabel class]])
return (UILabel*)view;
+ (UILabel*)findLabel:(ViewElement)tag view:(UIView*)view {
UIView *aview = [WizardViewController findView:tag view:view];
if([aview isKindOfClass:[UILabel class]])
return (UILabel*)aview;
return nil;
}
@ -379,30 +379,30 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onCheckValidationClick:(id)sender {
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
[self checkAccountValidation:[NSString stringWithFormat:@"%@@%@", username, LINPHONE_WIZARD_DOMAIN]];
}
- (IBAction)onSignInExternalClick:(id)sender {
[self.waitView setHidden:false];
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *domain = [self findTextField:ViewElement_Domain].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
NSString *domain = [WizardViewController findTextField:ViewElement_Domain view:contentView].text;
[self addProxyConfig:username password:password domain:domain];
}
- (IBAction)onSignInClick:(id)sender {
[self.waitView setHidden:false];
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
[self addProxyConfig:username password:password domain:LINPHONE_WIZARD_DOMAIN];
}
- (IBAction)onRegisterClick:(id)sender {
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *password2 = [self findTextField:ViewElement_Password2].text;
NSString *email = [self findTextField:ViewElement_Email].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
NSString *password2 = [WizardViewController findTextField:ViewElement_Password2 view:contentView].text;
NSString *email = [WizardViewController findTextField:ViewElement_Email view:contentView].text;
NSMutableString *errors = [NSMutableString string];
if ([username length] < LINPHONE_WIZARD_MIN_USERNAME_LENGTH) {
@ -503,11 +503,11 @@ static UICompositeViewDescription *compositeDescription = nil;
#pragma mark - XMLRPCConnectionDelegate Functions
- (void)request: (XMLRPCRequest *)request didReceiveResponse: (XMLRPCResponse *)response {
- (void)request:(XMLRPCRequest *)request didReceiveResponse:(XMLRPCResponse *)response {
[LinphoneLogger log:LinphoneLoggerDebug format:@"XMLRPC %@: %@", [request method], [response body]];
[waitView setHidden:true];
if ([response isFault]) {
NSString *errorString = [NSString stringWithFormat:NSLocalizedString(@"Can't create account: Communication issue (%@)", nil), [response faultString]];
NSString *errorString = [NSString stringWithFormat:NSLocalizedString(@"Communication issue (%@)", nil), [response faultString]];
UIAlertView* errorView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Communication issue",nil)
message:errorString
delegate:nil
@ -515,7 +515,7 @@ static UICompositeViewDescription *compositeDescription = nil;
otherButtonTitles:nil,nil];
[errorView show];
[errorView release];
} else {
} else if([response object] != nil) { //Don't handle if not object: HTTP/Communication Error
if([[request method] isEqualToString:@"check_account"]) {
if([response object] == [NSNumber numberWithInt:1]) {
UIAlertView* errorView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Check issue",nil)
@ -526,18 +526,18 @@ static UICompositeViewDescription *compositeDescription = nil;
[errorView show];
[errorView release];
} else {
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *email = [self findTextField:ViewElement_Email].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
NSString *email = [WizardViewController findTextField:ViewElement_Email view:contentView].text;
[self createAccount:[NSString stringWithFormat:@"%@@%@", username, LINPHONE_WIZARD_DOMAIN] password:password email:email];
}
} else if([[request method] isEqualToString:@"create_account_with_useragent"]) {
if([response object] == [NSNumber numberWithInt:0]) {
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
[self changeView:validateAccountView back:FALSE animation:TRUE];
[self findTextField:ViewElement_Username].text = username;
[self findTextField:ViewElement_Password].text = password;
[WizardViewController findTextField:ViewElement_Username view:contentView].text = username;
[WizardViewController findTextField:ViewElement_Password view:contentView].text = password;
} else {
UIAlertView* errorView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Account creation issue",nil)
message:NSLocalizedString(@"Can't create the account. Please try again.", nil)
@ -549,8 +549,8 @@ static UICompositeViewDescription *compositeDescription = nil;
}
} else if([[request method] isEqualToString:@"check_account_validated"]) {
if([response object] == [NSNumber numberWithInt:1]) {
NSString *username = [self findTextField:ViewElement_Username].text;
NSString *password = [self findTextField:ViewElement_Password].text;
NSString *username = [WizardViewController findTextField:ViewElement_Username view:contentView].text;
NSString *password = [WizardViewController findTextField:ViewElement_Password view:contentView].text;
[self addProxyConfig:username password:password domain:LINPHONE_WIZARD_DOMAIN];
} else {
UIAlertView* errorView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Account validation issue",nil)
@ -565,8 +565,8 @@ static UICompositeViewDescription *compositeDescription = nil;
}
}
- (void)request: (XMLRPCRequest *)request didFailWithError: (NSError *)error {
NSString *errorString = [NSString stringWithFormat:NSLocalizedString(@"Can't create account: Communication issue (%@)", nil), [error localizedDescription]];
- (void)request:(XMLRPCRequest *)request didFailWithError:(NSError *)error {
NSString *errorString = [NSString stringWithFormat:NSLocalizedString(@"Communication issue (%@)", nil), [error localizedDescription]];
UIAlertView* errorView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Communication issue", nil)
message:errorString
delegate:nil
@ -577,15 +577,15 @@ static UICompositeViewDescription *compositeDescription = nil;
[waitView setHidden:true];
}
- (BOOL)request: (XMLRPCRequest *)request canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace *)protectionSpace {
- (BOOL)request:(XMLRPCRequest *)request canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return FALSE;
}
- (void)request: (XMLRPCRequest *)request didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge {
- (void)request:(XMLRPCRequest *)request didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
}
- (void)request: (XMLRPCRequest *)request didCancelAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge {
- (void)request:(XMLRPCRequest *)request didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
}

View file

@ -401,7 +401,7 @@
<int key="IBUITag">200</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">Enter you username and password with your SIP domain</string>
<string key="IBUIText">Enter you username and password with your email address</string>
<reference key="IBUITextColor" ref="784405869"/>
<nil key="IBUIHighlightedColor"/>
<int key="IBUIBaselineAdjustment">0</int>

View file

@ -36,7 +36,7 @@
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Enable RFC DTMF</string>
<string>Send inband DTMFs</string>
<key>Key</key>
<string>rfc_dtmf_preference</string>
<key>DefaultValue</key>
@ -46,7 +46,7 @@
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Enable SIPINFO DTMF</string>
<string>Send SIP INFO DTMFs</string>
<key>Key</key>
<string>sipinfo_dtmf_preference</string>
<key>DefaultValue</key>

View file

@ -2,6 +2,17 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>org.linphone.phone</string>
<key>CFBundleURLSchemes</key>
<array>
<string>sip</string>
</array>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>

View file

@ -542,6 +542,8 @@
D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; };
D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; };
D378906715AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */; };
D378AB2A15DCDB4A0098505D /* ContactDetailsImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378AB2915DCDB490098505D /* ContactDetailsImagePickerController.m */; };
D378AB2B15DCDB4A0098505D /* ContactDetailsImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378AB2915DCDB490098505D /* ContactDetailsImagePickerController.m */; };
D37B96B715A1A6F20005CCD2 /* call_state_delete_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */; };
D37B96B915A1A6F20005CCD2 /* call_state_delete_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */; };
D37C638E15AAD251009D0BAC /* contact_number_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D37C638C15AAD251009D0BAC /* contact_number_over.png */; };
@ -608,10 +610,6 @@
D3832800158100E400FA0D23 /* contacts_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327FC158100E400FA0D23 /* contacts_over.png */; };
D3832801158100E400FA0D23 /* history_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327FD158100E400FA0D23 /* history_over.png */; };
D3832802158100E400FA0D23 /* settings_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327FE158100E400FA0D23 /* settings_over.png */; };
D389362615A6D19800A3A3AA /* CPAnimationSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D389362315A6D19800A3A3AA /* CPAnimationSequence.m */; };
D389362715A6D19800A3A3AA /* CPAnimationSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D389362315A6D19800A3A3AA /* CPAnimationSequence.m */; };
D389362815A6D19800A3A3AA /* CPAnimationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D389362515A6D19800A3A3AA /* CPAnimationStep.m */; };
D389362915A6D19800A3A3AA /* CPAnimationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D389362515A6D19800A3A3AA /* CPAnimationStep.m */; };
D38D14AF15A30B3D008497E8 /* cell_call_first_highlight.png in Resources */ = {isa = PBXBuildFile; fileRef = D38D14AD15A30B3D008497E8 /* cell_call_first_highlight.png */; };
D38D14B115A30B3D008497E8 /* cell_call_highlight.png in Resources */ = {isa = PBXBuildFile; fileRef = D38D14AE15A30B3D008497E8 /* cell_call_highlight.png */; };
D3A55FBC15877E5E003FD403 /* UIContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A55FBB15877E5E003FD403 /* UIContactCell.m */; };
@ -1338,6 +1336,8 @@
D378906215AC373B00BD776C /* ContactDetailsLabelViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsLabelViewController.h; sourceTree = "<group>"; };
D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsLabelViewController.m; sourceTree = "<group>"; };
D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactDetailsLabelViewController.xib; sourceTree = "<group>"; };
D378AB2815DCDB480098505D /* ContactDetailsImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsImagePickerController.h; sourceTree = "<group>"; };
D378AB2915DCDB490098505D /* ContactDetailsImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsImagePickerController.m; sourceTree = "<group>"; };
D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_default.png; path = Resources/call_state_delete_default.png; sourceTree = "<group>"; };
D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_over.png; path = Resources/call_state_delete_over.png; sourceTree = "<group>"; };
D37C638C15AAD251009D0BAC /* contact_number_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_number_over.png; path = Resources/contact_number_over.png; sourceTree = "<group>"; };
@ -1404,10 +1404,6 @@
D38327FD158100E400FA0D23 /* history_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_over.png; path = Resources/history_over.png; sourceTree = "<group>"; };
D38327FE158100E400FA0D23 /* settings_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_over.png; path = Resources/settings_over.png; sourceTree = "<group>"; };
D38327FF158100E400FA0D23 /* chat_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_over.png; path = Resources/chat_over.png; sourceTree = "<group>"; };
D389362215A6D19800A3A3AA /* CPAnimationSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPAnimationSequence.h; path = Utils/CPAnimation/CPAnimationSequence.h; sourceTree = "<group>"; };
D389362315A6D19800A3A3AA /* CPAnimationSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPAnimationSequence.m; path = Utils/CPAnimation/CPAnimationSequence.m; sourceTree = "<group>"; };
D389362415A6D19800A3A3AA /* CPAnimationStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPAnimationStep.h; path = Utils/CPAnimation/CPAnimationStep.h; sourceTree = "<group>"; };
D389362515A6D19800A3A3AA /* CPAnimationStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPAnimationStep.m; path = Utils/CPAnimation/CPAnimationStep.m; sourceTree = "<group>"; };
D389363715A6D53200A3A3AA /* chat_bubble_incoming.9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_bubble_incoming.9.png; path = Resources/chat_bubble_incoming.9.png; sourceTree = "<group>"; };
D389363815A6D53200A3A3AA /* chat_bubble_outgoing.9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_bubble_outgoing.9.png; path = Resources/chat_bubble_outgoing.9.png; sourceTree = "<group>"; };
D38D14AD15A30B3D008497E8 /* cell_call_first_highlight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cell_call_first_highlight.png; path = Resources/cell_call_first_highlight.png; sourceTree = "<group>"; };
@ -1823,6 +1819,8 @@
22E0A81F111C44E100B04932 /* ConsoleViewController.m */,
22E0A81E111C44E100B04932 /* ConsoleViewController.xib */,
D30BBD1215D3EFEB000F93DD /* ContactDetailsDelegate.h */,
D378AB2815DCDB480098505D /* ContactDetailsImagePickerController.h */,
D378AB2915DCDB490098505D /* ContactDetailsImagePickerController.m */,
D378906215AC373B00BD776C /* ContactDetailsLabelViewController.h */,
D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */,
D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */,
@ -2743,7 +2741,6 @@
D34BD60D15C136770070C209 /* GDataXML */,
D380801215C299D0005BE9BC /* ColorSpaceUtilites.m */,
D380801115C29984005BE9BC /* ColorSpaceUtilities.h */,
D38935F715A6D06800A3A3AA /* CPAnimation */,
D3807FB615C28940005BE9BC /* DCRoundSwitch */,
D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */,
D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */,
@ -2863,17 +2860,6 @@
path = Views;
sourceTree = "<group>";
};
D38935F715A6D06800A3A3AA /* CPAnimation */ = {
isa = PBXGroup;
children = (
D389362215A6D19800A3A3AA /* CPAnimationSequence.h */,
D389362315A6D19800A3A3AA /* CPAnimationSequence.m */,
D389362415A6D19800A3A3AA /* CPAnimationStep.h */,
D389362515A6D19800A3A3AA /* CPAnimationStep.m */,
);
name = CPAnimation;
sourceTree = "<group>";
};
D398D3031594B0FB00FD553C /* Settings */ = {
isa = PBXGroup;
children = (
@ -3642,8 +3628,6 @@
D32460E6159D9AAD00BA7F3A /* UITransparentView.m in Sources */,
D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */,
D3196D3E15A32BD8007FEEBA /* UITransferButton.m in Sources */,
D389362615A6D19800A3A3AA /* CPAnimationSequence.m in Sources */,
D389362815A6D19800A3A3AA /* CPAnimationStep.m in Sources */,
D3128FE115AABC7E00A2147A /* ContactDetailsViewController.m in Sources */,
D37C639515AADDAF009D0BAC /* UIContactDetailsHeader.m in Sources */,
D37C639B15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */,
@ -3674,6 +3658,7 @@
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */,
D380800515C28A7A005BE9BC /* UILinphone.m in Sources */,
D380801315C299D0005BE9BC /* ColorSpaceUtilites.m in Sources */,
D378AB2A15DCDB4A0098505D /* ContactDetailsImagePickerController.m in Sources */,
D306BC0515CFF2A000FDB80F /* GDataXMLNode.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -3726,8 +3711,6 @@
D32460E7159D9AAD00BA7F3A /* UITransparentView.m in Sources */,
D32B9DFD15A2F131000B6DEC /* FastAddressBook.m in Sources */,
D3196D3F15A32BD8007FEEBA /* UITransferButton.m in Sources */,
D389362715A6D19800A3A3AA /* CPAnimationSequence.m in Sources */,
D389362915A6D19800A3A3AA /* CPAnimationStep.m in Sources */,
D3128FE215AABC7E00A2147A /* ContactDetailsViewController.m in Sources */,
D37C639615AADDAF009D0BAC /* UIContactDetailsHeader.m in Sources */,
D37C639C15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */,
@ -3758,6 +3741,7 @@
D380800315C2894A005BE9BC /* IASKTextField.m in Sources */,
D380800615C28A7A005BE9BC /* UILinphone.m in Sources */,
D380801415C299D0005BE9BC /* ColorSpaceUtilites.m in Sources */,
D378AB2B15DCDB4A0098505D /* ContactDetailsImagePickerController.m in Sources */,
D306BC0615CFF2A100FDB80F /* GDataXMLNode.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;