diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index cc877bce4..ca3277f18 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -6,8 +6,8 @@
android:screenOrientation="portrait" >
+ android:minSdkVersion="15"
+ android:targetSdkVersion="23" />
@@ -73,6 +73,7 @@
+
+
+
diff --git a/Habitica/Habitica.iml b/Habitica/Habitica.iml
index 34f210df4..63d46089c 100644
--- a/Habitica/Habitica.iml
+++ b/Habitica/Habitica.iml
@@ -79,6 +79,7 @@
+
@@ -126,6 +127,7 @@
+
@@ -142,12 +144,13 @@
+
-
+
diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index ed5c2b96f..10363ecd0 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -88,6 +88,8 @@ dependencies {
// IAP Handling / Verification
compile 'org.solovyev.android:checkout:0.7.4@aar'
+
+ compile 'com.facebook.android:facebook-android-sdk:4.7.0'
}
android {
diff --git a/Habitica/res/layout/login_screen.xml b/Habitica/res/layout/login_screen.xml
index c783d39a3..4eeade323 100644
--- a/Habitica/res/layout/login_screen.xml
+++ b/Habitica/res/layout/login_screen.xml
@@ -142,14 +142,14 @@
+ android:layout_height="match_parent" >
+ android:layout_gravity="center" >
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index a244524d7..ede6592c2 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -155,4 +155,6 @@
Party
Purchase Gems
Gryphon
+
+ 128307497299777
\ No newline at end of file
diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
index 778285ab3..5ae24dd38 100644
--- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
+++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
@@ -25,6 +25,8 @@ import com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter.TagsAdapter;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
+import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocial;
+import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocialTokens;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.raizlabs.android.dbflow.structure.ModelAdapter;
@@ -156,6 +158,16 @@ public class APIHelper implements ErrorHandler, Profiler {
this.apiService.connectLocal(auth, callback);
}
+ public void connectSocial(String userId, String accessToken, Callback callback) {
+ UserAuthSocial auth = new UserAuthSocial();
+ auth.setNetwork("facebook");
+ UserAuthSocialTokens authResponse = new UserAuthSocialTokens();
+ authResponse.setClient_id(userId);
+ authResponse.setAccess_token(accessToken);
+ auth.setAuthResponse(authResponse);
+ this.apiService.connectSocial(auth, callback);
+ }
+
public void deleteTask(Task item, TaskDeletionCallback cb) {
this.apiService.deleteTask(item.getId(), cb);
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java b/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
index 097d66a71..4d593b1ee 100644
--- a/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
+++ b/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
@@ -18,6 +18,7 @@ import org.solovyev.android.checkout.Products;
import org.solovyev.android.checkout.Purchase;
import org.solovyev.android.checkout.PurchaseVerifier;
import org.solovyev.android.checkout.RequestListener;
+import com.facebook.FacebookSdk;
import java.io.File;
import java.security.Security;
@@ -41,6 +42,8 @@ public class HabiticaApplication extends Application {
FlowManager.init(this);
+ FacebookSdk.sdkInitialize(getApplicationContext());
+
Instabug.DEBUG = BuildConfig.DEBUG;
Instabug.initialize(this, "a5aa5f471a9cd8a958c0c55181172655");
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java b/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java
index 6c4c462a8..f711d5b29 100644
--- a/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java
@@ -33,6 +33,13 @@ import android.widget.ProgressBar;
import android.widget.TableRow;
import android.widget.TextView;
+import com.facebook.AccessToken;
+import com.facebook.CallbackManager;
+import com.facebook.FacebookCallback;
+import com.facebook.FacebookException;
+import com.facebook.FacebookSdk;
+import com.facebook.login.LoginResult;
+import com.facebook.login.widget.LoginButton;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
@@ -57,6 +64,7 @@ public class LoginActivity extends AppCompatActivity
private final static String TAG_APIKEY="key";
private Button mLoginNormalBtn;
+ private LoginButton mFacebookLoginBtn;
private EditText mUsernameET, mPasswordET,mEmail,mConfirmPassword;
private TableRow mEmailRow, mConfirmPasswordRow;
private APIHelper mApiHelper;
@@ -66,6 +74,8 @@ public class LoginActivity extends AppCompatActivity
public Boolean isRegistering;
private Menu menu;
+ private CallbackManager callbackManager;
+
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -87,6 +97,30 @@ public class LoginActivity extends AppCompatActivity
mLoginNormalBtn.setOnClickListener(mLoginNormalClick);
+
+ mFacebookLoginBtn = (LoginButton) this.findViewById(R.id.login_button);
+ mFacebookLoginBtn.setReadPermissions("user_friends");
+
+ callbackManager = CallbackManager.Factory.create();
+
+ mFacebookLoginBtn.registerCallback(callbackManager, new FacebookCallback() {
+ @Override
+ public void onSuccess(LoginResult loginResult) {
+ AccessToken accessToken = AccessToken.getCurrentAccessToken();
+ mApiHelper.connectSocial(accessToken.getUserId(), accessToken.getToken(), LoginActivity.this);
+ }
+
+ @Override
+ public void onCancel() {
+ Log.d("FB Login", "Cancelled");
+ }
+
+ @Override
+ public void onError(FacebookException exception) {
+ Log.d("FB Login", "Error");
+ }
+ });
+
HostConfig hc= PrefsActivity.fromContext(this);
if(hc ==null) {
hc = new HostConfig(getString(R.string.SP_address_default), "80", "", "");
@@ -114,20 +148,7 @@ public class LoginActivity extends AppCompatActivity
}
}
}
- private View.OnClickListener mBarcodeClick = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- IntentIntegrator integrator = new IntentIntegrator(LoginActivity.this);
- integrator.initiateScan();
- }
- };
- private View.OnClickListener mRegisterClick = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- };
private View.OnClickListener mLoginNormalClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -191,7 +212,9 @@ public class LoginActivity extends AppCompatActivity
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
- IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
+ super.onActivityResult(requestCode, resultCode, intent);
+ callbackManager.onActivityResult(requestCode, resultCode, intent);
+ IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
try {
Log.d("scanresult", scanResult.getContents());
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
index a17e19979..6761badb1 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
@@ -10,6 +10,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
+import com.magicmicky.habitrpgwrapper.lib.models.UserAuthSocial;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
@@ -81,6 +82,9 @@ public interface ApiService {
@POST("/user/auth/local")
void connectLocal(@Body UserAuth auth, Callback callback);
+ @POST("/user/auth/social")
+ void connectSocial(@Body UserAuthSocial auth, Callback callback);
+
@POST("/user/sleep")
void sleep(Callback voidCallback);
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocial.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocial.java
new file mode 100644
index 000000000..9173b30f4
--- /dev/null
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocial.java
@@ -0,0 +1,26 @@
+package com.magicmicky.habitrpgwrapper.lib.models;
+
+/**
+ * Created by viirus on 13/11/15.
+ */
+public class UserAuthSocial {
+ private String network;
+ private UserAuthSocialTokens authResponse;
+
+ public String getNetwork() {
+ return network;
+ }
+
+ public void setNetwork(String network) {
+ this.network = network;
+ }
+
+ public UserAuthSocialTokens getAuthResponse() {
+ return authResponse;
+ }
+
+ public void setAuthResponse(UserAuthSocialTokens authResponse) {
+ this.authResponse = authResponse;
+ }
+
+}
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocialTokens.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocialTokens.java
new file mode 100644
index 000000000..8145ca9a6
--- /dev/null
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/UserAuthSocialTokens.java
@@ -0,0 +1,25 @@
+package com.magicmicky.habitrpgwrapper.lib.models;
+
+/**
+ * Created by viirus on 13/11/15.
+ */
+public class UserAuthSocialTokens {
+ private String client_id;
+ private String access_token;
+
+ public String getClient_id() {
+ return client_id;
+ }
+
+ public void setClient_id(String client_id) {
+ this.client_id = client_id;
+ }
+
+ public String getAccess_token() {
+ return access_token;
+ }
+
+ public void setAccess_token(String access_token) {
+ this.access_token = access_token;
+ }
+}