diff --git a/Classes/FirstLoginView.h b/Classes/FirstLoginView.h new file mode 100644 index 000000000..2b3e2c33a --- /dev/null +++ b/Classes/FirstLoginView.h @@ -0,0 +1,36 @@ +/* FirstLoginViewController.h + * + * Copyright (C) 2011 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 + +#import "UICompositeView.h" + +@interface FirstLoginView : UIViewController { +} + +- (IBAction)onLoginClick:(id)sender; +- (IBAction)onSiteClick:(id)sender; + +@property(nonatomic, strong) IBOutlet UIButton *loginButton; +@property(nonatomic, strong) IBOutlet UIButton *siteButton; +@property(nonatomic, strong) IBOutlet UITextField *usernameField; +@property(nonatomic, strong) IBOutlet UITextField *passwordField; +@property(nonatomic, strong) IBOutlet UIView *waitView; + +@end diff --git a/Classes/FirstLoginView.m b/Classes/FirstLoginView.m new file mode 100644 index 000000000..aba233c3f --- /dev/null +++ b/Classes/FirstLoginView.m @@ -0,0 +1,178 @@ +/* FirstLoginViewController.m + * + * Copyright (C) 2011 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 "LinphoneManager.h" +#import "FirstLoginView.h" +#import "LinphoneManager.h" +#import "PhoneMainView.h" + +@implementation FirstLoginView + +#pragma mark - UICompositeViewDelegate Functions + +static UICompositeViewDescription *compositeDescription = nil; + ++ (UICompositeViewDescription *)compositeViewDescription { + if (compositeDescription == nil) { + compositeDescription = [[UICompositeViewDescription alloc] init:self.class + statusBar:nil + tabBar:nil + sideMenu:nil + fullscreen:false + landscapeMode:LinphoneManager.runningOnIpad + portraitMode:true]; + } + return compositeDescription; +} + +- (UICompositeViewDescription *)compositeViewDescription { + return self.class.compositeViewDescription; +} + +#pragma mark - ViewController Functions + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // Set observer + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(registrationUpdateEvent:) + name:kLinphoneRegistrationUpdate + object:nil]; + + [_usernameField setText:[[LinphoneManager instance] lpConfigStringForKey:@"assistant_username"]]; + [_passwordField setText:[[LinphoneManager instance] lpConfigStringForKey:@"assistant_password"]]; + + // Update on show + const MSList *list = linphone_core_get_proxy_config_list([LinphoneManager getLc]); + if (list != NULL) { + LinphoneProxyConfig *config = (LinphoneProxyConfig *)list->data; + if (config) { + [self registrationUpdate:linphone_proxy_config_get_state(config)]; + } + } +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + // Remove observer + [[NSNotificationCenter defaultCenter] removeObserver:self name:kLinphoneRegistrationUpdate object:nil]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + NSString *siteUrl = [[LinphoneManager instance] lpConfigStringForKey:@"first_login_view_url"]; + if (siteUrl == nil) { + siteUrl = @"http://www.linphone.org"; + } + [_siteButton setTitle:siteUrl forState:UIControlStateNormal]; +} + +#pragma mark - Event Functions + +- (void)registrationUpdateEvent:(NSNotification *)notif { + [self registrationUpdate:[[notif.userInfo objectForKey:@"state"] intValue]]; +} + +#pragma mark - + +- (void)registrationUpdate:(LinphoneRegistrationState)state { + switch (state) { + case LinphoneRegistrationOk: { + [[LinphoneManager instance] lpConfigSetBool:FALSE forKey:@"enable_first_login_view_preference"]; + [_waitView setHidden:true]; + [PhoneMainView.instance changeCurrentView:DialerView.compositeViewDescription]; + break; + } + case LinphoneRegistrationNone: + case LinphoneRegistrationCleared: { + [_waitView setHidden:true]; + break; + } + case LinphoneRegistrationFailed: { + [_waitView setHidden:true]; + + // erase uername passwd + [[LinphoneManager instance] lpConfigSetString:nil forKey:@"assistant_username"]; + [[LinphoneManager instance] lpConfigSetString:nil forKey:@"assistant_password"]; + break; + } + case LinphoneRegistrationProgress: { + [_waitView setHidden:false]; + break; + } + default: + break; + } +} + +#pragma mark - Action Functions + +- (void)onSiteClick:(id)sender { + NSURL *url = [NSURL URLWithString:_siteButton.titleLabel.text]; + [[UIApplication sharedApplication] openURL:url]; + return; +} + +- (void)onLoginClick:(id)sender { + NSString *errorMessage = nil; + if ([_usernameField.text length] == 0) { + errorMessage = NSLocalizedString(@"Enter your username", nil); + } else if ([_passwordField.text length] == 0) { + errorMessage = NSLocalizedString(@"Enter your password", nil); + } + + if (errorMessage != nil) { + UIAlertView *error = nil; + error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert", nil) + message:errorMessage + delegate:nil + cancelButtonTitle:NSLocalizedString(@"Continue", nil) + otherButtonTitles:nil]; + [error show]; + } else { + linphone_core_clear_all_auth_info([LinphoneManager getLc]); + linphone_core_clear_proxy_config([LinphoneManager getLc]); + LinphoneProxyConfig *proxyCfg = linphone_core_create_proxy_config([LinphoneManager getLc]); + /*default domain is supposed to be preset from linphonerc*/ + NSString *identity = + [NSString stringWithFormat:@"sip:%@@%s", _usernameField.text, linphone_proxy_config_get_addr(proxyCfg)]; + linphone_proxy_config_set_identity(proxyCfg, [identity UTF8String]); + LinphoneAuthInfo *auth_info = linphone_auth_info_new( + [_usernameField.text UTF8String], [_usernameField.text UTF8String], [_passwordField.text UTF8String], NULL, + NULL, linphone_proxy_config_get_domain(proxyCfg)); + linphone_core_add_auth_info([LinphoneManager getLc], auth_info); + linphone_core_add_proxy_config([LinphoneManager getLc], proxyCfg); + linphone_core_set_default_proxy_config([LinphoneManager getLc], proxyCfg); + // reload address book to prepend proxy config domain to contacts' phone number + [[[LinphoneManager instance] fastAddressBook] reload]; + [_waitView setHidden:false]; + }; +} + +#pragma mark - UITextFieldDelegate Functions + +- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { + // When the user presses return, take focus away from the text field so that the keyboard is dismissed. + [theTextField resignFirstResponder]; + return YES; +} + +@end diff --git a/Classes/FirstLoginView.xib b/Classes/FirstLoginView.xib new file mode 100644 index 000000000..7693bbc4d --- /dev/null +++ b/Classes/FirstLoginView.xib @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 7bced3c0e..d5d89cb9e 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -79,6 +79,8 @@ 63058AE01B4E937300EFAE36 /* sounds in Resources */ = {isa = PBXBuildFile; fileRef = 63058ACE1B4E922500EFAE36 /* sounds */; }; 63058AE21B4E93A100EFAE36 /* tester_hosts in Resources */ = {isa = PBXBuildFile; fileRef = 63058AE11B4E93A100EFAE36 /* tester_hosts */; }; 63058AE31B4E93B300EFAE36 /* tester_hosts in Resources */ = {isa = PBXBuildFile; fileRef = 63058AE11B4E93A100EFAE36 /* tester_hosts */; }; + 6306440E1BECB08500134C72 /* FirstLoginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6306440C1BECB08500134C72 /* FirstLoginView.m */; }; + 6306440F1BECB08500134C72 /* FirstLoginView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6306440D1BECB08500134C72 /* FirstLoginView.xib */; }; 630CF5571AF7CE1500539F7A /* UITextField+DoneButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 630CF5561AF7CE1500539F7A /* UITextField+DoneButton.m */; }; 631348301B6F7B6600C6BDCB /* UIRoundBorderedButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6313482F1B6F7B6600C6BDCB /* UIRoundBorderedButton.m */; }; 631348321B6FA53300C6BDCB /* rootca.pem in Resources */ = {isa = PBXBuildFile; fileRef = 631348311B6FA53300C6BDCB /* rootca.pem */; }; @@ -885,6 +887,9 @@ 63058ACE1B4E922500EFAE36 /* sounds */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sounds; path = ../submodules/linphone/tester/sounds; sourceTree = ""; }; 63058AE11B4E93A100EFAE36 /* tester_hosts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tester_hosts; path = submodules/linphone/tester/tester_hosts; sourceTree = SOURCE_ROOT; }; 63058AE41B4E952E00EFAE36 /* share */ = {isa = PBXFileReference; lastKnownFileType = folder; name = share; path = "../liblinphone-sdk/apple-darwin/share"; sourceTree = ""; }; + 6306440B1BECB08500134C72 /* FirstLoginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirstLoginView.h; sourceTree = ""; }; + 6306440C1BECB08500134C72 /* FirstLoginView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FirstLoginView.m; sourceTree = ""; }; + 6306440D1BECB08500134C72 /* FirstLoginView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FirstLoginView.xib; sourceTree = ""; }; 630CF5551AF7CE1500539F7A /* UITextField+DoneButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextField+DoneButton.h"; sourceTree = ""; }; 630CF5561AF7CE1500539F7A /* UITextField+DoneButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextField+DoneButton.m"; sourceTree = ""; }; 6313482E1B6F7B6600C6BDCB /* UIRoundBorderedButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRoundBorderedButton.h; sourceTree = ""; }; @@ -1775,6 +1780,9 @@ 22F2508B107141E100AC9B3F /* DialerView.h */, 22F2508C107141E100AC9B3F /* DialerView.m */, D38187C415FE345B00C3EDCA /* DialerView.xib */, + 6306440B1BECB08500134C72 /* FirstLoginView.h */, + 6306440C1BECB08500134C72 /* FirstLoginView.m */, + 6306440D1BECB08500134C72 /* FirstLoginView.xib */, 635775231B6673EC00C8B704 /* HistoryDetailsTableView.h */, 635775241B6673EC00C8B704 /* HistoryDetailsTableView.m */, C90FAA7615AF54E6002091CB /* HistoryDetailsView.h */, @@ -2969,6 +2977,7 @@ 639112BB1BE2532100E6C772 /* speaker_selected.png in Resources */, 6352A5761BE0D4B800594C1C /* CallSideMenuView.xib in Resources */, 639111DE1BE2532100E6C772 /* color_G.png in Resources */, + 6306440F1BECB08500134C72 /* FirstLoginView.xib in Resources */, 6391115C1BE2532100E6C772 /* add_field_over.png in Resources */, 639111961BE2532100E6C772 /* call_start_body_over.png in Resources */, 639111631BE2532100E6C772 /* back_disabled@2x.png in Resources */, @@ -3452,6 +3461,7 @@ D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */, D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */, D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */, + 6306440E1BECB08500134C72 /* FirstLoginView.m in Sources */, D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */, D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */, D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */,