photo-ios/Trovebox/AuthenticationViewController.m
2014-02-04 14:41:43 -02:00

210 lines
6.6 KiB
Objective-C

//
// AuthenticationViewController.m
// Trovebox
//
// Created by Patrick Santana on 07/09/11.
// Copyright 2013 Trovebox
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "AuthenticationViewController.h"
// Private interface definition
@interface AuthenticationViewController()
- (void) saveUrl:(NSString *) text;
- (void) eventHandler: (NSNotification *) notification;
@end
@implementation AuthenticationViewController
@synthesize serverURL = _serverURL;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//register to listen for to remove the login screen.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(eventHandler:)
name:kNotificationLoginAuthorize
object:nil ];
}
return self;
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationController setNavigationBarHidden:NO animated:YES];
self.screenName = @"Self-instance Login Screen";
}
- (void)viewDidUnload
{
[self setServerURL:nil];
[self setBackgroundServerUrl:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void) viewWillAppear:(BOOL)animated
{
// if ipad, lets centralize fields
if([DisplayUtilities isIPad]){
self.serverURL.center=self.backgroundServerUrl.center;
}
}
- (BOOL) shouldAutorotate
{
return YES;
}
- (NSUInteger) supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (IBAction)login:(id)sender {
#ifdef DEVELOPMENT_ENABLED
NSLog(@"Url Login %@",self.serverURL.text);
#endif
// check if the user typed something
if ( self.serverURL.text != nil &&
[self.serverURL.text isEqualToString:@"username.trovebox.com"]){
// user should add URL
PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please, set the URL to the Trovebox Server.",@"Used when user don't set the url for the hosted server") duration:5000];
[alert showAlert];
}else{
// save the url method. It removes the last / if exists
[self saveUrl:self.serverURL.text];
// to the login in the website
[[UIApplication sharedApplication] openURL:[[[AuthenticationService alloc]init] getOAuthInitialUrl]];
}
}
// Action if user clicks in DONE in the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
#ifdef DEVELOPMENT_ENABLED
NSLog(@"Url %@",self.serverURL.text);
#endif
// save the url method. It removes the last / if exists
[self saveUrl:textField.text];
// to the login
[[UIApplication sharedApplication] openURL:[[[AuthenticationService alloc]init] getOAuthInitialUrl]];
// return
[textField resignFirstResponder];
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
// we just move the view if it is 3.5 inch
if (![DisplayUtilities isIPad] && ![DisplayUtilities is4InchRetina]){
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
// move the view a little bit up
[self.view setCenter:CGPointMake([self.view center].x, [self.view center].y - 26)];
}completion:^(BOOL finished){
// just set the range after the move
[self setTextRange:textField];
}];
}else{
[self setTextRange:textField];
}
}
- (void) setTextRange:(UITextField *)textField
{
// get the actual range
UITextRange *selectedRange = [textField selectedTextRange];
//Calculate the new position, - for left and + for right
UITextPosition *fromPosition = [textField positionFromPosition:selectedRange.start offset:-21];
UITextPosition *toPosition = [textField positionFromPosition:selectedRange.start offset:0];
//Construct a new range and set in the textfield
UITextRange *newRange = [textField textRangeFromPosition:fromPosition toPosition:toPosition];
textField.selectedTextRange = newRange;
}
///////////////////////////////////
// PRIVATES METHODS
//////////////////////////////////
-(void) saveUrl:(NSString *) text{
// save the url for the app
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSURL *url;
if ([text rangeOfString:@"http://"].location == NSNotFound
&& [text rangeOfString:@"https://"].location == NSNotFound) {
#ifdef DEVELOPMENT_ENABLED
NSLog(@"URL does not contain http:// or https://");
#endif
NSString *urlString = [[NSString alloc] initWithFormat:@"http://%@",text];
url = [NSURL URLWithString:urlString];
}else{
url = [NSURL URLWithString:text];
}
// removes form the URL if it ends with "/"
NSString *server;
if ([[url lastPathComponent] isEqualToString:@"/"]){
server = [text stringByReplacingCharactersInRange:NSMakeRange(text.length-1, 1) withString:@""];
}else{
server = [url relativeString];
}
[standardUserDefaults setValue:[server lowercaseString] forKey:kTroveboxServer];
[standardUserDefaults setValue:@"owner" forKey:kTroveboxTypeUser];
[standardUserDefaults synchronize];
}
//event handler when event occurs
-(void)eventHandler: (NSNotification *) notification
{
#ifdef DEVELOPMENT_ENABLED
NSLog(@"###### Event triggered: %@", notification);
#endif
if ([notification.name isEqualToString:kNotificationLoginAuthorize]){
// we don't need the screen anymore
[self dismissViewControllerAnimated:YES completion:nil];
}
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end