package com.sromku.simple.fb.actions; import android.text.TextUtils; import com.facebook.FacebookRequestError; import com.facebook.GraphRequest; import com.facebook.GraphRequestAsyncTask; import com.facebook.GraphResponse; import com.facebook.HttpMethod; import com.sromku.simple.fb.SimpleFacebook; import com.sromku.simple.fb.listeners.OnAuthorizationDeviceListener; import com.sromku.simple.fb.utils.Logger; import org.json.JSONException; import java.lang.reflect.Field; import java.util.Locale; public class PollDeviceAuthorizationAction { private OnAuthorizationDeviceListener mOnActionListener; private final String mCode; public PollDeviceAuthorizationAction(String code) { mCode = code; } public void setActionListener(OnAuthorizationDeviceListener actionListener) { mOnActionListener = actionListener; } public void execute() { try { if (TextUtils.isEmpty(mCode)) { mOnActionListener.onFail("Must set authorization code, that was retrieved from connecting device action"); return; } // set the link String appId = SimpleFacebook.getConfiguration().getAppId(); String url = "https://graph.facebook.com/oauth/device?" + "type=device_token" + "&client_id=%s" + "&code=%s"; url = String.format(Locale.US, url, appId, mCode); // create POST request GraphRequest request = new GraphRequest(null, ""); request.setHttpMethod(HttpMethod.POST); Field field = GraphRequest.class.getDeclaredField("overriddenURL"); field.setAccessible(true); field.set(request, url); request.setCallback(new GraphRequest.Callback() { @Override public void onCompleted(GraphResponse response) { FacebookRequestError error = response.getError(); if (error != null) { Logger.logError(GetAction.class, "Failed to get what you have requested", error.getException()); mOnActionListener.onException(error.getException()); } else { String rawResponse = response.getRawResponse(); if (rawResponse == null) { Logger.logError(GetAction.class, "The response GraphObject has null value. Response=" + response.toString(), null); } else { try { String accessToken = response.getJSONObject().getString("access_token"); mOnActionListener.onComplete(accessToken); } catch (JSONException e) { mOnActionListener.onFail("Failed to parse access token result"); } } } } }); GraphRequestAsyncTask task = new GraphRequestAsyncTask(request); task.execute(); } catch (Exception e) { mOnActionListener.onException(e); } } }