/* * Copyright (C) 2013-2015 RoboVM AB * * 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. * * Portions of this code is based on Parse's AnyPic sample * which is copyright (C) 2013 Parse. */ package org.robovm.samples.robopods.parse.anypic.ios.ui.controllers.login; import java.util.Arrays; import org.robovm.apple.coregraphics.CGRect; import org.robovm.apple.foundation.NSError; import org.robovm.apple.uikit.UIAlertView; import org.robovm.apple.uikit.UIApplication; import org.robovm.apple.uikit.UIImage; import org.robovm.apple.uikit.UIImageView; import org.robovm.apple.uikit.UIScreen; import org.robovm.apple.uikit.UIStatusBarStyle; import org.robovm.apple.uikit.UIViewController; import org.robovm.pods.facebook.core.FBSDKAccessToken; import org.robovm.pods.facebook.core.FBSDKError; import org.robovm.pods.facebook.core.FBSDKErrorCode; import org.robovm.pods.facebook.login.FBSDKLoginButton; import org.robovm.pods.facebook.login.FBSDKLoginButtonDelegate; import org.robovm.pods.facebook.login.FBSDKLoginButtonTooltipBehavior; import org.robovm.pods.facebook.login.FBSDKLoginManagerLoginResult; import org.robovm.pods.parse.PFFacebookUtils; import org.robovm.pods.parse.PFLogInCallback; import org.robovm.pods.parse.PFUser; import org.robovm.samples.robopods.parse.anypic.ios.AnyPicApp; import org.robovm.samples.robopods.parse.anypic.ios.model.PAPUser; import org.robovm.samples.robopods.parse.anypic.ios.util.Log; public class PAPLoginViewController extends UIViewController implements FBSDKLoginButtonDelegate { private PAPLogInViewControllerDelegate delegate; private FBSDKLoginButton facebookLoginButton; @Override public void viewDidLoad() { super.viewDidLoad(); UIImageView backgroundImageView = new UIImageView(UIScreen.getMainScreen().getApplicationFrame()); backgroundImageView.setImage(UIImage.getImage("BackgroundLogin")); getView().addSubview(backgroundImageView); // Position of the Facebook button double yPosition = 360; if (UIScreen.getMainScreen().getBounds().getSize().getHeight() > 480f) { yPosition = 450; } facebookLoginButton = new FBSDKLoginButton(); facebookLoginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_photos")); facebookLoginButton.setFrame(new CGRect((UIScreen.getMainScreen().getBounds().getWidth() - 244) / 2, yPosition, 244, 44)); facebookLoginButton.setDelegate(this); facebookLoginButton.setTooltipBehavior(FBSDKLoginButtonTooltipBehavior.Disable); getView().addSubview(facebookLoginButton); } @Override public UIStatusBarStyle getPreferredStatusBarStyle() { return UIStatusBarStyle.LightContent; } @Override public void didComplete(FBSDKLoginButton loginButton, FBSDKLoginManagerLoginResult result, NSError error) { if (error != null) { handleLogInError(error); } else { handleLogIn(result); } } @Override public void didLogOut(FBSDKLoginButton loginButton) { PFUser.logOut(); } private void handleLogIn(FBSDKLoginManagerLoginResult result) { if (!result.isCancelled() && result.getToken() != null) { if (PAPUser.getCurrentUser() != null) { if (delegate != null) { delegate.didLogin(this); } return; } FBSDKAccessToken accessToken = FBSDKAccessToken.getCurrentAccessToken(); String facebookUserId = accessToken.getUserID(); if (accessToken == null || facebookUserId == null) { Log.e("Login failure. FB Access Token or user ID does not exist"); return; } // self.hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; TODO PFFacebookUtils.logInInBackground(accessToken, new PFLogInCallback() { @Override public void done(PFUser user, NSError error) { if (error == null) { // [self.hud removeFromSuperview]; TODO if (delegate != null) { delegate.didLogin(PAPLoginViewController.this); } } else { cancelLogIn(error); } } }); } } private void cancelLogIn(NSError error) { if (error != null) { handleLogInError(error); } // [self.hud removeFromSuperview]; TODO PFFacebookUtils.getFacebookLoginManager().logOut(); PFUser.logOut(); ((AnyPicApp) UIApplication.getSharedApplication().getDelegate()).presentLoginViewController(false); } private void handleLogInError(NSError error) { Log.e("Error: %s", error); if (error instanceof FBSDKError) { FBSDKError e = (FBSDKError) error; String title = "Login Error"; String message = "Something went wrong. Please try again."; String ok = "OK"; if (e.getErrorCode() == FBSDKErrorCode.Network) { title = "Offile Error"; } UIAlertView alertView = new UIAlertView(title, message, null, ok); alertView.show(); } } public void setDelegate(PAPLogInViewControllerDelegate delegate) { this.delegate = delegate; } @Override public boolean willLogin(FBSDKLoginButton button) { return true; } }