From 5b42c667e737b9e49cc9da8a2b49fa3c0ebcda4f Mon Sep 17 00:00:00 2001 From: John Davis Date: Tue, 26 Nov 2013 20:22:38 -0500 Subject: [PATCH 1/2] Added auth window that is presented in a nice modal that is both iPhone and iPad compliant --- IOSLinkedInAPI/LIALinkedInAuthorization.xib | 72 +++++++++++++++++++ .../LIALinkedInAuthorizationViewController.h | 3 + .../LIALinkedInAuthorizationViewController.m | 69 +++++++++++++----- IOSLinkedInAPI/LIALinkedInHttpClient.m | 9 ++- 4 files changed, 134 insertions(+), 19 deletions(-) create mode 100644 IOSLinkedInAPI/LIALinkedInAuthorization.xib diff --git a/IOSLinkedInAPI/LIALinkedInAuthorization.xib b/IOSLinkedInAPI/LIALinkedInAuthorization.xib new file mode 100644 index 0000000..a7ba515 --- /dev/null +++ b/IOSLinkedInAPI/LIALinkedInAuthorization.xib @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h b/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h index 586487d..ef639e9 100644 --- a/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h +++ b/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.h @@ -29,4 +29,7 @@ typedef void(^LIAAuthorizationCodeFailureCallback)(NSError *errorReason); @interface LIALinkedInAuthorizationViewController : UIViewController - (id)initWithApplication:(LIALinkedInApplication *)application success:(LIAAuthorizationCodeSuccessCallback)success cancel:(LIAAuthorizationCodeCancelCallback)cancel failure:(LIAAuthorizationCodeFailureCallback)failure; + +- (IBAction)tappedRefreshButton:(id)sender; + @end diff --git a/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m b/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m index e60f0d2..8f59d56 100644 --- a/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m +++ b/IOSLinkedInAPI/LIALinkedInAuthorizationViewController.m @@ -22,16 +22,18 @@ #import "LIALinkedInAuthorizationViewController.h" #import "NSString+LIAEncode.h" +#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) + NSString *kLinkedInErrorDomain = @"LIALinkedInERROR"; NSString *kLinkedInDeniedByUser = @"the+user+denied+your+request"; @interface LIALinkedInAuthorizationViewController () -@property(nonatomic, strong) UIWebView *authenticationWebView; +@property(nonatomic, weak) IBOutlet UIWebView *authenticationWebView; +@property(nonatomic, weak) IBOutlet UILabel *loadingLabel; @property(nonatomic, copy) LIAAuthorizationCodeFailureCallback failureCallback; @property(nonatomic, copy) LIAAuthorizationCodeSuccessCallback successCallback; @property(nonatomic, copy) LIAAuthorizationCodeCancelCallback cancelCallback; @property(nonatomic, strong) LIALinkedInApplication *application; -@property(nonatomic, strong) UIActivityIndicatorView *activityIndicatorView; @end @interface LIALinkedInAuthorizationViewController (UIWebViewDelegate) @@ -64,20 +66,19 @@ - (id)initWithApplication:(LIALinkedInApplication *)application success:(LIAAuth - (void)viewDidLoad { [super viewDidLoad]; - self.view.backgroundColor = [UIColor whiteColor]; - - self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - self.activityIndicatorView.center = self.view.center; - self.activityIndicatorView.hidesWhenStopped = YES; - [self.activityIndicatorView startAnimating]; - [self.view addSubview:self.activityIndicatorView]; - - self.authenticationWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; - self.authenticationWebView.delegate = self; - self.authenticationWebView.hidden = YES; - [self.view addSubview:self.authenticationWebView]; - - self.navigationController.navigationBarHidden = YES; + + if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { + + self.edgesForExtendedLayout = UIRectEdgeNone; + } + + self.view = [[[NSBundle mainBundle] loadNibNamed:@"LIALinkedInAuthorization" owner:self options:nil] objectAtIndex:0]; + + UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(tappedCancelButton:)]; + self.navigationItem.leftBarButtonItem = cancelButton; + + self.authenticationWebView.scalesPageToFit = YES; + } - (void)viewDidAppear:(BOOL)animated { @@ -85,6 +86,19 @@ - (void)viewDidAppear:(BOOL)animated { [self.authenticationWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:linkedIn]]]; } +#pragma mark UI Action Methods + +- (void)tappedCancelButton:(id)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (IBAction)tappedRefreshButton:(id)sender { + + [self.loadingLabel setAlpha:1.0]; + [self.authenticationWebView reload]; +} + @end @implementation LIALinkedInAuthorizationViewController (UIWebViewDelegate) @@ -138,8 +152,27 @@ - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { } - (void)webViewDidFinishLoad:(UIWebView *)webView { - [self.activityIndicatorView stopAnimating]; - self.authenticationWebView.hidden = NO; + + + /*fix for the LinkedIn Auth window - it doesn't scale right when placed into + a webview inside of a form sheet modal. If we transform the HTML of the page + a bit, and fix the viewport to 540px (the width of the form sheet), the problem + is solved. + */ + if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + NSString* js = + @"var meta = document.createElement('meta'); " + @"meta.setAttribute( 'name', 'viewport' ); " + @"meta.setAttribute( 'content', 'width = 540px, initial-scale = 1.0, user-scalable = yes' ); " + @"document.getElementsByTagName('head')[0].appendChild(meta)"; + + [webView stringByEvaluatingJavaScriptFromString: js]; + } + + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:1.0]; + [self.loadingLabel setAlpha:0]; + [UIView commitAnimations]; } @end \ No newline at end of file diff --git a/IOSLinkedInAPI/LIALinkedInHttpClient.m b/IOSLinkedInAPI/LIALinkedInHttpClient.m index 94325bc..8b36dfe 100755 --- a/IOSLinkedInAPI/LIALinkedInHttpClient.m +++ b/IOSLinkedInAPI/LIALinkedInHttpClient.m @@ -117,7 +117,14 @@ - (void)getAuthorizationCode:(void (^)(NSString *))success cancel:(void (^)(void - (void)showAuthorizationView:(LIALinkedInAuthorizationViewController *)authorizationViewController { if (self.presentingViewController == nil) self.presentingViewController = [[UIApplication sharedApplication] keyWindow].rootViewController; - [self.presentingViewController presentViewController:authorizationViewController animated:YES completion:nil]; + + UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:authorizationViewController]; + + if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + nc.modalPresentationStyle = UIModalPresentationFormSheet; + } + + [self.presentingViewController presentViewController:nc animated:YES completion:nil]; } - (void)hideAuthenticateView { From aab748158d1cc8be380532ce2d7118c9367fc3f9 Mon Sep 17 00:00:00 2001 From: John Davis Date: Wed, 27 Nov 2013 08:49:18 -0500 Subject: [PATCH 2/2] Adding icons --- IOSLinkedInAPI/Resources/01-refresh.png | Bin 0 -> 375 bytes IOSLinkedInAPI/Resources/01-refresh@2x.png | Bin 0 -> 714 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 IOSLinkedInAPI/Resources/01-refresh.png create mode 100644 IOSLinkedInAPI/Resources/01-refresh@2x.png diff --git a/IOSLinkedInAPI/Resources/01-refresh.png b/IOSLinkedInAPI/Resources/01-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..70f88310eb134872b0bbffbbeffd796bc2affefa GIT binary patch literal 375 zcmV--0f_#IP)fIR*w2xCpsKi%5F}eF4L*=mT7nxaC-4Q&8k`ElnEX zU{lZ#K|`R!!9DTs&C0v;yyr;<^3c7E&N9|r$Z?!E=Ycnh@9yL%8s@#zb=aDT^mEy! zK|Z*WUT*l|z&CGwQgl2rmR_#=srK5m6NzPfbS?dy@maCwZvL?3iIW+`Q$@$E{N+>z zGht7$lu@{^`08{<;g#ZXM&pa(W{zRpwDG82%rUglj@r2l<*eUgUon}XOe*$cOR
    0=?8AaFC97$7GF%u2jinb~Psk9Z_8cEEmJy)fV%9`42YFcV-%^afX zy;>^=R5sMQ)-9TH$&^Lwx@sG${G+nsXe+ApGH+MEUAHrsF>_Y!=%8cAsySo%&o468 Vr_#;M$n*dJ002ovPDHLkV1iizwEh49 literal 0 HcmV?d00001 diff --git a/IOSLinkedInAPI/Resources/01-refresh@2x.png b/IOSLinkedInAPI/Resources/01-refresh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f3f4d1b2c260875ae3153610eb961259efa966 GIT binary patch literal 714 zcmV;*0yX`KP)UE{AvRG%h?nsOjE;L7??TNY z-o__TcfF3kLtXMDT1^*SR3pL<)JYH05q1FBAtL-im3a_P@J~W8Dsi1Yj6z7GN?pfG zQE6cVRpUBdgW3=lP%WRc|;`lW#)RD$$+QDCMejBH$Grtvk$+k?`Ryxcw*?JLkynra# zQVbBx84fZ)ifmB|G_Dh34znaZR9S|r=pl*O9HIR-i*n}KD?^+i+Nmc@n0ne7B2I?A z<|)s$6NQ)|Uo+-IV6`z1laFBv?d_pWEaAiwO-?rGB05>ajx{792ve-E1;7?7Off>+|KAFK0f8^?IScf;=l}o!07*qoM6N<$f=%&4DgXcg literal 0 HcmV?d00001