diff --git a/Classes/BuschJaegerConfiguration.h b/Classes/BuschJaegerConfiguration.h index 1ca1ae4cc..43693df47 100644 --- a/Classes/BuschJaegerConfiguration.h +++ b/Classes/BuschJaegerConfiguration.h @@ -23,6 +23,7 @@ #import "User.h" #import "Network.h" #import "History.h" +#import "LevelPushButton.h" @protocol BuschJaegerConfigurationDelegate @@ -43,6 +44,7 @@ typedef enum _BuschJaegerConfigurationRequestType{ @property (readonly) NSMutableSet *users; @property (readonly) NSMutableSet *outdoorStations; @property (readonly) Network *network; +@property (readonly) LevelPushButton *levelPushButton; - (void)reset; diff --git a/Classes/BuschJaegerConfiguration.m b/Classes/BuschJaegerConfiguration.m index a10573c5c..4353d84e7 100644 --- a/Classes/BuschJaegerConfiguration.m +++ b/Classes/BuschJaegerConfiguration.m @@ -27,6 +27,7 @@ @synthesize users; @synthesize network; @synthesize history; +@synthesize levelPushButton; /******** [outdoorstation_0] @@ -92,6 +93,7 @@ users = [[NSMutableSet alloc] init]; history = [[NSMutableSet alloc] init]; network = [[Network alloc] init]; + levelPushButton = [[LevelPushButton alloc] init]; } return self; } @@ -101,6 +103,7 @@ [users release]; [history release]; [network release]; + [levelPushButton release]; [super dealloc]; } @@ -142,7 +145,12 @@ [network release]; } network = [obj retain]; - } else { + } else if((obj = [LevelPushButton parse:section array:array]) != nil) { + if(levelPushButton != nil) { + [levelPushButton release]; + } + levelPushButton = [obj retain]; + }else { [LinphoneLogger log:LinphoneLoggerWarning format:@"Unknown section: %@", section]; } } @@ -187,6 +195,10 @@ [network release]; } network = [[Network alloc] init]; + if(levelPushButton != nil) { + [levelPushButton release]; + } + levelPushButton = [[LevelPushButton alloc] init]; } - (BOOL)saveFile:(NSString*)file { @@ -198,6 +210,7 @@ [data appendString:[usr write]]; } [data appendString:[network write]]; + [data appendString:[levelPushButton write]]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; diff --git a/Classes/BuschJaegerMainView.m b/Classes/BuschJaegerMainView.m index d6cbc354a..68890fb76 100644 --- a/Classes/BuschJaegerMainView.m +++ b/Classes/BuschJaegerMainView.m @@ -98,6 +98,12 @@ static BuschJaegerMainView* mainViewInstance=nil; selector:@selector(callUpdateEvent:) name:kLinphoneCallUpdate object:nil]; + + // Set observer + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(textReceivedEvent:) + name:kLinphoneTextReceived + object:nil]; } - (void)vieWillDisappear:(BOOL)animated{ @@ -107,6 +113,11 @@ static BuschJaegerMainView* mainViewInstance=nil; [[NSNotificationCenter defaultCenter] removeObserver:self name:kLinphoneCallUpdate object:nil]; + + // Remove observer + [[NSNotificationCenter defaultCenter] removeObserver:self + name:kLinphoneTextReceived + object:nil]; } @@ -119,6 +130,11 @@ static BuschJaegerMainView* mainViewInstance=nil; } +- (void)textReceivedEvent: (NSNotification*) notif { + [self displayMessage:notif]; +} + + #pragma mark - - (void)callUpdate:(LinphoneCall *)call state:(LinphoneCallState)state animated:(BOOL)animated { @@ -160,13 +176,39 @@ static BuschJaegerMainView* mainViewInstance=nil; - (void)displayIncomingCall:(LinphoneCall *)call { if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] && [UIApplication sharedApplication].applicationState != UIApplicationStateActive) { + + NSString *ringtone = [NSString stringWithFormat:@"%@_loop.wav", [[NSUserDefaults standardUserDefaults] stringForKey:@"ringtone_preference"], nil]; + + NSString *contactName = NSLocalizedString(@"Unknown", nil); + + // Extract caller address + const LinphoneAddress* addr = linphone_call_get_remote_address(call); + if(addr) { + char *address = linphone_address_as_string_uri_only(addr); + if(address != NULL) { + contactName = [FastAddressBook normalizeSipURI:[NSString stringWithUTF8String:address]]; + ms_free(address); + } + } + + // Find caller in outdoor stations + NSSet *outstations = [[LinphoneManager instance] configuration].outdoorStations; + for(OutdoorStation *os in outstations) { + if([[FastAddressBook normalizeSipURI:os.address] isEqualToString:contactName]) { + contactName = os.name; + break; + } + } + + NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"%@ ring!",nil), contactName]; + // Create a new notification UILocalNotification* notif = [[[UILocalNotification alloc] init] autorelease]; if (notif) { notif.repeatInterval = 0; - notif.alertBody = NSLocalizedString(@"Ding Dong !",nil); - notif.alertAction = @"See the answer"; - notif.soundName = @"01.wav"; + notif.alertBody = msg; + notif.alertAction = NSLocalizedString(@"Answer", nil); + notif.soundName = ringtone; NSData *callData = [NSData dataWithBytes:&call length:sizeof(call)]; notif.userInfo = [NSDictionary dictionaryWithObject:callData forKey:@"call"]; @@ -178,6 +220,36 @@ static BuschJaegerMainView* mainViewInstance=nil; } } +- (void)displayMessage:(id)message { + NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"%@ ring!",nil), [LinphoneManager instance].configuration.levelPushButton.name]; + if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] + && [UIApplication sharedApplication].applicationState != UIApplicationStateActive) { + + NSString *ringtone = [NSString stringWithFormat:@"%@_loop.wav", [[NSUserDefaults standardUserDefaults] stringForKey:@"level_ringtone_preference"], nil]; + + // Create a new notification + UILocalNotification* notif = [[[UILocalNotification alloc] init] autorelease]; + if (notif) { + notif.repeatInterval = 0; + notif.alertBody = msg; + notif.alertAction = NSLocalizedString(@"Show", nil); + notif.soundName = ringtone; + + [[UIApplication sharedApplication] presentLocalNotificationNow:notif]; + } + } else { + UIAlertView* error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Dring !",nil) + message:msg + delegate:nil + cancelButtonTitle:NSLocalizedString(@"Continue",nil) + otherButtonTitles:nil,nil]; + [error show]; + [error release]; + [[LinphoneManager instance] setSpeakerEnabled:TRUE]; + AudioServicesPlayAlertSound([LinphoneManager instance].sounds.level); + } +} + + (BuschJaegerMainView *) instance { return mainViewInstance; } diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index f853437b4..ee0bfaac2 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -172,6 +172,8 @@ @"NO", @"enable_srtp_preference", @"YES", @"backgroundmode_preference", @"YES", @"outbound_proxy_preference", + @"ringtone_01_1600", @"ringtone_preference", + @"ringtone_01_1600", @"level_ringtone_preference", nil]; [defaultsToRegister addEntriesFromDictionary:appDefaults]; @@ -251,8 +253,8 @@ NSDictionary *alert = [aps objectForKey:@"alert"]; if(alert != nil) { NSString *loc_key = [alert objectForKey:@"loc-key"]; - /*if we receive a remote notification, it is because our TCP background socket was no more working. - As a result, break it and refresh registers in order to make sure to receive incoming INVITE or MESSAGE*/ + //if we receive a remote notification, it is because our TCP background socket was no more working. + //As a result, break it and refresh registers in order to make sure to receive incoming INVITE or MESSAGE LinphoneCore *lc = [LinphoneManager getLc]; linphone_core_set_network_reachable(lc, FALSE); linphone_core_set_network_reachable(lc, TRUE); diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index e10a05f43..ba4fff9f9 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -464,6 +464,14 @@ static void linphone_iphone_registration_state(LinphoneCore *lc, LinphoneProxyCo [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneTextReceived object:self userInfo:dict]; [chat release]; */ + + // Post event + NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: + [NSValue valueWithPointer:room], @"room", + [NSValue valueWithPointer:from], @"from", + [NSString stringWithUTF8String:message], @"message", + nil]; + [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneTextReceived object:self userInfo:dict]; } static void linphone_iphone_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message) { @@ -1330,9 +1338,6 @@ static void audioRouteChangeListenerCallback ( } { NSString *ringtone = [[NSUserDefaults standardUserDefaults] stringForKey:@"ringtone_preference"]; - if(ringtone == nil) { - ringtone = @"ringtone_01_1600"; - } NSString *path = [[NSBundle mainBundle] pathForResource:ringtone ofType:@"wav"]; sounds.call = 0; OSStatus status = AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &sounds.call); @@ -1345,9 +1350,6 @@ static void audioRouteChangeListenerCallback ( } { NSString *ringtone = [[NSUserDefaults standardUserDefaults] stringForKey:@"level_ringtone_preference"]; - if(ringtone == nil) { - ringtone = @"ringtone_01_1600"; - } NSString *path = [[NSBundle mainBundle] pathForResource:ringtone ofType:@"wav"]; sounds.level = 0; OSStatus status = AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &sounds.level); diff --git a/Classes/Model/LevelPushButton.h b/Classes/Model/LevelPushButton.h new file mode 100644 index 000000000..e17a4b2a8 --- /dev/null +++ b/Classes/Model/LevelPushButton.h @@ -0,0 +1,29 @@ +/* LevelPushButton.h + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import + +@interface LevelPushButton : NSObject + +@property (copy) NSString* name; + +- (NSString*)write; ++ (id)parse:(NSString*)section array:(NSArray*)array; + +@end diff --git a/Classes/Model/LevelPushButton.m b/Classes/Model/LevelPushButton.m new file mode 100644 index 000000000..f235f33c0 --- /dev/null +++ b/Classes/Model/LevelPushButton.m @@ -0,0 +1,59 @@ +/* LevelPushButton.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 "LevelPushButton.h" +#import "BuschJaegerConfiguration.h" +#import "Utils.h" + +@implementation LevelPushButton + +@synthesize name; + +- (void)dealloc { + [name release]; + + [super dealloc]; +} + +- (NSString*)write { + NSMutableString *str = [NSMutableString string]; + [str appendString:[NSString stringWithFormat:@"\n[levelpushbutton]\n"]]; + [str appendString:[NSString stringWithFormat:@"name=%@\n", name]]; + return str; +} + ++ (id)parse:(NSString*)section array:(NSArray*)array { + NSString *param; + LevelPushButton *net = nil; + if((param = [BuschJaegerConfiguration getRegexValue:@"^\\[(levelpushbutton)\\]$" data:section]) != nil) { + net = [[[LevelPushButton alloc] init] autorelease]; + NSString *param; + for(NSString *entry in array) { + if((param = [BuschJaegerConfiguration getRegexValue:@"^name=(.*)$" data:entry]) != nil) { + net.name = param; + } else if([[entry stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] != 0){ + [LinphoneLogger log:LinphoneLoggerWarning format:@"Unknown entry in %@ section: %@", section, entry]; + } + } + } + + return net; +} + +@end diff --git a/Classes/Model/Network.m b/Classes/Model/Network.m index 7848ade76..c520f1e32 100644 --- a/Classes/Model/Network.m +++ b/Classes/Model/Network.m @@ -41,6 +41,16 @@ global-history=http://welcome.dyndns.org:8080/history.ini */ +- (void)dealloc { + [domain release]; + [localAddress release]; + [globalAddress release]; + [localHistory release]; + [globalHistory release]; + + [super dealloc]; +} + - (NSString*)write { NSMutableString *str = [NSMutableString string]; [str appendString:[NSString stringWithFormat:@"\n[network]\n"]]; diff --git a/Resources/ringtone_01_1600_loop.wav b/Resources/ringtone_01_1600_loop.wav new file mode 100644 index 000000000..01f81e9cc Binary files /dev/null and b/Resources/ringtone_01_1600_loop.wav differ diff --git a/Resources/ringtone_02_1600_loop.wav b/Resources/ringtone_02_1600_loop.wav new file mode 100644 index 000000000..2b4f67673 Binary files /dev/null and b/Resources/ringtone_02_1600_loop.wav differ diff --git a/Resources/ringtone_03_1600_loop.wav b/Resources/ringtone_03_1600_loop.wav new file mode 100644 index 000000000..c69bae432 Binary files /dev/null and b/Resources/ringtone_03_1600_loop.wav differ diff --git a/Resources/ringtone_04_1600_loop.wav b/Resources/ringtone_04_1600_loop.wav new file mode 100644 index 000000000..386d55032 Binary files /dev/null and b/Resources/ringtone_04_1600_loop.wav differ diff --git a/Resources/ringtone_05_1600_loop.wav b/Resources/ringtone_05_1600_loop.wav new file mode 100644 index 000000000..9aef4c5f4 Binary files /dev/null and b/Resources/ringtone_05_1600_loop.wav differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index a434b9690..ccf388e6f 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -126,6 +126,18 @@ D32B6E2F15A5C0AC0033019F /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D32B6E2E15A5C0AC0033019F /* libsqlite3.dylib */; }; D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */; }; D32B9DFD15A2F131000B6DEC /* FastAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */; }; + D32EDD9B1600C450009A84C7 /* LevelPushButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32EDD9A1600C450009A84C7 /* LevelPushButton.m */; }; + D32EDD9C1600C450009A84C7 /* LevelPushButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32EDD9A1600C450009A84C7 /* LevelPushButton.m */; }; + D32EDDA31600C8FC009A84C7 /* ringtone_01_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDD9E1600C8FC009A84C7 /* ringtone_01_1600_loop.wav */; }; + D32EDDA41600C8FC009A84C7 /* ringtone_01_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDD9E1600C8FC009A84C7 /* ringtone_01_1600_loop.wav */; }; + D32EDDA51600C8FC009A84C7 /* ringtone_02_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDD9F1600C8FC009A84C7 /* ringtone_02_1600_loop.wav */; }; + D32EDDA61600C8FC009A84C7 /* ringtone_02_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDD9F1600C8FC009A84C7 /* ringtone_02_1600_loop.wav */; }; + D32EDDA71600C8FC009A84C7 /* ringtone_03_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA01600C8FC009A84C7 /* ringtone_03_1600_loop.wav */; }; + D32EDDA81600C8FC009A84C7 /* ringtone_03_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA01600C8FC009A84C7 /* ringtone_03_1600_loop.wav */; }; + D32EDDA91600C8FC009A84C7 /* ringtone_04_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA11600C8FC009A84C7 /* ringtone_04_1600_loop.wav */; }; + D32EDDAA1600C8FC009A84C7 /* ringtone_04_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA11600C8FC009A84C7 /* ringtone_04_1600_loop.wav */; }; + D32EDDAB1600C8FC009A84C7 /* ringtone_05_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA21600C8FC009A84C7 /* ringtone_05_1600_loop.wav */; }; + D32EDDAC1600C8FC009A84C7 /* ringtone_05_1600_loop.wav in Resources */ = {isa = PBXBuildFile; fileRef = D32EDDA21600C8FC009A84C7 /* ringtone_05_1600_loop.wav */; }; D33BEE1F15FF711B004ED2AF /* linphonerc-factory in Resources */ = {isa = PBXBuildFile; fileRef = D33BEE1C15FF711B004ED2AF /* linphonerc-factory */; }; D33BEE2015FF711B004ED2AF /* linphonerc-factory in Resources */ = {isa = PBXBuildFile; fileRef = D33BEE1C15FF711B004ED2AF /* linphonerc-factory */; }; D33BEE2115FF711B004ED2AF /* linphonerc-factory~ipad in Resources */ = {isa = PBXBuildFile; fileRef = D33BEE1D15FF711B004ED2AF /* linphonerc-factory~ipad */; }; @@ -579,6 +591,13 @@ D32B6E2E15A5C0AC0033019F /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FastAddressBook.h; path = Utils/FastAddressBook.h; sourceTree = ""; }; D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FastAddressBook.m; path = Utils/FastAddressBook.m; sourceTree = ""; }; + D32EDD991600C450009A84C7 /* LevelPushButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LevelPushButton.h; path = Model/LevelPushButton.h; sourceTree = ""; }; + D32EDD9A1600C450009A84C7 /* LevelPushButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LevelPushButton.m; path = Model/LevelPushButton.m; sourceTree = ""; }; + D32EDD9E1600C8FC009A84C7 /* ringtone_01_1600_loop.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_01_1600_loop.wav; path = Resources/ringtone_01_1600_loop.wav; sourceTree = ""; }; + D32EDD9F1600C8FC009A84C7 /* ringtone_02_1600_loop.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_02_1600_loop.wav; path = Resources/ringtone_02_1600_loop.wav; sourceTree = ""; }; + D32EDDA01600C8FC009A84C7 /* ringtone_03_1600_loop.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_03_1600_loop.wav; path = Resources/ringtone_03_1600_loop.wav; sourceTree = ""; }; + D32EDDA11600C8FC009A84C7 /* ringtone_04_1600_loop.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_04_1600_loop.wav; path = Resources/ringtone_04_1600_loop.wav; sourceTree = ""; }; + D32EDDA21600C8FC009A84C7 /* ringtone_05_1600_loop.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_05_1600_loop.wav; path = Resources/ringtone_05_1600_loop.wav; sourceTree = ""; }; D33BEE1C15FF711B004ED2AF /* linphonerc-factory */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "linphonerc-factory"; path = "Resources/linphonerc-factory"; sourceTree = ""; }; D33BEE1D15FF711B004ED2AF /* linphonerc-factory~ipad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "linphonerc-factory~ipad"; path = "Resources/linphonerc-factory~ipad"; sourceTree = ""; }; D33BEE1E15FF711B004ED2AF /* rootca.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rootca.pem; path = Resources/rootca.pem; sourceTree = ""; }; @@ -1289,10 +1308,15 @@ D33BEE1D15FF711B004ED2AF /* linphonerc-factory~ipad */, D321FF9815E628CB0098B5F4 /* linphonerc~ipad */, D376EAE316008454007C8226 /* ringtone_01_1600.wav */, + D32EDD9E1600C8FC009A84C7 /* ringtone_01_1600_loop.wav */, D376EAE416008454007C8226 /* ringtone_02_1600.wav */, + D32EDD9F1600C8FC009A84C7 /* ringtone_02_1600_loop.wav */, D376EAE516008454007C8226 /* ringtone_03_1600.wav */, + D32EDDA01600C8FC009A84C7 /* ringtone_03_1600_loop.wav */, D376EAE616008454007C8226 /* ringtone_04_1600.wav */, + D32EDDA11600C8FC009A84C7 /* ringtone_04_1600_loop.wav */, D376EAE716008454007C8226 /* ringtone_05_1600.wav */, + D32EDDA21600C8FC009A84C7 /* ringtone_05_1600_loop.wav */, D33BEE1E15FF711B004ED2AF /* rootca.pem */, D376EAF716009E2A007C8226 /* snapshot.png */, D376EAE0160082A4007C8226 /* trash.png */, @@ -1333,6 +1357,8 @@ children = ( D384468715E65CFE00DF89DF /* History.h */, D384468815E65CFE00DF89DF /* History.m */, + D32EDD991600C450009A84C7 /* LevelPushButton.h */, + D32EDD9A1600C450009A84C7 /* LevelPushButton.m */, D383A44C15E3C98C00CDE5C9 /* Network.h */, D383A44D15E3C98C00CDE5C9 /* Network.m */, D37CD35115E22A470028869A /* OutdoorStation.h */, @@ -1548,6 +1574,11 @@ D376EAF016008454007C8226 /* ringtone_05_1600.wav in Resources */, D376EAF816009E2A007C8226 /* bj_save.png in Resources */, D376EAFA16009E2A007C8226 /* snapshot.png in Resources */, + D32EDDA31600C8FC009A84C7 /* ringtone_01_1600_loop.wav in Resources */, + D32EDDA51600C8FC009A84C7 /* ringtone_02_1600_loop.wav in Resources */, + D32EDDA71600C8FC009A84C7 /* ringtone_03_1600_loop.wav in Resources */, + D32EDDA91600C8FC009A84C7 /* ringtone_04_1600_loop.wav in Resources */, + D32EDDAB1600C8FC009A84C7 /* ringtone_05_1600_loop.wav in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1602,6 +1633,11 @@ D376EAF116008454007C8226 /* ringtone_05_1600.wav in Resources */, D376EAF916009E2A007C8226 /* bj_save.png in Resources */, D376EAFB16009E2A007C8226 /* snapshot.png in Resources */, + D32EDDA41600C8FC009A84C7 /* ringtone_01_1600_loop.wav in Resources */, + D32EDDA61600C8FC009A84C7 /* ringtone_02_1600_loop.wav in Resources */, + D32EDDA81600C8FC009A84C7 /* ringtone_03_1600_loop.wav in Resources */, + D32EDDAA1600C8FC009A84C7 /* ringtone_04_1600_loop.wav in Resources */, + D32EDDAC1600C8FC009A84C7 /* ringtone_05_1600_loop.wav in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1687,6 +1723,7 @@ D3FE9F4415E78D720024F3E4 /* BuschJaegerHistoryDetailsView.m in Sources */, D3FE9F4B15E790D80024F3E4 /* UIHistoryDetailsCell.m in Sources */, D376EAF416008DF1007C8226 /* User.m in Sources */, + D32EDD9B1600C450009A84C7 /* LevelPushButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1740,6 +1777,7 @@ D3FE9F4515E78D720024F3E4 /* BuschJaegerHistoryDetailsView.m in Sources */, D3FE9F4C15E790D80024F3E4 /* UIHistoryDetailsCell.m in Sources */, D376EAF516008DF1007C8226 /* User.m in Sources */, + D32EDD9C1600C450009A84C7 /* LevelPushButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };