mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 11:08:06 +00:00
Clean Linphone Manager
Improve logs
This commit is contained in:
parent
05413c9bb4
commit
0b2236f007
42 changed files with 675 additions and 524 deletions
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#import "CallDelegate.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation CallDelegate
|
||||
|
||||
|
|
@ -32,7 +33,7 @@
|
|||
timeout = nil;
|
||||
}
|
||||
if (eventType == CD_UNDEFINED) {
|
||||
ms_error("Incorrect usage of CallDelegate/ActionSheet: eventType must be set");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Incorrect usage of CallDelegate/ActionSheet: eventType must be set"];
|
||||
}
|
||||
[delegate actionSheet:actionSheet ofType:eventType clickedButtonAtIndex:buttonIndex withUserDatas:call];
|
||||
}
|
||||
|
|
@ -47,7 +48,7 @@
|
|||
if (buttonIndex != actionSheet.cancelButtonIndex) return;
|
||||
|
||||
if (eventType == CD_UNDEFINED) {
|
||||
ms_error("Incorrect usage of CallDelegate/ActionSheet: eventType must be set");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Incorrect usage of CallDelegate/ActionSheet: eventType must be set"];
|
||||
}
|
||||
|
||||
[delegate actionSheet:actionSheet ofType:eventType clickedButtonAtIndex:buttonIndex withUserDatas:call];
|
||||
|
|
@ -59,7 +60,7 @@
|
|||
timeout = nil;
|
||||
}
|
||||
if (eventType == CD_UNDEFINED) {
|
||||
ms_error("Incorrect usage of CallDelegate/ActionSheet: eventType must be set");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Incorrect usage of CallDelegate/ActionSheet: eventType must be set"];
|
||||
}
|
||||
[delegate actionSheet:actionSheet ofType:eventType clickedButtonAtIndex:actionSheet.cancelButtonIndex withUserDatas:call];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
if(contact == NULL)
|
||||
return;
|
||||
|
||||
NSLog(@"Load data from contact %p", contact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Load data from contact %p", contact];
|
||||
// Phone numbers
|
||||
{
|
||||
ABMultiValueRef lMap = ABRecordCopyValue(contact, kABPersonPhoneProperty);
|
||||
|
|
@ -242,7 +242,7 @@
|
|||
[entry release];
|
||||
} else {
|
||||
added = false;
|
||||
NSLog(@"Can't add entry: %@", [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerLog format:@"Can't add entry: %@", [error localizedDescription]];
|
||||
}
|
||||
CFRelease(lMap);
|
||||
} else if(section == 1) {
|
||||
|
|
@ -270,7 +270,7 @@
|
|||
[entry release];
|
||||
} else {
|
||||
added = false;
|
||||
NSLog(@"Can't add entry: %@", [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Can't add entry: %@", [error localizedDescription]];
|
||||
}
|
||||
CFRelease(lMap);
|
||||
}
|
||||
|
|
@ -670,7 +670,7 @@
|
|||
}
|
||||
[cell.detailTextLabel setText:value];
|
||||
} else {
|
||||
NSLog(@"Not valid UIEditableTableViewCell");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Not valid UIEditableTableViewCell"];
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
NSLog(@"Reset data to contact %p", contact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Reset data to contact %p", contact];
|
||||
ABRecordID recordID = ABRecordGetRecordID(contact);
|
||||
ABAddressBookRevert(addressBook);
|
||||
contact = ABAddressBookGetPersonWithRecordID(addressBook, recordID);
|
||||
|
|
@ -91,9 +91,9 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
NSError* error = NULL;
|
||||
ABAddressBookRemoveRecord(addressBook, contact, (CFErrorRef*)&error);
|
||||
if (error != NULL) {
|
||||
NSLog(@"Remove contact %p: Fail(%@)", contact, [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Remove contact %p: Fail(%@)", contact, [error localizedDescription]];
|
||||
} else {
|
||||
NSLog(@"Remove contact %p: Success!", contact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Remove contact %p: Success!", contact];
|
||||
}
|
||||
contact = NULL;
|
||||
|
||||
|
|
@ -103,9 +103,9 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
ABAddressBookSave(addressBook, (CFErrorRef*)&error);
|
||||
inhibUpdate = FALSE;
|
||||
if (error != NULL) {
|
||||
NSLog(@"Save AddressBook: Fail(%@)", [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Save AddressBook: Fail(%@)", [error localizedDescription]];
|
||||
} else {
|
||||
NSLog(@"Save AddressBook: Success!");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Save AddressBook: Success!"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -121,9 +121,9 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
if(ABRecordGetRecordID(contact) == kABRecordInvalidID) {
|
||||
ABAddressBookAddRecord(addressBook, contact, (CFErrorRef*)&error);
|
||||
if (error != NULL) {
|
||||
NSLog(@"Add contact %p: Fail(%@)", contact, [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Add contact %p: Fail(%@)", contact, [error localizedDescription]];
|
||||
} else {
|
||||
NSLog(@"Add contact %p: Success!", contact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Add contact %p: Success!", contact];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -133,14 +133,14 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
ABAddressBookSave(addressBook, (CFErrorRef*)&error);
|
||||
inhibUpdate = FALSE;
|
||||
if (error != NULL) {
|
||||
NSLog(@"Save AddressBook: Fail(%@)", [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Save AddressBook: Fail(%@)", [error localizedDescription]];
|
||||
} else {
|
||||
NSLog(@"Save AddressBook: Success!");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Save AddressBook: Success!"];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)newContact {
|
||||
NSLog(@"New contact");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"New contact"];
|
||||
self->contact = ABPersonCreate();
|
||||
[tableController setContact:self->contact];
|
||||
[self enableEdit:FALSE];
|
||||
|
|
@ -148,7 +148,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
}
|
||||
|
||||
- (void)newContact:(NSString*)address {
|
||||
NSLog(@"New contact");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"New contact"];
|
||||
self->contact = ABPersonCreate();
|
||||
[tableController setContact:self->contact];
|
||||
[tableController addSipField:address];
|
||||
|
|
@ -157,7 +157,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
}
|
||||
|
||||
- (void)editContact:(ABRecordRef)acontact {
|
||||
NSLog(@"Edit contact %p", acontact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Edit contact %p", acontact];
|
||||
self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact));
|
||||
[tableController setContact:self->contact];
|
||||
[self enableEdit:FALSE];
|
||||
|
|
@ -165,7 +165,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
}
|
||||
|
||||
- (void)editContact:(ABRecordRef)acontact address:(NSString*)address {
|
||||
NSLog(@"Edit contact %p", acontact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Edit contact %p", acontact];
|
||||
self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact));
|
||||
[tableController setContact:self->contact];
|
||||
[tableController addSipField:address];
|
||||
|
|
@ -177,7 +177,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
|
|||
#pragma mark - Property Functions
|
||||
|
||||
- (void)setContact:(ABRecordRef)acontact {
|
||||
NSLog(@"set contact %p", acontact);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Set contact %p", acontact];
|
||||
self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact));
|
||||
[tableController setContact:self->contact];
|
||||
[self disableEdit:FALSE];
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
#pragma mark -
|
||||
|
||||
- (void)reloadData {
|
||||
NSLog(@"Load contact list");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Load contact list"];
|
||||
@synchronized (addressBookMap) {
|
||||
|
||||
// Reset Address book
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ typedef enum _HistoryView {
|
|||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
[self changeView: History_All];
|
||||
|
||||
// Set selected+over background: IB lack !
|
||||
[linphoneButton setImage:[UIImage imageNamed:@"contacts_linphone_selected.png"]
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ enum TableSection {
|
|||
}
|
||||
|
||||
if (calls == 0) {
|
||||
ms_error("Cannot find call with index %d (in conf: %d)", index, conf);
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Cannot find call with index %d (in conf: %d)", index, conf];
|
||||
return nil;
|
||||
} else {
|
||||
return (LinphoneCall*)calls->data;
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ static void hideSpinner(LinphoneCall* call, void* user_data) {
|
|||
linphone_core_accept_call_update([LinphoneManager getLc], call, paramsCopy);
|
||||
} else {
|
||||
// decline video
|
||||
ms_message("User declined video proposal");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"User declined video proposal"];
|
||||
linphone_core_accept_call_update([LinphoneManager getLc], call, NULL);
|
||||
}
|
||||
linphone_call_params_destroy(paramsCopy);
|
||||
|
|
@ -477,7 +477,7 @@ static void hideSpinner(LinphoneCall* call, void* user_data) {
|
|||
break;
|
||||
}
|
||||
default:
|
||||
ms_error("Unhandled CallDelegate event of type: %d received - ignoring", type);
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Unhandled CallDelegate event of type: %d received - ignoring", type];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -264,6 +264,14 @@
|
|||
</object>
|
||||
<int key="connectionID">169</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">preview</string>
|
||||
<reference key="source" ref="972197710"/>
|
||||
<reference key="destination" ref="673568144"/>
|
||||
</object>
|
||||
<int key="connectionID">172</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">view</string>
|
||||
|
|
@ -413,7 +421,7 @@
|
|||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">171</int>
|
||||
<int key="maxID">172</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
|
|
|
|||
|
|
@ -47,14 +47,14 @@ int __aeabi_idiv(int a, int b) {
|
|||
|
||||
int callCount = [ct.currentCalls count];
|
||||
if (!callCount) {
|
||||
NSLog(@"No GSM call -> enabling SIP calls");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"No GSM call -> enabling SIP calls"];
|
||||
linphone_core_set_max_calls([LinphoneManager getLc], 3);
|
||||
} else {
|
||||
NSLog(@"%d GSM call(s) -> disabling SIP calls", callCount);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"%d GSM call(s) -> disabling SIP calls", callCount];
|
||||
/* pause current call, if any */
|
||||
LinphoneCall* call = linphone_core_get_current_call([LinphoneManager getLc]);
|
||||
if (call) {
|
||||
NSLog(@"Pausing SIP call");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Pausing SIP call"];
|
||||
linphone_core_pause_call([LinphoneManager getLc], call);
|
||||
}
|
||||
linphone_core_set_max_calls([LinphoneManager getLc], 0);
|
||||
|
|
@ -134,7 +134,7 @@ int __aeabi_idiv(int a, int b) {
|
|||
|
||||
- (void)loadDefaultSettings:(NSDictionary *) appDefaults {
|
||||
for(NSString* key in appDefaults){
|
||||
NSLog(@"Overload %@ to in app settings.", key);
|
||||
[LinphoneLogger log:LinphoneLoggerLog format:@"Overload %@ to in app settings.", key];
|
||||
[[[LinphoneManager instance] settingsStore] setObject:[appDefaults objectForKey:key] forKey:key];
|
||||
}
|
||||
[[[LinphoneManager instance] settingsStore] synchronize];
|
||||
|
|
@ -212,7 +212,7 @@ int __aeabi_idiv(int a, int b) {
|
|||
LinphoneCall* call;
|
||||
[(NSData*)([notification.userInfo objectForKey:@"call"]) getBytes:&call];
|
||||
if (!call) {
|
||||
ms_warning("Local notification received with nil call");
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Local notification received with nil call"];
|
||||
return;
|
||||
}
|
||||
linphone_core_accept_call([LinphoneManager getLc], call);
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
|
|||
NSUserDefaults *oldconfig=[NSUserDefaults standardUserDefaults];
|
||||
NSArray *allkeys=[[oldconfig dictionaryRepresentation] allKeys];
|
||||
for(NSString* key in allkeys){
|
||||
NSLog(@"Migrating old config item %@ to in app settings.",key);
|
||||
[LinphoneLogger log:LinphoneLoggerLog format:@"Migrating old config item %@ to in app settings.",key];
|
||||
[self setObject:[oldconfig objectForKey:key] forKey:key];
|
||||
}
|
||||
[self synchronize];
|
||||
NSLog(@"Migration done");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Migration done"];
|
||||
}
|
||||
|
||||
- (id)init {
|
||||
|
|
@ -82,8 +82,8 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
|
|||
bool_t value = linphone_core_payload_type_enabled(lc,pt);
|
||||
[self setBool:value forKey: pref];
|
||||
}else{
|
||||
ms_warning("Codec %s/%i supported by core is not shown in iOS app config view.",
|
||||
pt->mime_type,pt->clock_rate);
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Codec %s/%i supported by core is not shown in iOS app config view.",
|
||||
pt->mime_type,pt->clock_rate];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -230,7 +230,7 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
|
|||
LCSipTransports transportValue={0};
|
||||
if (transport!=nil) {
|
||||
if (linphone_core_get_sip_transports(lc, &transportValue)) {
|
||||
ms_error("cannot get current transport");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"cannot get current transport"];
|
||||
}
|
||||
// Only one port can be set at one time, the others's value is 0
|
||||
if ([transport isEqualToString:@"tcp"]) {
|
||||
|
|
@ -246,10 +246,10 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
|
|||
transportValue.tcp_port=0;
|
||||
transportValue.udp_port=0;
|
||||
} else {
|
||||
ms_error("unexpected transport [%s]",[transport cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"unexpected transport [%s]",[transport cStringUsingEncoding:[NSString defaultCStringEncoding]]];
|
||||
}
|
||||
if (linphone_core_set_sip_transports(lc, &transportValue)) {
|
||||
ms_error("cannot set transport");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"cannot set transport"];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#import "IASKSettingsStore.h"
|
||||
#import "IASKAppSettingsViewController.h"
|
||||
#import "FastAddressBook.h"
|
||||
#import "Utils.h"
|
||||
|
||||
#include "linphonecore.h"
|
||||
|
||||
|
|
@ -38,8 +39,6 @@ typedef enum _Connectivity {
|
|||
,none
|
||||
} Connectivity;
|
||||
|
||||
@class FastAddressBook;
|
||||
|
||||
/* Application specific call context */
|
||||
typedef struct _CallContext {
|
||||
LinphoneCall* call;
|
||||
|
|
@ -63,7 +62,6 @@ typedef struct _LinphoneCallAppData {
|
|||
|
||||
@private
|
||||
NSTimer* mIterateTimer;
|
||||
id<LogView> mLogView;
|
||||
bool isbackgroundModeEnabled;
|
||||
|
||||
Connectivity connectivity;
|
||||
|
|
@ -82,28 +80,25 @@ typedef struct _LinphoneCallAppData {
|
|||
+ (LinphoneCore*) getLc;
|
||||
+ (BOOL)isLcReady;
|
||||
+ (BOOL)runningOnIpad;
|
||||
- (void)registerLogView:(id<LogView>) view;
|
||||
|
||||
+ (BOOL)isNotIphone3G;
|
||||
+ (NSString *)getPreferenceForCodec: (const char*) name withRate: (int) rate;
|
||||
+ (BOOL)codecIsSupported:(NSString *) prefName;
|
||||
|
||||
|
||||
- (void)call:(NSString *)address displayName:(NSString*)displayName transfer:(BOOL)transfer;
|
||||
|
||||
- (void)startLibLinphone;
|
||||
- (BOOL)isNotIphone3G;
|
||||
- (void)destroyLibLinphone;
|
||||
|
||||
- (BOOL)enterBackgroundMode;
|
||||
- (void)becomeActive;
|
||||
- (void)kickOffNetworkConnection;
|
||||
|
||||
- (void)kickOffNetworkConnection;
|
||||
- (void)setupNetworkReachabilityCallback;
|
||||
|
||||
- (void)refreshRegisters;
|
||||
|
||||
- (void)enableSpeaker:(BOOL)enable;
|
||||
- (BOOL)isSpeakerEnabled;
|
||||
|
||||
- (void)call:(NSString *)address displayName:(NSString*)displayName transfer:(BOOL)transfer;
|
||||
|
||||
@property (nonatomic, retain) id<IASKSettingsStore> settingsStore;
|
||||
@property (readonly) FastAddressBook* fastAddressBook;
|
||||
@property Connectivity connectivity;
|
||||
|
|
|
|||
|
|
@ -110,6 +110,41 @@ struct codec_name_pref_table codec_pref_table[]={
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
+ (BOOL)runningOnIpad {
|
||||
#ifdef UI_USER_INTERFACE_IDIOM
|
||||
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
|
||||
#else
|
||||
return NO;
|
||||
#endif
|
||||
}
|
||||
|
||||
+ (BOOL)isNotIphone3G
|
||||
{
|
||||
static BOOL done=FALSE;
|
||||
static BOOL result;
|
||||
if (!done){
|
||||
size_t size;
|
||||
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||
char *machine = malloc(size);
|
||||
sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||
NSString *platform = [[NSString alloc ] initWithUTF8String:machine];
|
||||
free(machine);
|
||||
|
||||
result = ![platform isEqualToString:@"iPhone1,2"];
|
||||
|
||||
[platform release];
|
||||
done=TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+ (LinphoneManager*)instance {
|
||||
return theLinphoneManager;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Lifecycle Functions
|
||||
|
||||
- (id)init {
|
||||
assert (!theLinphoneManager);
|
||||
if ((self = [super init])) {
|
||||
|
|
@ -129,6 +164,9 @@ struct codec_name_pref_table codec_pref_table[]={
|
|||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Database Functions
|
||||
|
||||
- (void)openDatabase {
|
||||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
NSString *documentsPath = [paths objectAtIndex:0];
|
||||
|
|
@ -139,32 +177,82 @@ struct codec_name_pref_table codec_pref_table[]={
|
|||
NSError *error = nil;
|
||||
//[fileManager removeItemAtPath:databaseDocumentPath error:&error]; //TODO REMOVE
|
||||
if ([fileManager fileExistsAtPath:databaseDocumentPath] == NO) {
|
||||
NSLog(@"Create sqlite 3 database");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Create sqlite3 database"];
|
||||
NSString *resourceDocumentPath = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"];
|
||||
[fileManager copyItemAtPath:resourceDocumentPath toPath:databaseDocumentPath error:&error];
|
||||
if(error != nil) {
|
||||
NSLog(@"Can't copy database: %@", [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Can't copy database: %@", [error localizedDescription]];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(sqlite3_open([databaseDocumentPath UTF8String], &database) != SQLITE_OK) {
|
||||
NSLog(@"Can't open \"%@\" sqlite3 database.", databaseDocumentPath);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Can't open \"%@\" sqlite3 database.", databaseDocumentPath];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)closeDatabase {
|
||||
if(database != NULL) {
|
||||
if(sqlite3_close(database) != SQLITE_OK) {
|
||||
NSLog(@"Can't close sqlite3 database.");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't close sqlite3 database."];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+ (LinphoneManager*)instance {
|
||||
return theLinphoneManager;
|
||||
|
||||
#pragma mark - Linphone Core Functions
|
||||
|
||||
+ (LinphoneCore*)getLc {
|
||||
if (theLinphoneCore==nil) {
|
||||
@throw([NSException exceptionWithName:@"LinphoneCoreException" reason:@"Linphone core not initialized yet" userInfo:nil]);
|
||||
}
|
||||
return theLinphoneCore;
|
||||
}
|
||||
|
||||
+ (BOOL)isLcReady {
|
||||
return theLinphoneCore != nil;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Logs Functions
|
||||
|
||||
//generic log handler for debug version
|
||||
void linphone_iphone_log_handler(int lev, const char *fmt, va_list args){
|
||||
NSString* format = [NSString stringWithUTF8String:fmt];
|
||||
NSLogv(format, args);
|
||||
NSString* formatedString = [[NSString alloc] initWithFormat:format arguments:args];
|
||||
//[[LinphoneManager instance] addLog:formatedString];
|
||||
[formatedString release];
|
||||
}
|
||||
|
||||
//Error/warning log handler
|
||||
static void linphone_iphone_log(struct _LinphoneCore * lc, const char * message) {
|
||||
NSString* log = [NSString stringWithCString:message encoding:[NSString defaultCStringEncoding]];
|
||||
NSLog(log, NULL);
|
||||
//[[LinphoneManager instance] addLog:log];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Display Status Functions
|
||||
|
||||
- (void)displayStatus:(NSString*) message {
|
||||
// Post event
|
||||
NSDictionary* dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
message, @"message",
|
||||
nil] autorelease];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"LinphoneDisplayStatus" object:self userInfo:dict];
|
||||
}
|
||||
|
||||
|
||||
static void linphone_iphone_display_status(struct _LinphoneCore * lc, const char * message) {
|
||||
NSString* status = [[NSString alloc] initWithCString:message encoding:[NSString defaultCStringEncoding]];
|
||||
[(LinphoneManager*)linphone_core_get_user_data(lc) displayStatus:status];
|
||||
[status release];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Call State Functions
|
||||
|
||||
- (void)onCall:(LinphoneCall*)call StateChanged:(LinphoneCallState)state withMessage:(const char *)message {
|
||||
// Handling wrapper
|
||||
if(state == LinphoneCallReleased) {
|
||||
|
|
@ -187,88 +275,27 @@ struct codec_name_pref_table codec_pref_table[]={
|
|||
|
||||
// Post event
|
||||
NSDictionary* dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSValue valueWithPointer:call], @"call",
|
||||
[NSNumber numberWithInt:state], @"state",
|
||||
[NSString stringWithUTF8String:message], @"message", nil] autorelease];
|
||||
[NSValue valueWithPointer:call], @"call",
|
||||
[NSNumber numberWithInt:state], @"state",
|
||||
[NSString stringWithUTF8String:message], @"message", nil] autorelease];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"LinphoneCallUpdate" object:self userInfo:dict];
|
||||
}
|
||||
|
||||
+ (LinphoneCore*)getLc {
|
||||
if (theLinphoneCore==nil) {
|
||||
@throw([NSException exceptionWithName:@"LinphoneCoreException" reason:@"Linphone core not initialized yet" userInfo:nil]);
|
||||
}
|
||||
return theLinphoneCore;
|
||||
}
|
||||
|
||||
+ (BOOL)isLcReady {
|
||||
return theLinphoneCore != nil;
|
||||
}
|
||||
|
||||
- (void)addLog:(NSString*) log {
|
||||
[mLogView addLog:log];
|
||||
}
|
||||
|
||||
- (void)displayStatus:(NSString*) message {
|
||||
// Post event
|
||||
NSDictionary* dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
message, @"message",
|
||||
nil] autorelease];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"LinphoneDisplayStatus" object:self userInfo:dict];
|
||||
}
|
||||
|
||||
//generic log handler for debug version
|
||||
void linphone_iphone_log_handler(int lev, const char *fmt, va_list args){
|
||||
NSString* format = [[NSString alloc] initWithCString:fmt encoding:[NSString defaultCStringEncoding]];
|
||||
NSLogv(format,args);
|
||||
NSString* formatedString = [[NSString alloc] initWithFormat:format arguments:args];
|
||||
[[LinphoneManager instance] addLog:formatedString];
|
||||
[format release];
|
||||
[formatedString release];
|
||||
}
|
||||
|
||||
//Error/warning log handler
|
||||
static void linphone_iphone_log(struct _LinphoneCore * lc, const char * message) {
|
||||
NSString* log = [NSString stringWithCString:message encoding:[NSString defaultCStringEncoding]];
|
||||
NSLog(log,NULL);
|
||||
[[LinphoneManager instance]addLog:log];
|
||||
}
|
||||
//status
|
||||
static void linphone_iphone_display_status(struct _LinphoneCore * lc, const char * message) {
|
||||
NSString* status = [[NSString alloc] initWithCString:message encoding:[NSString defaultCStringEncoding]];
|
||||
[(LinphoneManager*)linphone_core_get_user_data(lc) displayStatus:status];
|
||||
[status release];
|
||||
}
|
||||
|
||||
static void linphone_iphone_call_state(LinphoneCore *lc, LinphoneCall* call, LinphoneCallState state,const char* message) {
|
||||
/*LinphoneCallIdle,
|
||||
LinphoneCallIncomingReceived,
|
||||
LinphoneCallOutgoingInit,
|
||||
LinphoneCallOutgoingProgress,
|
||||
LinphoneCallOutgoingRinging,
|
||||
LinphoneCallOutgoingEarlyMedia,
|
||||
LinphoneCallConnected,
|
||||
LinphoneCallStreamsRunning,
|
||||
LinphoneCallPausing,
|
||||
LinphoneCallPaused,
|
||||
LinphoneCallResuming,
|
||||
LinphoneCallRefered,
|
||||
LinphoneCallError,
|
||||
LinphoneCallEnd,
|
||||
LinphoneCallPausedByRemote
|
||||
*/
|
||||
[(LinphoneManager*)linphone_core_get_user_data(lc) onCall:call StateChanged: state withMessage: message];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Transfert State Functions
|
||||
|
||||
static void linphone_iphone_transfer_state_changed(LinphoneCore* lc, LinphoneCall* call, LinphoneCallState state) {
|
||||
/*
|
||||
LinhoneCallOutgoingProgress -> SalReferTrying
|
||||
LinphoneCallConnected -> SalReferSuccess
|
||||
LinphoneCallError -> SalReferFailed | *
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Registration State Functions
|
||||
|
||||
-(void) onRegister:(LinphoneCore *)lc cfg:(LinphoneProxyConfig*) cfg state:(LinphoneRegistrationState) state message:(const char*) message {
|
||||
ms_warning("NEW REGISTRATION STATE: '%s' (message: '%s')", linphone_registration_state_to_string(state), message);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"NEW REGISTRATION STATE: '%s' (message: '%s')", linphone_registration_state_to_string(state), message];
|
||||
|
||||
// Post event
|
||||
NSDictionary* dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
|
|
@ -283,6 +310,9 @@ static void linphone_iphone_registration_state(LinphoneCore *lc, LinphoneProxyCo
|
|||
[(LinphoneManager*)linphone_core_get_user_data(lc) onRegister:lc cfg:cfg state:state message:message];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Text Received Functions
|
||||
|
||||
- (void)onTextReceived:(LinphoneCore *)lc room:(LinphoneChatRoom *)room from:(const LinphoneAddress *)from message:(const char *)message {
|
||||
|
||||
// Save message in database
|
||||
|
|
@ -307,21 +337,8 @@ static void linphone_iphone_text_received(LinphoneCore *lc, LinphoneChatRoom *ro
|
|||
[(LinphoneManager*)linphone_core_get_user_data(lc) onTextReceived:lc room:room from:from message:message];
|
||||
}
|
||||
|
||||
static LinphoneCoreVTable linphonec_vtable = {
|
||||
.show =NULL,
|
||||
.call_state_changed =(LinphoneCallStateCb)linphone_iphone_call_state,
|
||||
.registration_state_changed = linphone_iphone_registration_state,
|
||||
.notify_recv = NULL,
|
||||
.new_subscription_request = NULL,
|
||||
.auth_info_requested = NULL,
|
||||
.display_status = linphone_iphone_display_status,
|
||||
.display_message=linphone_iphone_log,
|
||||
.display_warning=linphone_iphone_log,
|
||||
.display_url=NULL,
|
||||
.text_received=linphone_iphone_text_received,
|
||||
.dtmf_received=NULL,
|
||||
.transfer_state_changed=linphone_iphone_transfer_state_changed
|
||||
};
|
||||
|
||||
#pragma mark - Network Functions
|
||||
|
||||
- (void)kickOffNetworkConnection {
|
||||
/*start a new thread to avoid blocking the main ui in case of peer host failure*/
|
||||
|
|
@ -338,24 +355,24 @@ static LinphoneCoreVTable linphonec_vtable = {
|
|||
}
|
||||
|
||||
static void showNetworkFlags(SCNetworkReachabilityFlags flags){
|
||||
ms_message("Network connection flags:");
|
||||
if (flags==0) ms_message("no flags.");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Network connection flags:"];
|
||||
if (flags==0) [LinphoneLogger logc:LinphoneLoggerLog format:"no flags."];
|
||||
if (flags & kSCNetworkReachabilityFlagsTransientConnection)
|
||||
ms_message("kSCNetworkReachabilityFlagsTransientConnection");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsTransientConnection"];
|
||||
if (flags & kSCNetworkReachabilityFlagsReachable)
|
||||
ms_message("kSCNetworkReachabilityFlagsReachable");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsReachable"];
|
||||
if (flags & kSCNetworkReachabilityFlagsConnectionRequired)
|
||||
ms_message("kSCNetworkReachabilityFlagsConnectionRequired");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsConnectionRequired"];
|
||||
if (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic)
|
||||
ms_message("kSCNetworkReachabilityFlagsConnectionOnTraffic");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsConnectionOnTraffic"];
|
||||
if (flags & kSCNetworkReachabilityFlagsConnectionOnDemand)
|
||||
ms_message("kSCNetworkReachabilityFlagsConnectionOnDemand");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsConnectionOnDemand"];
|
||||
if (flags & kSCNetworkReachabilityFlagsIsLocalAddress)
|
||||
ms_message("kSCNetworkReachabilityFlagsIsLocalAddress");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsIsLocalAddress"];
|
||||
if (flags & kSCNetworkReachabilityFlagsIsDirect)
|
||||
ms_message("kSCNetworkReachabilityFlagsIsDirect");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsIsDirect"];
|
||||
if (flags & kSCNetworkReachabilityFlagsIsWWAN)
|
||||
ms_message("kSCNetworkReachabilityFlagsIsWWAN");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"kSCNetworkReachabilityFlagsIsWWAN"];
|
||||
}
|
||||
|
||||
void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* nilCtx){
|
||||
|
|
@ -399,7 +416,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
linphone_proxy_config_expires(proxy, 0);
|
||||
}
|
||||
linphone_core_set_network_reachable([LinphoneManager getLc],true);
|
||||
ms_message("Network connectivity changed to type [%s]",(newConnectivity==wifi?"wifi":"wwan"));
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Network connectivity changed to type [%s]",(newConnectivity==wifi?"wifi":"wwan")];
|
||||
}
|
||||
lLinphoneMgr.connectivity=newConnectivity;
|
||||
}
|
||||
|
|
@ -409,111 +426,12 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
}
|
||||
}
|
||||
|
||||
- (BOOL)isNotIphone3G
|
||||
{
|
||||
static BOOL done=FALSE;
|
||||
static BOOL result;
|
||||
if (!done){
|
||||
size_t size;
|
||||
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||
char *machine = malloc(size);
|
||||
sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||
NSString *platform = [[NSString alloc ] initWithUTF8String:machine];
|
||||
free(machine);
|
||||
|
||||
result = ![platform isEqualToString:@"iPhone1,2"];
|
||||
|
||||
[platform release];
|
||||
done=TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// no proxy configured alert
|
||||
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
|
||||
if (buttonIndex == 1) {
|
||||
[[[LinphoneManager instance] settingsStore] setBool:true forKey:@"check_config_disable_preference"];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)destroyLibLinphone {
|
||||
[mIterateTimer invalidate];
|
||||
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
|
||||
[audioSession setDelegate:nil];
|
||||
if (theLinphoneCore != nil) { //just in case application terminate before linphone core initialization
|
||||
NSLog(@"Destroy linphonecore");
|
||||
linphone_core_destroy(theLinphoneCore);
|
||||
theLinphoneCore = nil;
|
||||
SCNetworkReachabilityUnscheduleFromRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
if (proxyReachability)
|
||||
CFRelease(proxyReachability);
|
||||
proxyReachability=nil;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//**********************BG mode management*************************///////////
|
||||
- (BOOL)enterBackgroundMode {
|
||||
LinphoneProxyConfig* proxyCfg;
|
||||
linphone_core_get_default_proxy(theLinphoneCore, &proxyCfg);
|
||||
linphone_core_stop_dtmf_stream(theLinphoneCore);
|
||||
|
||||
if (proxyCfg && [settingsStore 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 ) {
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
usleep(100000);
|
||||
}
|
||||
//register keepalive
|
||||
if ([[UIApplication sharedApplication] setKeepAliveTimeout:600/*(NSTimeInterval)linphone_proxy_config_get_expires(proxyCfg)*/
|
||||
handler:^{
|
||||
ms_warning("keepalive handler");
|
||||
if (theLinphoneCore == nil) {
|
||||
ms_warning("It seems that Linphone BG mode was deactivated, just skipping");
|
||||
return;
|
||||
}
|
||||
//kick up network cnx, just in case
|
||||
[self kickOffNetworkConnection];
|
||||
[self refreshRegisters];
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
}
|
||||
]) {
|
||||
|
||||
|
||||
ms_message("keepalive handler succesfully registered");
|
||||
} else {
|
||||
ms_warning("keepalive handler cannot be registered");
|
||||
}
|
||||
LCSipTransports transportValue;
|
||||
if (linphone_core_get_sip_transports(theLinphoneCore, &transportValue)) {
|
||||
ms_error("cannot get current transport");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
else {
|
||||
ms_message("Entering lite bg mode");
|
||||
[self destroyLibLinphone];
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
//scheduling loop
|
||||
- (void)iterate {
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
}
|
||||
|
||||
- (void)setupNetworkReachabilityCallback {
|
||||
SCNetworkReachabilityContext *ctx=NULL;
|
||||
const char *nodeName="linphone.org";
|
||||
|
||||
if (proxyReachability) {
|
||||
ms_message("Cancelling old network reachability");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Cancelling old network reachability"];
|
||||
SCNetworkReachabilityUnscheduleFromRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
CFRelease(proxyReachability);
|
||||
proxyReachability = nil;
|
||||
|
|
@ -524,25 +442,45 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
//initial state is network off should be done as soon as possible
|
||||
SCNetworkReachabilityFlags flags;
|
||||
if (!SCNetworkReachabilityGetFlags(proxyReachability, &flags)) {
|
||||
ms_error("Cannot get reachability flags: %s", SCErrorString(SCError()));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Cannot get reachability flags: %s", SCErrorString(SCError())];
|
||||
return;
|
||||
}
|
||||
networkReachabilityCallBack(proxyReachability, flags, ctx ? ctx->info : 0);
|
||||
|
||||
if (!SCNetworkReachabilitySetCallback(proxyReachability, (SCNetworkReachabilityCallBack)networkReachabilityCallBack, ctx)){
|
||||
ms_error("Cannot register reachability cb: %s", SCErrorString(SCError()));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Cannot register reachability cb: %s", SCErrorString(SCError())];
|
||||
return;
|
||||
}
|
||||
if(!SCNetworkReachabilityScheduleWithRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)){
|
||||
ms_error("Cannot register schedule reachability cb: %s", SCErrorString(SCError()));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Cannot register schedule reachability cb: %s", SCErrorString(SCError())];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************
|
||||
*lib linphone init method
|
||||
*/
|
||||
#pragma mark -
|
||||
|
||||
static LinphoneCoreVTable linphonec_vtable = {
|
||||
.show =NULL,
|
||||
.call_state_changed =(LinphoneCallStateCb)linphone_iphone_call_state,
|
||||
.registration_state_changed = linphone_iphone_registration_state,
|
||||
.notify_recv = NULL,
|
||||
.new_subscription_request = NULL,
|
||||
.auth_info_requested = NULL,
|
||||
.display_status = linphone_iphone_display_status,
|
||||
.display_message=linphone_iphone_log,
|
||||
.display_warning=linphone_iphone_log,
|
||||
.display_url=NULL,
|
||||
.text_received=linphone_iphone_text_received,
|
||||
.dtmf_received=NULL,
|
||||
.transfer_state_changed=linphone_iphone_transfer_state_changed
|
||||
};
|
||||
|
||||
//scheduling loop
|
||||
- (void)iterate {
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
}
|
||||
|
||||
- (void)startLibLinphone {
|
||||
|
||||
//get default config from bundle
|
||||
|
|
@ -572,7 +510,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
#endif
|
||||
/* Initialize linphone core*/
|
||||
|
||||
NSLog(@"Create linphonecore");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Create linphonecore"];
|
||||
theLinphoneCore = linphone_core_new (&linphonec_vtable
|
||||
, [confiFileName cStringUsingEncoding:[NSString defaultCStringEncoding]]
|
||||
, [factoryConfig cStringUsingEncoding:[NSString defaultCStringEncoding]]
|
||||
|
|
@ -617,7 +555,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
NSString* path = [myBundle pathForResource:@"nowebcamCIF" ofType:@"jpg"];
|
||||
if (path) {
|
||||
const char* imagePath = [path cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
ms_message("Using '%s' as source image for no webcam", imagePath);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Using '%s' as source image for no webcam", imagePath];
|
||||
linphone_core_set_static_picture(theLinphoneCore, imagePath);
|
||||
}
|
||||
|
||||
|
|
@ -639,11 +577,11 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
NSUInteger cpucount = [[NSProcessInfo processInfo] processorCount];
|
||||
ms_set_cpu_count(cpucount);
|
||||
|
||||
if (![self isNotIphone3G]){
|
||||
if (![LinphoneManager isNotIphone3G]){
|
||||
PayloadType *pt=linphone_core_find_payload_type(theLinphoneCore,"SILK",24000);
|
||||
if (pt) {
|
||||
linphone_core_enable_payload_type(theLinphoneCore,pt,FALSE);
|
||||
ms_warning("SILK/24000 and video disabled on old iPhone 3G");
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"SILK/24000 and video disabled on old iPhone 3G"];
|
||||
}
|
||||
linphone_core_enable_video(theLinphoneCore, FALSE, FALSE);
|
||||
}
|
||||
|
|
@ -655,9 +593,9 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
|
||||
settingsStore = [[LinphoneCoreSettingsStore alloc] init];
|
||||
|
||||
ms_warning("Linphone [%s] started on [%s]"
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Linphone [%s] started on [%s]"
|
||||
,linphone_core_get_version()
|
||||
,[[UIDevice currentDevice].model cStringUsingEncoding:[NSString defaultCStringEncoding]] );
|
||||
,[[UIDevice currentDevice].model cStringUsingEncoding:[NSString defaultCStringEncoding]]];
|
||||
|
||||
if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]
|
||||
&& [UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
|
||||
|
|
@ -666,23 +604,71 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
}
|
||||
}
|
||||
|
||||
- (void)refreshRegisters{
|
||||
/*first check if network is available*/
|
||||
if (proxyReachability){
|
||||
SCNetworkReachabilityFlags flags=0;
|
||||
if (!SCNetworkReachabilityGetFlags(proxyReachability, &flags)) {
|
||||
ms_error("Cannot get reachability flags, re-creating reachability context.");
|
||||
[self setupNetworkReachabilityCallback];
|
||||
}else{
|
||||
networkReachabilityCallBack(proxyReachability, flags, 0);
|
||||
if (flags==0){
|
||||
/*workaround iOS bug: reachability API cease to work after some time.*/
|
||||
/*when flags==0, either we have no network, or the reachability object lies. To workaround, create a new one*/
|
||||
[self setupNetworkReachabilityCallback];
|
||||
}
|
||||
|
||||
- (void)destroyLibLinphone {
|
||||
[mIterateTimer invalidate];
|
||||
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
|
||||
[audioSession setDelegate:nil];
|
||||
if (theLinphoneCore != nil) { //just in case application terminate before linphone core initialization
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Destroy linphonecore"];
|
||||
linphone_core_destroy(theLinphoneCore);
|
||||
theLinphoneCore = nil;
|
||||
SCNetworkReachabilityUnscheduleFromRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
if (proxyReachability)
|
||||
CFRelease(proxyReachability);
|
||||
proxyReachability=nil;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (BOOL)enterBackgroundMode {
|
||||
LinphoneProxyConfig* proxyCfg;
|
||||
linphone_core_get_default_proxy(theLinphoneCore, &proxyCfg);
|
||||
linphone_core_stop_dtmf_stream(theLinphoneCore);
|
||||
|
||||
if (proxyCfg && [settingsStore 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 ) {
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
usleep(100000);
|
||||
}
|
||||
}else ms_error("No proxy reachability context created !");
|
||||
linphone_core_refresh_registers(theLinphoneCore);//just to make sure REGISTRATION is up to date
|
||||
//register keepalive
|
||||
if ([[UIApplication sharedApplication] setKeepAliveTimeout:600/*(NSTimeInterval)linphone_proxy_config_get_expires(proxyCfg)*/
|
||||
handler:^{
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"keepalive handler"];
|
||||
if (theLinphoneCore == nil) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"It seems that Linphone BG mode was deactivated, just skipping"];
|
||||
return;
|
||||
}
|
||||
//kick up network cnx, just in case
|
||||
[self kickOffNetworkConnection];
|
||||
[self refreshRegisters];
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
}
|
||||
]) {
|
||||
|
||||
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"keepalive handler succesfully registered"];
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"keepalive handler cannot be registered"];
|
||||
}
|
||||
LCSipTransports transportValue;
|
||||
if (linphone_core_get_sip_transports(theLinphoneCore, &transportValue)) {
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"cannot get current transport"];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
else {
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Entering lite bg mode"];
|
||||
[self destroyLibLinphone];
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)becomeActive {
|
||||
|
|
@ -697,23 +683,40 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
|
||||
}
|
||||
|
||||
- (void)registerLogView:(id<LogView>) view {
|
||||
mLogView = view;
|
||||
}
|
||||
|
||||
- (void)beginInterruption {
|
||||
LinphoneCall* c = linphone_core_get_current_call(theLinphoneCore);
|
||||
ms_message("Sound interruption detected!");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Sound interruption detected!"];
|
||||
if (c) {
|
||||
linphone_core_pause_call(theLinphoneCore, c);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)endInterruption {
|
||||
ms_message("Sound interruption ended!");
|
||||
//let the user resume the call manually.
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Sound interruption ended!"];
|
||||
}
|
||||
|
||||
- (void)refreshRegisters{
|
||||
/*first check if network is available*/
|
||||
if (proxyReachability){
|
||||
SCNetworkReachabilityFlags flags=0;
|
||||
if (!SCNetworkReachabilityGetFlags(proxyReachability, &flags)) {
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Cannot get reachability flags, re-creating reachability context."];
|
||||
[self setupNetworkReachabilityCallback];
|
||||
}else{
|
||||
networkReachabilityCallBack(proxyReachability, flags, 0);
|
||||
if (flags==0){
|
||||
/*workaround iOS bug: reachability API cease to work after some time.*/
|
||||
/*when flags==0, either we have no network, or the reachability object lies. To workaround, create a new one*/
|
||||
[self setupNetworkReachabilityCallback];
|
||||
}
|
||||
}
|
||||
}else [LinphoneLogger logc:LinphoneLoggerError format:"No proxy reachability context created !"];
|
||||
linphone_core_refresh_registers(theLinphoneCore);//just to make sure REGISTRATION is up to date
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Speaker Functions
|
||||
|
||||
- (void)enableSpeaker:(BOOL)enable {
|
||||
//redirect audio to speaker
|
||||
if(enable) {
|
||||
|
|
@ -735,20 +738,15 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
OSStatus lStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &lNewRouteSize, &lNewRoute);
|
||||
if (!lStatus && lNewRouteSize > 0) {
|
||||
NSString *route = (NSString *) lNewRoute;
|
||||
ms_message("Current audio route is [%s]", [route cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Current audio route is [%s]", [route cStringUsingEncoding:[NSString defaultCStringEncoding]]];
|
||||
return [route isEqualToString: @"Speaker"] || [route isEqualToString: @"SpeakerAndMicrophone"];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+ (BOOL)runningOnIpad {
|
||||
#ifdef UI_USER_INTERFACE_IDIOM
|
||||
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
|
||||
#endif
|
||||
return NO;
|
||||
}
|
||||
|
||||
#pragma mark - Call Functions
|
||||
|
||||
- (void)call:(NSString *)address displayName:(NSString*)displayName transfer:(BOOL)transfer {
|
||||
if (!linphone_core_is_network_reachabled(theLinphoneCore)) {
|
||||
|
|
@ -764,7 +762,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
|
||||
CTCallCenter* ct = [[CTCallCenter alloc] init];
|
||||
if ([ct.currentCalls count] > 0) {
|
||||
ms_error("GSM call in progress, cancelling outgoing SIP call request");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"GSM call in progress, cancelling outgoing SIP call request"];
|
||||
UIAlertView* error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Cannot make call",nil)
|
||||
message:NSLocalizedString(@"Please terminate GSM call",nil)
|
||||
delegate:nil
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
#import "UIBluetoothButton.h"
|
||||
#import <AudioToolbox/AudioToolbox.h>
|
||||
#import "Utils.h"
|
||||
|
||||
#include "linphonecore.h"
|
||||
|
||||
@implementation UIBluetoothButton
|
||||
#define check_auresult(au,method) \
|
||||
if (au!=0) ms_error("UIBluetoothButton error for %s: ret=%ld",method,au)
|
||||
if (au!=0) [LinphoneLogger logc:LinphoneLoggerError format:"UIBluetoothButton error for %s: ret=%ld",method,au]
|
||||
|
||||
-(void) onOn {
|
||||
- (void)onOn {
|
||||
//redirect audio to bluetooth
|
||||
|
||||
UInt32 size = sizeof(CFStringRef);
|
||||
|
|
@ -42,7 +44,8 @@ if (au!=0) ms_error("UIBluetoothButton error for %s: ret=%ld",method,au)
|
|||
check_auresult(result,"set kAudioSessionProperty_OverrideCategoryEnableBluetoothInput 1");
|
||||
|
||||
}
|
||||
-(void) onOff {
|
||||
|
||||
- (void)onOff {
|
||||
//redirect audio to bluetooth
|
||||
int allowBluetoothInput = 0;
|
||||
OSStatus result = AudioSessionSetProperty (
|
||||
|
|
@ -58,22 +61,13 @@ if (au!=0) ms_error("UIBluetoothButton error for %s: ret=%ld",method,au)
|
|||
|
||||
|
||||
}
|
||||
-(bool) isInitialStateOn {
|
||||
|
||||
- (bool)onUpdate {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect {
|
||||
// Drawing code.
|
||||
}
|
||||
*/
|
||||
|
||||
- (void)dealloc {
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -198,6 +198,10 @@
|
|||
#pragma mark -
|
||||
|
||||
- (void)callUpdate:(LinphoneCall*)call state:(LinphoneCallState)state {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update call bar: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
LinphoneCore* lc = [LinphoneManager getLc];
|
||||
|
||||
[speakerButton update];
|
||||
|
|
|
|||
|
|
@ -1278,7 +1278,7 @@
|
|||
<real value="0.0" key="21.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
|
||||
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="4.CustomClassName">UIPassView</string>
|
||||
<string key="4.CustomClassName">UITransparentView</string>
|
||||
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="59.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
|
|
@ -1378,7 +1378,7 @@
|
|||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="outlets">
|
||||
<string key="conferenceButton">UIButton</string>
|
||||
<string key="dialerButton">UIButton</string>
|
||||
<string key="dialerButton">UIToggleButton</string>
|
||||
<string key="eightButton">UIButton</string>
|
||||
<string key="fiveButton">UIButton</string>
|
||||
<string key="fourButton">UIButton</string>
|
||||
|
|
@ -1387,7 +1387,7 @@
|
|||
<string key="nineButton">UIButton</string>
|
||||
<string key="oneButton">UIButton</string>
|
||||
<string key="optionsAddButton">UIButton</string>
|
||||
<string key="optionsButton">UIButton</string>
|
||||
<string key="optionsButton">UIToggleButton</string>
|
||||
<string key="optionsTransferButton">UIButton</string>
|
||||
<string key="optionsView">UIView</string>
|
||||
<string key="padView">UIView</string>
|
||||
|
|
@ -1409,7 +1409,7 @@
|
|||
</object>
|
||||
<object class="IBToOneOutletInfo" key="dialerButton">
|
||||
<string key="name">dialerButton</string>
|
||||
<string key="candidateClassName">UIButton</string>
|
||||
<string key="candidateClassName">UIToggleButton</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="eightButton">
|
||||
<string key="name">eightButton</string>
|
||||
|
|
@ -1445,7 +1445,7 @@
|
|||
</object>
|
||||
<object class="IBToOneOutletInfo" key="optionsButton">
|
||||
<string key="name">optionsButton</string>
|
||||
<string key="candidateClassName">UIButton</string>
|
||||
<string key="candidateClassName">UIToggleButton</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="optionsTransferButton">
|
||||
<string key="name">optionsTransferButton</string>
|
||||
|
|
@ -1548,14 +1548,6 @@
|
|||
<string key="minorKey">./Classes/UIMicroButton.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIPassView</string>
|
||||
<string key="superclassName">UIView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/UIPassView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIPauseButton</string>
|
||||
<string key="superclassName">UIToggleButton</string>
|
||||
|
|
|
|||
|
|
@ -147,101 +147,99 @@
|
|||
}
|
||||
|
||||
- (void)update {
|
||||
LinphoneCall *call = NULL;
|
||||
if(data != nil && data->call != NULL) {
|
||||
call = data->call;
|
||||
const LinphoneAddress* addr = linphone_call_get_remote_address(call);
|
||||
|
||||
UIImage *image = nil;
|
||||
NSString* address = nil;
|
||||
if(addr != NULL) {
|
||||
BOOL useLinphoneAddress = true;
|
||||
// contact name
|
||||
const char* lAddress = linphone_address_as_string_uri_only(addr);
|
||||
if(lAddress) {
|
||||
NSString *normalizedSipAddress = [FastAddressBook normalizeSipURI:[NSString stringWithUTF8String:lAddress]];
|
||||
ABRecordRef contact = [[[LinphoneManager instance] fastAddressBook] getContact:normalizedSipAddress];
|
||||
if(contact) {
|
||||
image = [FastAddressBook getContactImage:contact thumbnail:false];
|
||||
address = [FastAddressBook getContactDisplayName:contact];
|
||||
useLinphoneAddress = false;
|
||||
}
|
||||
}
|
||||
if(useLinphoneAddress) {
|
||||
const char* lDisplayName = linphone_address_get_display_name(addr);
|
||||
const char* lUserName = linphone_address_get_username(addr);
|
||||
if (lDisplayName)
|
||||
address = [NSString stringWithUTF8String:lDisplayName];
|
||||
else if(lUserName)
|
||||
address = [NSString stringWithUTF8String:lUserName];
|
||||
}
|
||||
}
|
||||
|
||||
// Set Image
|
||||
if(image == nil) {
|
||||
image = [UIImage imageNamed:@"avatar_unknown.png"];
|
||||
}
|
||||
[avatarImage setImage:image];
|
||||
|
||||
// Set Address
|
||||
if(address == nil) {
|
||||
address = @"Unknown";
|
||||
}
|
||||
[addressLabel setText:address];
|
||||
if(data == nil || data->call) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update call cell: null call or data"];
|
||||
return;
|
||||
}
|
||||
LinphoneCall *call = data->call;
|
||||
const LinphoneAddress* addr = linphone_call_get_remote_address(call);
|
||||
|
||||
LinphoneCallState state = linphone_call_get_state(call);
|
||||
if(!conferenceCell) {
|
||||
if(state == LinphoneCallOutgoingRinging) {
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_ringing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
} else if(state == LinphoneCallOutgoingInit || state == LinphoneCallOutgoingProgress){
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_outgoing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
} else {
|
||||
[stateImage setHidden:true];
|
||||
[pauseButton setHidden:false];
|
||||
[pauseButton update];
|
||||
}
|
||||
[removeButton setHidden:true];
|
||||
if(firstCell) {
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call_first.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_first_highlight.png"]];
|
||||
} else {
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_highlight.png"]];
|
||||
UIImage *image = nil;
|
||||
NSString* address = nil;
|
||||
if(addr != NULL) {
|
||||
BOOL useLinphoneAddress = true;
|
||||
// contact name
|
||||
const char* lAddress = linphone_address_as_string_uri_only(addr);
|
||||
if(lAddress) {
|
||||
NSString *normalizedSipAddress = [FastAddressBook normalizeSipURI:[NSString stringWithUTF8String:lAddress]];
|
||||
ABRecordRef contact = [[[LinphoneManager instance] fastAddressBook] getContact:normalizedSipAddress];
|
||||
if(contact) {
|
||||
image = [FastAddressBook getContactImage:contact thumbnail:false];
|
||||
address = [FastAddressBook getContactDisplayName:contact];
|
||||
useLinphoneAddress = false;
|
||||
}
|
||||
}
|
||||
if(useLinphoneAddress) {
|
||||
const char* lDisplayName = linphone_address_get_display_name(addr);
|
||||
const char* lUserName = linphone_address_get_username(addr);
|
||||
if (lDisplayName)
|
||||
address = [NSString stringWithUTF8String:lDisplayName];
|
||||
else if(lUserName)
|
||||
address = [NSString stringWithUTF8String:lUserName];
|
||||
}
|
||||
}
|
||||
|
||||
// Set Image
|
||||
if(image == nil) {
|
||||
image = [UIImage imageNamed:@"avatar_unknown.png"];
|
||||
}
|
||||
[avatarImage setImage:image];
|
||||
|
||||
// Set Address
|
||||
if(address == nil) {
|
||||
address = @"Unknown";
|
||||
}
|
||||
[addressLabel setText:address];
|
||||
|
||||
LinphoneCallState state = linphone_call_get_state(call);
|
||||
if(!conferenceCell) {
|
||||
if(state == LinphoneCallOutgoingRinging) {
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_ringing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
} else if(state == LinphoneCallOutgoingInit || state == LinphoneCallOutgoingProgress){
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_outgoing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
} else {
|
||||
[stateImage setHidden:true];
|
||||
[pauseButton setHidden:true];
|
||||
[removeButton setHidden:false];
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_conference.png"]];
|
||||
[pauseButton setHidden:false];
|
||||
[pauseButton update];
|
||||
}
|
||||
|
||||
int duration = linphone_call_get_duration(call);
|
||||
[stateLabel setText:[NSString stringWithFormat:@"%02i:%02i", (duration/60), duration - 60 * (duration / 60), nil]];
|
||||
|
||||
if(!data->minimize) {
|
||||
CGRect frame = [self frame];
|
||||
frame.size.height = [avatarView frame].size.height;
|
||||
[self setFrame:frame];
|
||||
[avatarView setHidden:false];
|
||||
[removeButton setHidden:true];
|
||||
if(firstCell) {
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call_first.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_first_highlight.png"]];
|
||||
} else {
|
||||
CGRect frame = [self frame];
|
||||
frame.size.height = [headerView frame].size.height;
|
||||
[self setFrame:frame];
|
||||
[avatarView setHidden:true];
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_highlight.png"]];
|
||||
}
|
||||
} else {
|
||||
[stateImage setHidden:true];
|
||||
[pauseButton setHidden:true];
|
||||
[removeButton setHidden:false];
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_conference.png"]];
|
||||
}
|
||||
|
||||
int duration = linphone_call_get_duration(call);
|
||||
[stateLabel setText:[NSString stringWithFormat:@"%02i:%02i", (duration/60), duration - 60 * (duration / 60), nil]];
|
||||
|
||||
if(!data->minimize) {
|
||||
CGRect frame = [self frame];
|
||||
frame.size.height = [avatarView frame].size.height;
|
||||
[self setFrame:frame];
|
||||
[avatarView setHidden:false];
|
||||
} else {
|
||||
CGRect frame = [self frame];
|
||||
frame.size.height = [headerView frame].size.height;
|
||||
[self setFrame:frame];
|
||||
[avatarView setHidden:true];
|
||||
}
|
||||
[pauseButton setType:UIPauseButtonType_Call call:call];
|
||||
}
|
||||
|
||||
- (void)selfUpdate {
|
||||
UITableView *parentTable = (UITableView *)self.superview;
|
||||
/*[parentTable beginUpdates];
|
||||
[parentTable reloadData];
|
||||
[parentTable endUpdates];*/
|
||||
if(parentTable) {
|
||||
NSIndexPath *index= [parentTable indexPathForCell:self];
|
||||
if(index != nil) {
|
||||
|
|
|
|||
|
|
@ -20,24 +20,13 @@
|
|||
#import "UICamSwitch.h"
|
||||
#include "LinphoneManager.h"
|
||||
|
||||
|
||||
@implementation UICamSwitch
|
||||
@synthesize preview;
|
||||
-(void) touchUp:(id) sender {
|
||||
if (nextCamId!=currentCamId) {
|
||||
ms_message("Switching from [%s] to [%s]",currentCamId,nextCamId);
|
||||
linphone_core_set_video_device([LinphoneManager getLc], nextCamId);
|
||||
nextCamId=currentCamId;
|
||||
currentCamId = linphone_core_get_video_device([LinphoneManager getLc]);
|
||||
linphone_core_update_call([LinphoneManager getLc]
|
||||
, linphone_core_get_current_call([LinphoneManager getLc])
|
||||
,NULL);
|
||||
linphone_core_set_native_preview_window_id([LinphoneManager getLc],
|
||||
(unsigned long)preview);
|
||||
}
|
||||
}
|
||||
|
||||
- (id) init {
|
||||
|
||||
#pragma mark - Lifecycle Functions
|
||||
|
||||
- (id)initUICamSwitch {
|
||||
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
|
||||
currentCamId = (char*)linphone_core_get_video_device([LinphoneManager getLc]);
|
||||
if ([LinphoneManager instance].frontCamId !=nil ) {
|
||||
|
|
@ -52,18 +41,28 @@
|
|||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initUICamSwitch];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame {
|
||||
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self init];
|
||||
[self initUICamSwitch];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(NSCoder *)decoder {
|
||||
self = [super initWithCoder:decoder];
|
||||
if (self) {
|
||||
[self init];
|
||||
[self initUICamSwitch];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
|
@ -75,7 +74,24 @@
|
|||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
|
||||
|
||||
-(void) touchUp:(id) sender {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot tigger camswitch button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
if (nextCamId != currentCamId) {
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Switching from [%s] to [%s]",currentCamId,nextCamId];
|
||||
linphone_core_set_video_device([LinphoneManager getLc], nextCamId);
|
||||
nextCamId=currentCamId;
|
||||
currentCamId = linphone_core_get_video_device([LinphoneManager getLc]);
|
||||
linphone_core_update_call([LinphoneManager getLc]
|
||||
, linphone_core_get_current_call([LinphoneManager getLc])
|
||||
, NULL);
|
||||
/*linphone_core_set_native_preview_window_id([LinphoneManager getLc],
|
||||
(unsigned long)preview);*/
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -70,13 +70,15 @@
|
|||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
|
||||
if (chat != nil) {
|
||||
[avatarImage setImage:[UIImage imageNamed:@"avatar_unknown_small.png"]];
|
||||
[displayNameLabel setText:[chat remoteContact]];
|
||||
[chatContentLabel setText:[chat message]];
|
||||
if(chat == nil) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update chat cell: null chat"];
|
||||
return;
|
||||
}
|
||||
|
||||
[avatarImage setImage:[UIImage imageNamed:@"avatar_unknown_small.png"]];
|
||||
[displayNameLabel setText:[chat remoteContact]];
|
||||
[chatContentLabel setText:[chat message]];
|
||||
|
||||
//
|
||||
// Adapt size
|
||||
//
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#import "UIChatRoomCell.h"
|
||||
#import "Utils.h"
|
||||
|
||||
#import <NinePatch.h>
|
||||
|
||||
|
|
@ -72,9 +73,11 @@ static UIFont *CELL_FONT = nil;
|
|||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
if(chat != nil) {
|
||||
[messageLabel setText:[chat message]];
|
||||
if(chat == nil) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update chat room cell: null chat"];
|
||||
return;
|
||||
}
|
||||
[messageLabel setText:[chat message]];
|
||||
}
|
||||
|
||||
- (void)setEditing:(BOOL)editing {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#import "UIChatRoomHeader.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation UIChatRoomHeader
|
||||
|
||||
|
|
@ -54,10 +55,13 @@
|
|||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
if(contact != nil) {
|
||||
[avatarImage setImage:[UIImage imageNamed:@"avatar_unknown_small.png"]];
|
||||
[addressLabel setText:contact];
|
||||
if(contact == NULL) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update chat room header: null contact"];
|
||||
return;
|
||||
}
|
||||
|
||||
[avatarImage setImage:[UIImage imageNamed:@"avatar_unknown_small.png"]];
|
||||
[addressLabel setText:contact];
|
||||
}
|
||||
|
||||
+ (CGFloat)height {
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@
|
|||
<string key="NSFrame">{{0, 400}, {320, 60}}</string>
|
||||
<reference key="NSSuperview" ref="191373211"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||
<reference key="IBUIBackgroundColor" ref="572758541"/>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
|
|
@ -175,10 +176,10 @@
|
|||
<string key="-2.CustomClassName">UIResponder</string>
|
||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="14.CustomClassName">UIPassView</string>
|
||||
<string key="14.CustomClassName">UITransparentView</string>
|
||||
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="16.CustomClassName">UIPassView</string>
|
||||
<string key="16.CustomClassName">UITransparentView</string>
|
||||
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||
|
|
@ -216,14 +217,6 @@
|
|||
<string key="minorKey">./Classes/UICompositeViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIPassView</string>
|
||||
<string key="superclassName">UIView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/UIPassView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</array>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#import "UIContactCell.h"
|
||||
|
||||
#import "Utils.h"
|
||||
#import "FastAddressBook.h"
|
||||
|
||||
@implementation UIContactCell
|
||||
|
|
@ -71,6 +71,11 @@
|
|||
}
|
||||
|
||||
- (void)update {
|
||||
if(contact == NULL) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update contact cell: null contact"];
|
||||
return;
|
||||
}
|
||||
|
||||
CFStringRef lFirstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty);
|
||||
CFStringRef lLocalizedFirstName = (lFirstName != nil)?ABAddressBookCopyLocalizedLabel(lFirstName):nil;
|
||||
CFStringRef lLastName = ABRecordCopyValue(contact, kABPersonLastNameProperty);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#import "UIContactDetailsHeader.h"
|
||||
|
||||
#import "Utils.h"
|
||||
#import "UIEditableTableViewCell.h"
|
||||
#import "FastAddressBook.h"
|
||||
|
||||
|
|
@ -69,28 +69,32 @@
|
|||
- (void)setContact:(ABRecordRef)acontact {
|
||||
contact = acontact;
|
||||
[self update];
|
||||
[tableView reloadData];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
if(contact) {
|
||||
// Avatar image
|
||||
{
|
||||
UIImage *image = [FastAddressBook getContactImage:contact thumbnail:true];
|
||||
if(image == nil) {
|
||||
image = [UIImage imageNamed:@"avatar_unknown_small.png"];
|
||||
}
|
||||
[avatarImage setImage:image];
|
||||
}
|
||||
|
||||
// Contact label
|
||||
{
|
||||
[addressLabel setText:[FastAddressBook getContactDisplayName:contact]];
|
||||
}
|
||||
if(contact == NULL) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update contact details header: null contact"];
|
||||
return;
|
||||
}
|
||||
|
||||
// Avatar image
|
||||
{
|
||||
UIImage *image = [FastAddressBook getContactImage:contact thumbnail:true];
|
||||
if(image == nil) {
|
||||
image = [UIImage imageNamed:@"avatar_unknown_small.png"];
|
||||
}
|
||||
[avatarImage setImage:image];
|
||||
}
|
||||
|
||||
// Contact label
|
||||
{
|
||||
[addressLabel setText:[FastAddressBook getContactDisplayName:contact]];
|
||||
}
|
||||
|
||||
[tableView reloadData];
|
||||
}
|
||||
|
||||
+ (CGFloat)height:(BOOL)editing {
|
||||
|
|
@ -217,10 +221,10 @@
|
|||
NSError* error = NULL;
|
||||
ABRecordSetValue(contact, property, [textField text], (CFErrorRef*)&error);
|
||||
if (error != NULL) {
|
||||
NSLog(@"Error when saving property %i in contact %p: Fail(%@)", property, contact, [error localizedDescription]);
|
||||
[LinphoneLogger log:LinphoneLoggerError format:@"Error when saving property %i in contact %p: Fail(%@)", property, contact, [error localizedDescription]];
|
||||
}
|
||||
} else {
|
||||
NSLog(@"Not valid UIEditableTableViewCell");
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Not valid UIEditableTableViewCell"];
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@
|
|||
#pragma mark - Actions Functions
|
||||
|
||||
- (void)touchDown:(id) sender {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot trigger digit button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
if (addressField && (!dtmf || !linphone_core_in_call([LinphoneManager getLc]))) {
|
||||
NSString* newAddress = [NSString stringWithFormat:@"%@%c",addressField.text, digit];
|
||||
[addressField setText:newAddress];
|
||||
|
|
@ -80,6 +84,10 @@
|
|||
}
|
||||
|
||||
- (void)touchUp:(id) sender {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot trigger digit button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
linphone_core_stop_dtmf([LinphoneManager getLc]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@
|
|||
[addressField release];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Action Functions
|
||||
|
||||
-(void) touchDown:(id) sender {
|
||||
|
|
|
|||
|
|
@ -95,10 +95,13 @@
|
|||
[self setEnabled:true];
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update hangup button: Linphone core not ready"];
|
||||
}
|
||||
[self setEnabled:false];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Action Functions
|
||||
|
||||
-(void) touchUp:(id) sender {
|
||||
|
|
@ -117,6 +120,8 @@
|
|||
linphone_core_terminate_call(lc,(LinphoneCall*)(calls->data));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot trigger hangup button: Linphone core not ready"];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,10 @@
|
|||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
if(callLog == NULL) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update history cell: null callLog"];
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up the cell...
|
||||
LinphoneAddress* addr;
|
||||
|
|
|
|||
|
|
@ -75,13 +75,9 @@
|
|||
}
|
||||
|
||||
- (void)onRepeatTouch {
|
||||
[NSException raise:NSInternalInconsistencyException
|
||||
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
|
||||
}
|
||||
|
||||
- (void)onLongTouch {
|
||||
[NSException raise:NSInternalInconsistencyException
|
||||
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -24,10 +24,18 @@
|
|||
@implementation UIMicroButton
|
||||
|
||||
- (void)onOn {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle mic button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
linphone_core_mute_mic([LinphoneManager getLc], false);
|
||||
}
|
||||
|
||||
- (void)onOff {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle mic button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
linphone_core_mute_mic([LinphoneManager getLc], true);
|
||||
}
|
||||
|
||||
|
|
@ -35,7 +43,7 @@
|
|||
if([LinphoneManager isLcReady]) {
|
||||
return linphone_core_is_mic_muted([LinphoneManager getLc]) == false;
|
||||
} else {
|
||||
//not ready yet
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update mic button: Linphone core not ready"];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,11 +99,17 @@
|
|||
#pragma mark - UIToggleButtonDelegate Functions
|
||||
|
||||
- (void)onOn {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
switch (type) {
|
||||
case UIPauseButtonType_Call:
|
||||
{
|
||||
if (call != nil) {
|
||||
linphone_core_pause_call([LinphoneManager getLc], call);
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause buttton, because no current call"];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -120,6 +126,8 @@
|
|||
LinphoneCall* currentCall = [UIPauseButton getCall];
|
||||
if (currentCall != nil) {
|
||||
linphone_core_pause_call([LinphoneManager getLc], currentCall);
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause buttton, because no current call"];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -127,11 +135,17 @@
|
|||
}
|
||||
|
||||
- (void)onOff {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
switch (type) {
|
||||
case UIPauseButtonType_Call:
|
||||
{
|
||||
if (call != nil) {
|
||||
linphone_core_resume_call([LinphoneManager getLc], call);
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause buttton, because no current call"];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -147,6 +161,8 @@
|
|||
LinphoneCall* currentCall = [UIPauseButton getCall];
|
||||
if (currentCall != nil) {
|
||||
linphone_core_resume_call([LinphoneManager getLc], currentCall);
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle pause buttton, because no current call"];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -199,7 +215,9 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update pause button: Linphone core not ready"];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#import <AudioToolbox/AudioToolbox.h>
|
||||
#import "UISpeakerButton.h"
|
||||
|
||||
#import "Utils.h"
|
||||
#import "LinphoneManager.h"
|
||||
|
||||
#include "linphonecore.h"
|
||||
|
|
@ -46,7 +46,7 @@ static void audioRouteChangeListenerCallback (
|
|||
AudioSessionInitialize(NULL, NULL, NULL, NULL);
|
||||
OSStatus lStatus = AudioSessionAddPropertyListener(routeChangeID, audioRouteChangeListenerCallback, self);
|
||||
if (lStatus) {
|
||||
ms_error ("cannot register route change handler [%ld]",lStatus);
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"cannot register route change handler [%ld]",lStatus];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ static void audioRouteChangeListenerCallback (
|
|||
- (void)dealloc {
|
||||
OSStatus lStatus = AudioSessionRemovePropertyListenerWithUserData(routeChangeID, audioRouteChangeListenerCallback, self);
|
||||
if (lStatus) {
|
||||
ms_error ("cannot un register route change handler [%ld]",lStatus);
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"cannot un register route change handler [%ld]",lStatus];
|
||||
}
|
||||
[super dealloc];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,14 +112,14 @@ NSTimer *callQualityTimer;
|
|||
|
||||
switch (state) {
|
||||
case LinphoneRegistrationOk:
|
||||
message = @"Registered"; break;
|
||||
message = NSLocalizedString(@"Registered", nil); break;
|
||||
case LinphoneRegistrationNone:
|
||||
case LinphoneRegistrationCleared:
|
||||
message = @"Not registered"; break;
|
||||
message = NSLocalizedString(@"Not registered", nil); break;
|
||||
case LinphoneRegistrationFailed:
|
||||
message = @"Registration failed"; break;
|
||||
message = NSLocalizedString(@"Registration failed", nil); break;
|
||||
case LinphoneRegistrationProgress:
|
||||
message = @"Registration in progress"; break;
|
||||
message = NSLocalizedString(@"Registration in progress", nil); break;
|
||||
//case LinphoneRegistrationCleared: m= @"No SIP account"; break;
|
||||
default: break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* UIPassView.h
|
||||
/* UITransparentView.h
|
||||
*
|
||||
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
|
|
@ -19,6 +19,6 @@
|
|||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface UIPassView : UIView
|
||||
@interface UITransparentView : UIView
|
||||
|
||||
@end
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* UIPassView.m
|
||||
/* UITransparentView.m
|
||||
*
|
||||
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
|
|
@ -17,9 +17,9 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "UIPassView.h"
|
||||
#import "UITransparentView.h"
|
||||
|
||||
@implementation UIPassView
|
||||
@implementation UITransparentView
|
||||
|
||||
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
|
||||
BOOL pointInside = NO;
|
||||
|
|
@ -56,6 +56,11 @@
|
|||
}
|
||||
|
||||
- (void)onOn {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle video button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
LinphoneCore* lc = [LinphoneManager getLc];
|
||||
|
||||
if (!linphone_core_video_enabled(lc))
|
||||
|
|
@ -73,11 +78,16 @@
|
|||
linphone_core_update_call(lc, call, call_params);
|
||||
linphone_call_params_destroy(call_params);
|
||||
} else {
|
||||
ms_warning("Cannot toggle video, because no current call");
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle video button, because no current call"];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)onOff {
|
||||
if(![LinphoneManager isLcReady]) {
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle video button: Linphone core not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
LinphoneCore* lc = [LinphoneManager getLc];
|
||||
|
||||
if (!linphone_core_video_enabled(lc))
|
||||
|
|
@ -95,7 +105,7 @@
|
|||
linphone_core_update_call(lc, call, call_params);
|
||||
linphone_call_params_destroy(call_params);
|
||||
} else {
|
||||
ms_warning("Cannot toggle video, because no current call");
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot toggle video button, because no current call"];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -139,7 +149,7 @@
|
|||
}
|
||||
return val;
|
||||
} else {
|
||||
//not ready yet
|
||||
[LinphoneLogger logc:LinphoneLoggerWarning format:"Cannot update video button: Linphone core not ready"];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,19 +65,19 @@
|
|||
- (void)create {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return;
|
||||
}
|
||||
const char *sql = [[NSString stringWithFormat:@"INSERT INTO chat (localContact, remoteContact, direction, message, time, read) VALUES (\"%@\", \"%@\", %i, \"%@\", %f, %i)",
|
||||
localContact, remoteContact, [direction intValue], message, [time timeIntervalSince1970], [read intValue]] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
}
|
||||
}
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
+ (ChatModel*)read:(NSNumber*)chatId {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
chatId] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
if (err == SQLITE_ROW) {
|
||||
line = [[ChatModel alloc] initWithData:sqlStatement];
|
||||
} else if (err != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return nil;
|
||||
}
|
||||
|
|
@ -114,7 +114,7 @@
|
|||
- (void)update {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -122,12 +122,12 @@
|
|||
localContact, remoteContact, [direction intValue], message, [time timeIntervalSince1970], read, [chatId intValue]] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return;
|
||||
}
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
- (void)delete {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -146,12 +146,12 @@
|
|||
chatId] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return;
|
||||
}
|
||||
|
|
@ -166,14 +166,14 @@
|
|||
NSMutableArray *array = [NSMutableArray array];
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return array;
|
||||
}
|
||||
|
||||
const char *sql = "SELECT id, localContact, remoteContact, direction, message, time, read FROM chat GROUP BY remoteContact ORDER BY time DESC";
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
@ -184,7 +184,7 @@
|
|||
}
|
||||
|
||||
if (err != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
@ -197,7 +197,7 @@
|
|||
NSMutableArray *array = [NSMutableArray array];
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
@ -205,7 +205,7 @@
|
|||
contact] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't execute the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
}
|
||||
|
||||
if (err != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
+ (void)removeConversation:(NSString *)contact {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -236,12 +236,12 @@
|
|||
contact] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return;
|
||||
}
|
||||
|
|
@ -253,19 +253,19 @@
|
|||
int count = -1;
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return count;
|
||||
}
|
||||
|
||||
const char *sql = [[NSString stringWithFormat:@"SELECT count(*) FROM chat WHERE read=0"] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return count;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_ROW) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return count;
|
||||
}
|
||||
|
|
@ -279,7 +279,7 @@
|
|||
+ (void)readConversation:(NSString *)contact {
|
||||
sqlite3* database = [[LinphoneManager instance] database];
|
||||
if(database == NULL) {
|
||||
NSLog(@"Database not ready");
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Database not ready"];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -287,12 +287,12 @@
|
|||
contact] UTF8String];
|
||||
sqlite3_stmt *sqlStatement;
|
||||
if (sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
|
||||
NSLog(@"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Can't prepare the query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlite3_step(sqlStatement) != SQLITE_DONE) {
|
||||
NSLog(@"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database));
|
||||
[LinphoneLogger logc:LinphoneLoggerError format:"Error during execution of query: %s (%s)", sql, sqlite3_errmsg(database)];
|
||||
sqlite3_finalize(sqlStatement);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
[super viewDidLoad];
|
||||
[creditText setText: [NSString stringWithFormat:creditText.text,[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]];
|
||||
consoleViewController = [[ConsoleViewController alloc] initWithNibName:@"ConsoleViewController" bundle:[NSBundle mainBundle]];
|
||||
[[LinphoneManager instance] registerLogView:consoleViewController];
|
||||
//[[LinphoneManager instance] registerLogView:consoleViewController];
|
||||
isDebug = lp_config_get_int(linphone_core_get_config([LinphoneManager getLc]),"app","debugenable_preference",0);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
|
|||
}
|
||||
|
||||
- (UIViewController*)_changeView:(PhoneView)view transition:(CATransition*)transition {
|
||||
NSLog(@"PhoneMainView: change view %d", view);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"PhoneMainView: change view %d", view];
|
||||
UICompositeViewDescription* description = [viewDescriptions objectForKey:[NSNumber numberWithInt: view]];
|
||||
if(description == nil)
|
||||
return nil;
|
||||
|
|
@ -348,7 +348,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
|
|||
}
|
||||
|
||||
- (UIViewController*)popView:(NSArray *)calls {
|
||||
NSLog(@"PhoneMainView: Pop!");
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"PhoneMainView: Pop view"];
|
||||
if([viewStack count] > 0) {
|
||||
PhoneView view = [[viewStack lastObject] intValue];
|
||||
[viewStack removeLastObject];
|
||||
|
|
@ -446,7 +446,7 @@ static PhoneMainView* phoneMainViewInstance=nil;
|
|||
LinphoneCallAppData* appData = (LinphoneCallAppData*) linphone_call_get_user_pointer(call);
|
||||
if ([UIDevice currentDevice].batteryState == UIDeviceBatteryStateUnplugged) {
|
||||
float level = [UIDevice currentDevice].batteryLevel;
|
||||
ms_message("Video call is running. Battery level: %.2f", level);
|
||||
[LinphoneLogger logc:LinphoneLoggerLog format:"Video call is running. Battery level: %.2f", level];
|
||||
if (level < 0.1 && !appData->batteryWarningShown) {
|
||||
// notify user
|
||||
CallDelegate* cd = [[CallDelegate alloc] init];
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@
|
|||
}
|
||||
// NSLog(@"Specifier received: %@", identifier);
|
||||
if ([identifier isEqualToString:@"silk_24k_preference"]) {
|
||||
if (![[LinphoneManager instance] isNotIphone3G])
|
||||
if (![LinphoneManager isNotIphone3G])
|
||||
return nil;
|
||||
}
|
||||
if ([identifier isEqualToString:@"backgroundmode_preference"]) {
|
||||
|
|
|
|||
|
|
@ -26,4 +26,21 @@
|
|||
[inst_ isKindOfClass:[cls class]]? inst_ : nil; \
|
||||
})
|
||||
|
||||
typedef enum _LinphoneLoggerSeverity {
|
||||
LinphoneLoggerLog = 0,
|
||||
LinphoneLoggerDebug,
|
||||
LinphoneLoggerWarning,
|
||||
LinphoneLoggerError,
|
||||
LinphoneLoggerFatal
|
||||
} LinphoneLoggerSeverity;
|
||||
|
||||
|
||||
@interface LinphoneLogger : NSObject {
|
||||
|
||||
}
|
||||
+ (void)log:(LinphoneLoggerSeverity) severity format:(NSString *)format,...;
|
||||
+ (void)logc:(LinphoneLoggerSeverity) severity format:(const char *)format,...;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
|
|
|||
62
Classes/Utils/Utils.m
Normal file
62
Classes/Utils/Utils.m
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
/* Utils.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 "Utils.h"
|
||||
#include "linphonecore.h"
|
||||
|
||||
@implementation LinphoneLogger
|
||||
|
||||
+ (void)log:(LinphoneLoggerSeverity) severity format:(NSString *)format,... {
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
NSString *str = [[NSString alloc] initWithFormat: format arguments:args];
|
||||
if(severity <= LinphoneLoggerLog) {
|
||||
ms_message("%s", [str UTF8String]);
|
||||
} else if(severity <= LinphoneLoggerDebug) {
|
||||
ms_debug("%s", [str UTF8String]);
|
||||
} else if(severity <= LinphoneLoggerWarning) {
|
||||
ms_warning("%s", [str UTF8String]);
|
||||
} else if(severity <= LinphoneLoggerError) {
|
||||
ms_error("%s", [str UTF8String]);
|
||||
} else if(severity <= LinphoneLoggerFatal) {
|
||||
ms_fatal("%s", [str UTF8String]);
|
||||
}
|
||||
[str release];
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
+ (void)logc:(LinphoneLoggerSeverity) severity format:(const char *)format,... {
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
if(severity <= LinphoneLoggerLog) {
|
||||
ortp_logv(ORTP_MESSAGE, format, args);
|
||||
} else if(severity <= LinphoneLoggerDebug) {
|
||||
ortp_logv(ORTP_DEBUG, format, args);
|
||||
} else if(severity <= LinphoneLoggerWarning) {
|
||||
ortp_logv(ORTP_WARNING, format, args);
|
||||
} else if(severity <= LinphoneLoggerError) {
|
||||
ortp_logv(ORTP_ERROR, format, args);
|
||||
} else if(severity <= LinphoneLoggerFatal) {
|
||||
ortp_logv(ORTP_FATAL, format, args);
|
||||
}
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -241,8 +241,8 @@
|
|||
D3211BC3159CBFD70098460B /* back_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3211BBD159CBFD60098460B /* back_over.png */; };
|
||||
D32409C3158B49A600C8C119 /* UILongTouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32409C2158B49A600C8C119 /* UILongTouchButton.m */; };
|
||||
D32409C4158B49A600C8C119 /* UILongTouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32409C2158B49A600C8C119 /* UILongTouchButton.m */; };
|
||||
D32460E6159D9AAD00BA7F3A /* UIPassView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UIPassView.m */; };
|
||||
D32460E7159D9AAD00BA7F3A /* UIPassView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UIPassView.m */; };
|
||||
D32460E6159D9AAD00BA7F3A /* UITransparentView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UITransparentView.m */; };
|
||||
D32460E7159D9AAD00BA7F3A /* UITransparentView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UITransparentView.m */; };
|
||||
D326483815887D5200930C67 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483715887D5200930C67 /* OrderedDictionary.m */; };
|
||||
D326483915887D5200930C67 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483715887D5200930C67 /* OrderedDictionary.m */; };
|
||||
D326483E1588950F00930C67 /* UICallBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483C1588950F00930C67 /* UICallBar.m */; };
|
||||
|
|
@ -341,6 +341,8 @@
|
|||
D35498221587716B000081D8 /* UIStateBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D354981F1587716B000081D8 /* UIStateBar.m */; };
|
||||
D35498231587716B000081D8 /* UIStateBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35498201587716B000081D8 /* UIStateBar.xib */; };
|
||||
D35498241587716B000081D8 /* UIStateBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35498201587716B000081D8 /* UIStateBar.xib */; };
|
||||
D35860D615B549B500513429 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D35860D515B549B500513429 /* Utils.m */; };
|
||||
D35860D715B549B500513429 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D35860D515B549B500513429 /* Utils.m */; };
|
||||
D35E757815931E5D0066B1C1 /* switch_camera_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D35E757515931E5D0066B1C1 /* switch_camera_default.png */; };
|
||||
D35E757915931E5D0066B1C1 /* switch_camera_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D35E757515931E5D0066B1C1 /* switch_camera_default.png */; };
|
||||
D35E757A15931E5D0066B1C1 /* switch_camera_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D35E757615931E5D0066B1C1 /* switch_camera_over.png */; };
|
||||
|
|
@ -1136,8 +1138,8 @@
|
|||
D3211BBD159CBFD60098460B /* back_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = back_over.png; path = Resources/back_over.png; sourceTree = "<group>"; };
|
||||
D32409C1158B49A600C8C119 /* UILongTouchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILongTouchButton.h; sourceTree = "<group>"; };
|
||||
D32409C2158B49A600C8C119 /* UILongTouchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILongTouchButton.m; sourceTree = "<group>"; };
|
||||
D32460E4159D9AAD00BA7F3A /* UIPassView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPassView.h; sourceTree = "<group>"; };
|
||||
D32460E5159D9AAD00BA7F3A /* UIPassView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPassView.m; sourceTree = "<group>"; };
|
||||
D32460E4159D9AAD00BA7F3A /* UITransparentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UITransparentView.h; sourceTree = "<group>"; };
|
||||
D32460E5159D9AAD00BA7F3A /* UITransparentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITransparentView.m; sourceTree = "<group>"; };
|
||||
D326483615887D5200930C67 /* OrderedDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderedDictionary.h; path = Utils/OrderedDictionary.h; sourceTree = "<group>"; };
|
||||
D326483715887D5200930C67 /* OrderedDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderedDictionary.m; path = Utils/OrderedDictionary.m; sourceTree = "<group>"; };
|
||||
D326483B1588950F00930C67 /* UICallBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallBar.h; sourceTree = "<group>"; };
|
||||
|
|
@ -1199,6 +1201,7 @@
|
|||
D354981E1587716B000081D8 /* UIStateBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIStateBar.h; sourceTree = "<group>"; };
|
||||
D354981F1587716B000081D8 /* UIStateBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIStateBar.m; sourceTree = "<group>"; };
|
||||
D35498201587716B000081D8 /* UIStateBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIStateBar.xib; sourceTree = "<group>"; };
|
||||
D35860D515B549B500513429 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = Utils/Utils.m; sourceTree = "<group>"; };
|
||||
D35E757515931E5D0066B1C1 /* switch_camera_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = switch_camera_default.png; path = Resources/switch_camera_default.png; sourceTree = "<group>"; };
|
||||
D35E757615931E5D0066B1C1 /* switch_camera_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = switch_camera_over.png; path = Resources/switch_camera_over.png; sourceTree = "<group>"; };
|
||||
D35E757F159328EA0066B1C1 /* UIAddressTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIAddressTextField.h; sourceTree = "<group>"; };
|
||||
|
|
@ -1917,8 +1920,6 @@
|
|||
2214EBF212F86360002A5394 /* UIMicroButton.m */,
|
||||
D3F34F331599C354005BE94F /* UIModalViewController.h */,
|
||||
D3F34F341599C354005BE94F /* UIModalViewController.m */,
|
||||
D32460E4159D9AAD00BA7F3A /* UIPassView.h */,
|
||||
D32460E5159D9AAD00BA7F3A /* UIPassView.m */,
|
||||
D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */,
|
||||
D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */,
|
||||
22968A5D12F875C600588287 /* UISpeakerButton.h */,
|
||||
|
|
@ -1930,6 +1931,8 @@
|
|||
D32648431588F6FB00930C67 /* UIToggleButton.m */,
|
||||
D3196D3C15A32BD7007FEEBA /* UITransferButton.h */,
|
||||
D3196D3D15A32BD8007FEEBA /* UITransferButton.m */,
|
||||
D32460E4159D9AAD00BA7F3A /* UITransparentView.h */,
|
||||
D32460E5159D9AAD00BA7F3A /* UITransparentView.m */,
|
||||
340751E5150F38FC00B89C47 /* UIVideoButton.h */,
|
||||
340751E6150F38FD00B89C47 /* UIVideoButton.m */,
|
||||
D378907715AC44A300BD776C /* UIView+ModalStack.h */,
|
||||
|
|
@ -2340,6 +2343,7 @@
|
|||
D3F9A9DD15AF0FFE0045320F /* TPKeyboardAvoiding */,
|
||||
D3F9A9EB15AF27620045320F /* UACellBackgroundView */,
|
||||
C9B3A6FD15B485DB006F52EE /* Utils.h */,
|
||||
D35860D515B549B500513429 /* Utils.m */,
|
||||
);
|
||||
name = Utils;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -3151,7 +3155,7 @@
|
|||
D3F34F351599C354005BE94F /* UIModalViewController.m in Sources */,
|
||||
D31AAF5E159B3919002C6B02 /* InCallTableViewController.m in Sources */,
|
||||
D3211BB0159C4EF10098460B /* UIConferenceHeader.m in Sources */,
|
||||
D32460E6159D9AAD00BA7F3A /* UIPassView.m in Sources */,
|
||||
D32460E6159D9AAD00BA7F3A /* UITransparentView.m in Sources */,
|
||||
D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */,
|
||||
D3196D3E15A32BD8007FEEBA /* UITransferButton.m in Sources */,
|
||||
D350F20E15A43BB100149E54 /* WizardViewController.m in Sources */,
|
||||
|
|
@ -3173,6 +3177,7 @@
|
|||
D3F9A9E215AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */,
|
||||
D3F9A9E415AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */,
|
||||
D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */,
|
||||
D35860D615B549B500513429 /* Utils.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -3240,7 +3245,7 @@
|
|||
D3F34F361599C354005BE94F /* UIModalViewController.m in Sources */,
|
||||
D31AAF5F159B3919002C6B02 /* InCallTableViewController.m in Sources */,
|
||||
D3211BB1159C4EF10098460B /* UIConferenceHeader.m in Sources */,
|
||||
D32460E7159D9AAD00BA7F3A /* UIPassView.m in Sources */,
|
||||
D32460E7159D9AAD00BA7F3A /* UITransparentView.m in Sources */,
|
||||
D32B9DFD15A2F131000B6DEC /* FastAddressBook.m in Sources */,
|
||||
D3196D3F15A32BD8007FEEBA /* UITransferButton.m in Sources */,
|
||||
D350F20F15A43BB100149E54 /* WizardViewController.m in Sources */,
|
||||
|
|
@ -3262,6 +3267,7 @@
|
|||
D3F9A9E315AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */,
|
||||
D3F9A9E515AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */,
|
||||
D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */,
|
||||
D35860D715B549B500513429 /* Utils.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue