diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml
index 7cde14b5a..a304714dc 100644
--- a/astrid/AndroidManifest.xml
+++ b/astrid/AndroidManifest.xml
@@ -381,6 +381,7 @@
+
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
index d1622e85d..0dd90c5d5 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
@@ -40,9 +40,13 @@ import android.widget.ScrollView;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragmentActivity;
+import com.facebook.Request;
+import com.facebook.Request.GraphUserCallback;
+import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
+import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.google.android.googlelogin.GoogleLoginServiceConstants;
import com.google.android.googlelogin.GoogleLoginServiceHelper;
@@ -261,12 +265,16 @@ public class ActFmLoginActivity extends SherlockFragmentActivity {
if(loginButton == null)
return;
- loginButton.setReadPermissions(Arrays.asList("email", "offline_access", "publish_stream"));
+ loginButton.setReadPermissions(Arrays.asList("email", "offline_access"));
View googleLogin = findViewById(R.id.gg_login);
if(AmazonMarketStrategy.isKindleFire())
googleLogin.setVisibility(View.GONE);
googleLogin.setOnClickListener(googleListener);
+
+ View fbLogin = findViewById(R.id.fb_login_dummy);
+ fbLogin.setOnClickListener(facebookListener);
+
TextView signUp = (TextView) findViewById(R.id.pw_signup);
signUp.setOnClickListener(signUpListener);
@@ -288,6 +296,19 @@ public class ActFmLoginActivity extends SherlockFragmentActivity {
}
};
+ protected final OnClickListener facebookListener = new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Session session = Session.getActiveSession();
+ if (session != null && session.isOpened()) {
+ facebookSuccess(session);
+ } else {
+ View fbLogin = findViewById(R.id.fb_login);
+ fbLogin.performClick();
+ }
+ }
+ };
+
protected final OnClickListener signUpListener = new OnClickListener() {
@Override
public void onClick(View v) {
@@ -474,12 +495,29 @@ public class ActFmLoginActivity extends SherlockFragmentActivity {
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
- Log.e("fb-login", "State opened");
+ facebookSuccess(session);
} else if (state.isClosed()) {
Log.e("fb-login", "State closed");
}
}
+ private void facebookSuccess(Session session) {
+ progressDialog = DialogUtilities.progressDialog(this,
+ getString(R.string.DLG_please_wait));
+ Request request = Request.newMeRequest(session, new GraphUserCallback() {
+ @Override
+ public void onCompleted(GraphUser user, Response response) {
+ try {
+ String email = user.getInnerJSONObject().optString("email"); //$NON-NLS-1$
+ authenticate(email, user.getFirstName(), user.getLastName(), ActFmInvoker.PROVIDER_FACEBOOK, Session.getActiveSession().getAccessToken());
+ } catch (Exception e) {
+ handleError(e);
+ }
+ }
+ });
+ request.executeAsync();
+ }
+
private UiLifecycleHelper uiHelper;
private final Session.StatusCallback callback = new Session.StatusCallback() {
diff --git a/astrid/res/layout-land/actfm_login_activity.xml b/astrid/res/layout-land/actfm_login_activity.xml
index 4fa1a4c77..bc274a1b1 100644
--- a/astrid/res/layout-land/actfm_login_activity.xml
+++ b/astrid/res/layout-land/actfm_login_activity.xml
@@ -36,7 +36,7 @@
android:gravity="center_vertical"
android:paddingTop="5dip" >
-
+
+