// // LoginViewController.m // Juick // // Created by Vitaly on 30.01.14. // Copyright (c) 2014 com.juick. All rights reserved. // #import "LoginViewController.h" #import "User.h" NSString * const UserChangedNotificationName = @"UserSignedIn"; @interface LoginViewController() @property (nonatomic, assign) int paddingValue; -(void) refreshState; @end @implementation LoginViewController - (void) awakeFromNib { [super awakeFromNib]; [self.view setBackgroundColor:[UIColor colorNamed:@"Background"]]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelSignIn)]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(doneSignIn)]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; [self.authorizationField.button addTarget:self action:@selector(signInWithApple) forControlEvents:UIControlEventTouchUpInside]; } - (void)viewWillAppear:(BOOL)animated { [self refreshState]; } -(void) keyboardDidShow:(NSNotification *)sender { CGRect keyboardRect = [sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; self.bottomConstraint.constant = keyboardRect.size.height - self.view.safeAreaInsets.bottom + self.paddingValue; [self.view layoutIfNeeded]; } -(void) keyboardWillHide:(NSNotification *)sender { self.bottomConstraint.constant = self.paddingValue; [self.view layoutIfNeeded]; } - (void) cancelSignIn { [self.navigationController dismissViewControllerAnimated:YES completion:nil]; } - (void) doneSignIn { [[NSURLCache sharedURLCache] removeAllCachedResponses]; [[AppDelegate shared].api authenticateWithUser:self.usernameField.text password:self.passwordField.text callback:^(BOOL success){ if (success) { [[NSNotificationCenter defaultCenter] postNotificationName:UserChangedNotificationName object:nil]; [[AppDelegate shared] registerForRemoteNotifications]; [self.navigationController dismissViewControllerAnimated:YES completion:nil]; } }]; } - (void)refreshState { if ([AppDelegate shared].api.currentUser) { self.title = @"Profile"; [self.authorizationField setHidden:YES]; [self.usernameField setHidden:YES]; [self.passwordField setHidden:YES]; [self.currentUser setHidden:NO]; self.currentUser.text = [AppDelegate shared].api.currentUser.uname; __weak UIImageView *weakAttach = self.imageView; [[AppDelegate shared].api fetchImageWithURL:[NSURL URLWithString:[AppDelegate shared].api.currentUser.avatar] callback:^(NSData *data) { [UIView transitionWithView:weakAttach duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ weakAttach.image = [UIImage imageWithData:data]; } completion:nil]; }]; [self.signOutButton setHidden:NO]; } else { self.title = @"Sign in"; self.imageView.image = [UIImage imageNamed:@"Splash"]; [self.authorizationField setHidden:NO]; [self.usernameField setHidden:NO]; [self.passwordField setHidden:NO]; [self.currentUser setHidden:YES]; [self.signOutButton setHidden:YES]; } } - (IBAction)signoutPressed:(id)sender { [[AppDelegate shared].api signout]; [[NSURLCache sharedURLCache] removeAllCachedResponses]; [self.navigationController dismissViewControllerAnimated:YES completion:^{ [[NSNotificationCenter defaultCenter] postNotificationName:UserChangedNotificationName object:nil]; }]; } - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization { NSLog(@""); } - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error { NSLog(@""); } -(void) signInWithApple { ASAuthorizationAppleIDProvider *appleIDProvider = [ASAuthorizationAppleIDProvider new]; ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail]; ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; authorizationController.delegate = self; authorizationController.presentationContextProvider = self; [authorizationController performRequests]; } @end