Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

Commit

Permalink
[tidev#2200] Facilitate adding FB permissions via the new oauth mecha…
Browse files Browse the repository at this point in the history
…nism.
  • Loading branch information
billdawson committed Nov 2, 2010
1 parent c1c40bc commit 2a27cc8
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ public class FBLoginDialog extends FBDialog {

private FBRequest mGetSessionRequest;
private FBRequestDelegate mRequestDelegate;
private String mRequestedPermissions;

public FBLoginDialog(Activity context, FBSession session) {
public FBLoginDialog(Activity context, FBSession session, String permissions) {
super(context, session);
this.mRequestedPermissions = permissions;
mRequestDelegate = new FBRequestDelegateImpl();
}

Expand Down Expand Up @@ -64,7 +66,7 @@ private void loadLoginPage() {
String url = FacebookModule.usingOauth ? OAUTH_URL : LOGIN_URL;
if (FacebookModule.usingOauth) {
params.put("display", "touch");
params.put("scope", "publish_stream");
params.put("scope", mRequestedPermissions);
params.put("sdk", "android");
params.put("redirect_uri", "fbconnect://success");
params.put("type", "user_agent");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ public void unsave(Context context) {
defaults.remove("FBUserId");
defaults.remove("FBSessionKey");
defaults.remove("FBSessionSecret");
defaults.remove("FBSessionExpires");
//defaults.remove("FBSessionExpires"); // With oauth, using the login dialog to add a permission causes the returned expires_in to be 0, so don't wipe out the expiration date (we may need it.)
defaults.remove("FBPermissions");
defaults.remove("FBAccessToken");
defaults.commit();
Expand Down Expand Up @@ -374,9 +374,20 @@ public void begin(Context context, Long uid, String sessionKey,
public void begin_oauth(Context context, String access_token, String expires_in_seconds)
{
mAccessToken = access_token;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + Integer.parseInt(expires_in_seconds) * 1000);
mExpirationDate = c.getTime();
// expires_in_seconds is sometimes zero (seems to occur when re-logging-in without logging out), so
// don't wipe out the current expiration if expires_in_seconds is 0
int seconds = Integer.parseInt(expires_in_seconds);
if (seconds > 0) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + Integer.parseInt(expires_in_seconds) * 1000);
mExpirationDate = c.getTime();
} else {
// seconds == 0, which could be caused by the expires_in from FB being 0 when using oauth to add
// on a permission to a live session. So use the old expiration time.
if (mExpirationDate == null) {
loadCachedExpirationTime(context);
}
}
save_oauth(context);
}

Expand Down Expand Up @@ -447,7 +458,7 @@ public boolean resume_oauth(Context context)
Context.MODE_PRIVATE);
mAccessToken = defaults.getString("FBAccessToken", null);
long expiration = defaults.getLong("FBSessionExpires", 0);
if (expiration == 0 || mAccessToken == null){
if (mAccessToken == null){
mAccessToken = null;
return false;
} else {
Expand All @@ -467,6 +478,20 @@ public boolean resume_oauth(Context context)
}

}

// Using the oauth login to add-on a permission for some reason returns a
// zero as the expires_in, so we want to keep "old" expiration times so the new
// expiration time of 0 does not wipe out expirations.
private void loadCachedExpirationTime(Context context) {
SharedPreferences defaults = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
long expiration = defaults.getLong("FBSessionExpires", 0);
if (expiration > 0) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(expiration);
mExpirationDate = c.getTime();
}
}

/**
* Ends the current session and deletes the uid, session key, and secret
Expand All @@ -485,7 +510,7 @@ public void logout(Context context) {
mUid = Long.valueOf(0);
mSessionKey = null;
mSessionSecret = null;
mExpirationDate = null;
//mExpirationDate = null; // With oauth, using the login dialog to add a permission causes the returned expires_in to be 0, so don't wipe out the expiration date (we may need it.)
mAccessToken = null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ public void login(KrollCallback callback) {
}
}

public void executeLogin() {
protected void executeLogin(String permissionsList)
{
Log.d(LCAT, "EXECUTE LOGIN CALLED");

Activity activity = getTiContext().getActivity();
Expand All @@ -177,9 +177,19 @@ public void executeLogin() {
Intent intent = new Intent(activity, FBActivity.class);
intent.setAction("login_dialog");
intent.putExtra("uid", resultCode);
if (permissionsList == null) {
intent.putExtra("permissions", "publish_stream");
} else {
intent.putExtra("permissions", permissionsList);
}
activitySupport.launchActivityForResult(intent, resultCode,
(TiActivityResultHandler) this);
}

public void executeLogin() {

executeLogin("publish_stream");
}

public void logout(KrollCallback callback) {
this.logoutCallback = callback;
Expand Down Expand Up @@ -210,17 +220,31 @@ public void requestPermission(String permission, KrollCallback callback) {
event.put("permission", permission);
callback.callWithProperties(event);
} else {
Log.d(LCAT, "making remote permission call for: " + permission);
Activity activity = getTiContext().getActivity();
TiActivitySupport activitySupport = (TiActivitySupport) activity;
final int resultCode = activitySupport.getUniqueResultCode();
Intent intent = new Intent(activity, FBActivity.class);
callbacks.put(resultCode, callback);
intent.setAction("permission_dialog");
intent.putExtra("permission", permission);
intent.putExtra("uid", resultCode);
activitySupport.launchActivityForResult(intent, resultCode,
(TiActivityResultHandler) this);
if (usingOauth){
Log.d(LCAT, "making remote permission call via oauth login for: " + permission);
Activity activity = getTiContext().getActivity();
TiActivitySupport activitySupport = (TiActivitySupport) activity;
final int resultCode = activitySupport.getUniqueResultCode();
Intent intent = new Intent(activity, FBActivity.class);
callbacks.put(resultCode, callback);
intent.setAction("login_dialog");
intent.putExtra("permissions", permission); // In the case of oauth, the permission param should be comma-sep list of _all_ desired permissions
intent.putExtra("uid", resultCode);
activitySupport.launchActivityForResult(intent, resultCode,
(TiActivityResultHandler) this);
} else {
Log.d(LCAT, "making remote permission call for: " + permission);
Activity activity = getTiContext().getActivity();
TiActivitySupport activitySupport = (TiActivitySupport) activity;
final int resultCode = activitySupport.getUniqueResultCode();
Intent intent = new Intent(activity, FBActivity.class);
callbacks.put(resultCode, callback);
intent.setAction("permission_dialog");
intent.putExtra("permission", permission);
intent.putExtra("uid", resultCode);
activitySupport.launchActivityForResult(intent, resultCode,
(TiActivityResultHandler) this);
}
}
}

Expand Down Expand Up @@ -362,7 +386,8 @@ public FBDialog onCreate(String action, Activity activity, Bundle state) {
String permission = data.getStringExtra("permission");
dialog = new FBPermissionDialog(activity, session, new String[]{permission});
} else if (action.equals("login_dialog")) {
dialog = new FBLoginDialog(activity, session);
String permissions = data.getStringExtra("permissions");
dialog = new FBLoginDialog(activity, session, permissions);
} else if (action.equals("feed_dialog")) {
Long templateId = data.getLongExtra("templateId", 0L);
String templateData = data.getStringExtra("templateData");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class LoginButton extends TiUIView {
private FBSession session;
private FacebookModule facebook;
private boolean wide;
private String requestedPermissions = null;

public LoginButton(final TiViewProxy proxy) {
super(proxy);
Expand All @@ -61,7 +62,7 @@ public void onClick(View arg0) {
if (facebook.isLoggedIn()) {
facebook.executeLogout();
} else {
facebook.executeLogin();
facebook.executeLogin(requestedPermissions);
}
}
});
Expand Down Expand Up @@ -98,6 +99,10 @@ public void processProperties(TiDict d) {
if (d.containsKey("oauth")) {
FacebookModule.usingOauth = TiConvert.toBoolean(d, "oauth");
}

if (d.containsKey("permissions")) {
requestedPermissions = TiConvert.toString(d, "permissions");
}

final TiProxy proxy = getProxy();

Expand Down

0 comments on commit 2a27cc8

Please sign in to comment.