@Override public void onClick(View v) { Context context = getContext(); final Session openSession = sessionTracker.getOpenSession(); if (openSession != null) { // If the Session is currently open, it must mean we need to log out if (confirmLogout) { // Create a confirmation dialog String logout = getResources().getString(R.string.com_facebook_loginview_log_out_action); String cancel = getResources().getString(R.string.com_facebook_loginview_cancel_action); String message; if (user != null && user.getName() != null) { message = String.format( getResources().getString(R.string.com_facebook_loginview_logged_in_as), user.getName()); } else { message = getResources().getString(R.string.com_facebook_loginview_logged_in_using_facebook); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder .setMessage(message) .setCancelable(true) .setPositiveButton( logout, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { openSession.closeAndClearTokenInformation(); } }) .setNegativeButton(cancel, null); builder.create().show(); } else { openSession.closeAndClearTokenInformation(); } } else { Session currentSession = sessionTracker.getSession(); if (currentSession == null || currentSession.getState().isClosed()) { sessionTracker.setSession(null); Session session = new Session.Builder(context).setApplicationId(applicationId).build(); Session.setActiveSession(session); currentSession = session; } if (!currentSession.isOpened()) { Session.OpenRequest openRequest = null; if (parentFragment != null) { openRequest = new Session.OpenRequest(parentFragment); } else if (context instanceof Activity) { openRequest = new Session.OpenRequest((Activity) context); } if (openRequest != null) { openRequest.setDefaultAudience(properties.defaultAudience); openRequest.setPermissions(properties.permissions); openRequest.setLoginBehavior(properties.loginBehavior); if (SessionAuthorizationType.PUBLISH.equals(properties.authorizationType)) { currentSession.openForPublish(openRequest); } else { currentSession.openForRead(openRequest); } } } } }
public void loginWithFacebook() { // start Facebook Login Session currentSession = Session.getActiveSession(); if (currentSession == null || currentSession.getState().isClosed()) { Session session = new Session.Builder(this).build(); Session.setActiveSession(session); currentSession = session; } // Ask for username and password Session.OpenRequest op = new Session.OpenRequest(this); op.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); op.setCallback(null); List<String> permissions = new ArrayList<String>(); permissions.add("email"); permissions.add("user_status"); permissions.add("friends_status"); permissions.add("read_stream"); op.setPermissions(permissions); Session session = new Session.Builder(LoginActivity.this).build(); Session.setActiveSession(session); session.addCallback( new Session.StatusCallback() { // callback when session changes state @Override public void call(Session session, SessionState state, Exception exception) { final String accessToken = session.getAccessToken(); if (session.isOpened()) { Request.executeMeRequestAsync( session, new Request.GraphUserCallback() { public void onCompleted(GraphUser user, Response response) { if (user == null) { DialogHelper.showRetryDialog( LoginActivity.this, getString(R.string.could_not_connect_fb_account), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { loginWithFacebook(); } }, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { finish(); } }); } else { final String name = user.getName(); final String email = (String) user.getProperty("email"); Toast.makeText(LoginActivity.this, name + " " + email, Toast.LENGTH_LONG) .show(); UserHelper.setCurrentUser(user, accessToken); Intent i = new Intent(LoginActivity.this, RevibeActivity.class); startActivity(i); finish(); } } }); } } }); session.openForRead(op); }