Skip to content

Commit

Permalink
Added Fragment support
Browse files Browse the repository at this point in the history
This commit adds support for calling authorize from a Fragment. Now the
Fragment's onActivityResult will be called.
  • Loading branch information
Paul Soucy committed Jun 20, 2012
1 parent 4cbe4e2 commit e00cc4f
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
Binary file added facebook/libs/android-support-v4.jar
Binary file not shown.
55 changes: 55 additions & 0 deletions facebook/src/com/facebook/android/Facebook.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.webkit.CookieSyncManager;

Expand Down Expand Up @@ -124,6 +125,10 @@ public void authorize(Activity activity, String[] permissions,
final DialogListener listener) {
authorize(activity, permissions, DEFAULT_AUTH_ACTIVITY_CODE, listener);
}

public void authorize(Fragment fragment, String[] permissions, final DialogListener listener) {
authorize(fragment, permissions, DEFAULT_AUTH_ACTIVITY_CODE, listener);
}

/**
* Full authorize method.
Expand Down Expand Up @@ -206,6 +211,25 @@ public void authorize(Activity activity, String[] permissions,
startDialogAuth(activity, permissions);
}
}

public void authorize(Fragment fragment, String[] permissions,
int activityCode, final DialogListener listener) {

boolean singleSignOnStarted = false;

mAuthDialogListener = listener;

// Prefer single sign-on, where available.
if (activityCode >= 0) {
singleSignOnStarted = startSingleSignOn(fragment, mAppId,
permissions, activityCode);
}
// Otherwise fall back to traditional dialog.
if (!singleSignOnStarted) {
startDialogAuth(fragment.getActivity(), permissions);
}

}

/**
* Internal method to handle single sign-on backend for authorize().
Expand Down Expand Up @@ -251,6 +275,37 @@ private boolean startSingleSignOn(Activity activity, String applicationId,

return didSucceed;
}

private boolean startSingleSignOn(Fragment fragment, String applicationId,
String[] permissions, int activityCode) {
boolean didSucceed = true;
Intent intent = new Intent();

intent.setClassName("com.facebook.katana",
"com.facebook.katana.ProxyAuth");
intent.putExtra("client_id", applicationId);
if (permissions.length > 0) {
intent.putExtra("scope", TextUtils.join(",", permissions));
}

// Verify that the application whose package name is
// com.facebook.katana.ProxyAuth
// has the expected FB app signature.
if (!validateActivityIntent(fragment.getActivity(), intent)) {
return false;
}

mAuthActivity = fragment.getActivity();
mAuthPermissions = permissions;
mAuthActivityCode = activityCode;
try {
fragment.startActivityForResult(intent, activityCode);
} catch (ActivityNotFoundException e) {
didSucceed = false;
}

return didSucceed;
}

/**
* Helper to validate an activity intent by resolving and checking the
Expand Down

0 comments on commit e00cc4f

Please sign in to comment.