Add basic facebook login

This commit is contained in:
Phillip Thelen 2015-11-13 20:33:26 +01:00
parent 07ebfcb46d
commit 3aa5ec4608
11 changed files with 139 additions and 19 deletions

View file

@ -6,8 +6,8 @@
android:screenOrientation="portrait" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="22" />
android:minSdkVersion="15"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -73,6 +73,7 @@
<meta-data
android:name="io.fabric.ApiKey"
android:value="2eb3b3edb3b0f4722d37d649a5af366656e46ddd" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<activity
android:name=".AboutActivity"
@ -109,6 +110,12 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="com.habitrpg.android.habitica.MainActivity" />
</activity>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
</application>
</manifest>

View file

@ -79,6 +79,7 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.1.2/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.7.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.github.clans/fab/1.6.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.github.mmin18.layoutcast/library/1.1.5/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.github.porokoro.paperboy/paperboy/2.1.0/jars" />
@ -126,6 +127,7 @@
<orderEntry type="library" exported="" name="org.abego.treelayout.core-1.0.1" level="project" />
<orderEntry type="library" exported="" name="library-1.1.5" level="project" />
<orderEntry type="library" exported="" name="DBFlow-2.2.1" level="project" />
<orderEntry type="library" exported="" name="bolts-android-1.2.0" level="project" />
<orderEntry type="library" exported="" name="materialdrawer-4.3.8" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.1.0" level="project" />
<orderEntry type="library" exported="" name="checkout-0.7.4" level="project" />
@ -142,12 +144,13 @@
<orderEntry type="library" exported="" name="design-23.0.1" level="project" />
<orderEntry type="library" exported="" name="fabric-1.3.1" level="project" />
<orderEntry type="library" exported="" name="beta-1.1.2" level="project" />
<orderEntry type="library" exported="" name="facebook-android-sdk-4.7.0" level="project" />
<orderEntry type="library" exported="" name="iconics-core-1.7.9" level="project" />
<orderEntry type="library" exported="" name="paperboy-2.1.0" level="project" />
<orderEntry type="library" exported="" name="javawriter-2.5.0" level="project" />
<orderEntry type="library" exported="" name="commons-codec-1.10" level="project" />
<orderEntry type="library" exported="" name="kotlin-stdlib-0.12.613" level="project" />
<orderEntry type="library" exported="" name="commons-lang3-3.3.2" level="project" />
<orderEntry type="library" exported="" name="kotlin-stdlib-0.12.613" level="project" />
<orderEntry type="library" exported="" name="fab-1.6.1" level="project" />
<orderEntry type="library" exported="" name="instabugcore-1.8-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="cardview-v7-22.2.0" level="project" />

View file

@ -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 {

View file

@ -142,14 +142,14 @@
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent" >
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_span="2"
android:layout_gravity="center">
android:layout_gravity="center" >
<Button
android:id="@+id/login_btn"
@ -165,7 +165,20 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp">
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_span="2"/>
</TableRow>
</TableLayout>

View file

@ -155,4 +155,6 @@
<string name="title_activity_party">Party</string>
<string name="title_activity_gem_purchase">Purchase Gems</string>
<string name="gryphon">Gryphon</string>
<string name="facebook_app_id">128307497299777</string>
</resources>

View file

@ -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<UserAuthResponse> 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);
}

View file

@ -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");
}

View file

@ -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<LoginResult>() {
@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());

View file

@ -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<UserAuthResponse> callback);
@POST("/user/auth/social")
void connectSocial(@Body UserAuthSocial auth, Callback<UserAuthResponse> callback);
@POST("/user/sleep")
void sleep(Callback<Void> voidCallback);

View file

@ -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;
}
}

View file

@ -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;
}
}