Skip to content

Instantly share code, notes, and snippets.

@ppamorim
Created September 8, 2015 20:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ppamorim/446183341ecd5ad099fe to your computer and use it in GitHub Desktop.
Save ppamorim/446183341ecd5ad099fe to your computer and use it in GitHub Desktop.
package com.happyapp.utils;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import java.security.Permission;
import java.util.ArrayList;
import org.json.JSONObject;
public class Facebook {
private CallbackManager callbackManager;
private Callback callback;
private ContextCallback contextCallback;
private JSONObject jsonObjectUser;
public Facebook() {
this.callbackManager = CallbackManager.Factory.create();
}
public CallbackManager getCallbackManager() {
return callbackManager;
}
public Facebook authorize(Callback callbackk, ContextCallback contextCallbackk) {
this.callback = callbackk;
this.contextCallback = contextCallbackk;
LoginManager loginManager = LoginManager.getInstance();
loginManager.registerCallback(callbackManager, loginCallback);
ArrayList<String> strings = new ArrayList<>();
strings.add("public_profile");
strings.add("email");
loginManager.logInWithReadPermissions(contextCallback.getActivity(), strings);
return this;
}
public Facebook publishPermissions() {
LoginManager loginManager = LoginManager.getInstance();
loginManager.registerCallback(callbackManager, publishCallback);
ArrayList<String> stringss = new ArrayList<>();
stringss.add("publish_actions");
loginManager.logInWithPublishPermissions(contextCallback.getActivity(), stringss);
return this;
}
public void login(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
graphJSONObjectCallback);
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
}
private GraphRequest.GraphJSONObjectCallback graphJSONObjectCallback =
new GraphRequest.GraphJSONObjectCallback() {
@Override public void onCompleted(
JSONObject jsonObject, GraphResponse graphResponse) {
jsonObjectUser = jsonObject;
if(jsonObjectUser != null) {
publishPermissions();
} else {
callback.onFail();
}
}
};
private AuthorizeCallback authorizeCallback = new AuthorizeCallback() {
@Override public void onSuccessAuth(LoginResult loginResult) {
login(loginResult);
}
@Override public void onErrorAuth(FacebookException e) {
if(DebugUtil.DEBUG) {
e.printStackTrace();
}
callback.onFail();
}
@Override public void onCancelAuth() {
callback.onCancel();
}
};
private FacebookCallback<LoginResult> loginCallback =
new FacebookCallback<LoginResult>() {
@Override public void onSuccess(LoginResult loginResult) {
authorizeCallback.onSuccessAuth(loginResult);
}
@Override public void onCancel() {
authorizeCallback.onCancelAuth();
}
@Override public void onError(FacebookException e) {
if(DebugUtil.DEBUG) {
e.printStackTrace();
}
authorizeCallback.onErrorAuth(e);
}
};
private FacebookCallback<LoginResult> publishCallback =
new FacebookCallback<LoginResult>() {
@Override public void onSuccess(LoginResult loginResult) {
if(callback != null) {
if(jsonObjectUser != null) {
callback.onSuccess(jsonObjectUser);
} else {
callback.onFail();
}
}
}
@Override public void onCancel() { // fail here :(
authorizeCallback.onCancelAuth();
}
@Override public void onError(FacebookException e) {
if(DebugUtil.DEBUG) {
e.printStackTrace();
}
authorizeCallback.onErrorAuth(e);
}
};
public interface AuthorizeCallback {
void onSuccessAuth(LoginResult loginResult);
void onErrorAuth(FacebookException e);
void onCancelAuth();
}
public interface Callback {
void onSuccess(JSONObject graphUser);
void onFail();
void onCancel();
}
public interface ContextCallback {
AppCompatActivity getActivity();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment