Skip to content

Commit d6ecade

Browse files
committed
Implement Facebook Auth using Custom Image Button
1 parent 82141b2 commit d6ecade

File tree

3 files changed

+97
-19
lines changed

3 files changed

+97
-19
lines changed

src/AndroidClient/androidchat/src/main/java/servicestack/net/androidchat/LoginActivity.java

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package servicestack.net.androidchat;
22

3-
import android.accounts.Account;
43
import android.animation.ObjectAnimator;
54
import android.animation.ValueAnimator;
65
import android.content.Intent;
7-
import android.content.SharedPreferences;
86
import android.os.Bundle;
9-
import android.preference.PreferenceManager;
107
import android.support.v4.view.animation.FastOutLinearInInterpolator;
118
import android.support.v7.app.AppCompatActivity;
129
import android.support.v7.widget.Toolbar;
1310
import android.view.View;
1411
import android.widget.ImageButton;
1512
import android.widget.ProgressBar;
1613

14+
import com.facebook.AccessToken;
15+
import com.facebook.CallbackManager;
16+
import com.facebook.FacebookCallback;
17+
import com.facebook.FacebookException;
18+
import com.facebook.login.LoginManager;
19+
import com.facebook.login.LoginResult;
1720
import com.twitter.sdk.android.Twitter;
1821
import com.twitter.sdk.android.core.Callback;
1922
import com.twitter.sdk.android.core.Result;
@@ -25,24 +28,29 @@
2528
import net.servicestack.android.AndroidServiceClient;
2629
import net.servicestack.client.Log;
2730

28-
import io.fabric.sdk.android.Fabric;
31+
import java.util.Arrays;
2932

33+
import io.fabric.sdk.android.Fabric;
3034

3135
/**
32-
* Created by mythz on 2/16/2017.
36+
* This Login Page signs in using Custom Facebook and Twitter Image Buttons
3337
*/
3438

3539
public class LoginActivity extends AppCompatActivity {
3640
private ProgressBar progressBar;
3741
private ObjectAnimator animation;
42+
3843
private TwitterAuthClient twitterAuth;
44+
private CallbackManager facebookCallback;
3945

4046
@Override
4147
protected void onCreate(Bundle savedInstanceState){
4248
super.onCreate(savedInstanceState);
4349

44-
// Create your application here
45-
// Set our view from the "main" layout resource
50+
Fabric.with(this, new Twitter(new TwitterAuthConfig(
51+
getString(R.string.twitter_key),
52+
getString(R.string.twitter_secret))));
53+
4654
setContentView(R.layout.login);
4755

4856
Toolbar toolbar = (Toolbar)findViewById(R.id.loginToolbar);
@@ -58,16 +66,9 @@ protected void onCreate(Bundle savedInstanceState){
5866
animation.setDuration(1500);
5967
animation.setInterpolator(new FastOutLinearInInterpolator());
6068

61-
ImageButton btnTwitter = (ImageButton)findViewById(R.id.btnTwitter);
62-
ImageButton btnAnon = (ImageButton)findViewById(R.id.btnAnon);
6369
LoginActivity activity = this;
6470

65-
TwitterAuthConfig authConfig = new TwitterAuthConfig(
66-
getString(R.string.twitter_key),
67-
getString(R.string.twitter_secret));
68-
69-
Fabric.with(this, new Twitter(authConfig));
70-
71+
ImageButton btnTwitter = (ImageButton)findViewById(R.id.btnTwitter);
7172
twitterAuth = new TwitterAuthClient();
7273
btnTwitter.setOnClickListener(view -> {
7374
startProgressBar();
@@ -78,7 +79,6 @@ public void success(Result<TwitterSession> result) {
7879

7980
App.get().getServiceClient().postAsync(new dtos.Authenticate()
8081
.setProvider("twitter")
81-
.setUserName(Long.toString(session.getUserId()))
8282
.setAccessToken(session.getAuthToken().token)
8383
.setAccessTokenSecret(session.getAuthToken().secret)
8484
.setRememberMe(true),
@@ -101,17 +101,67 @@ public void failure(TwitterException exception) {
101101
});
102102
});
103103

104+
facebookCallback = CallbackManager.Factory.create();
105+
LoginManager.getInstance().registerCallback(facebookCallback, new FacebookCallback<LoginResult>() {
106+
@Override
107+
public void onSuccess(LoginResult loginResult) {
108+
loginWithFacebook(loginResult.getAccessToken());
109+
}
110+
111+
@Override
112+
public void onCancel() {
113+
stopProgressBar();
114+
}
115+
116+
@Override
117+
public void onError(FacebookException exception) {
118+
Log.e(exception);
119+
stopProgressBar();
120+
}
121+
});
122+
123+
ImageButton btnFacebook = (ImageButton)findViewById(R.id.btnFacebook);
124+
btnFacebook.setOnClickListener(view -> {
125+
startProgressBar();
126+
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"));
127+
});
128+
129+
ImageButton btnAnon = (ImageButton)findViewById(R.id.btnAnon);
104130
btnAnon.setOnClickListener(view -> {
105131
startProgressBar();
106132
startGuestChatActivity(App.get().getServiceClient());
107133
stopProgressBar();
108134
});
135+
136+
//Login with facebook if already logged in
137+
AccessToken accessToken = AccessToken.getCurrentAccessToken();
138+
if (accessToken != null){
139+
loginWithFacebook(accessToken);
140+
}
141+
}
142+
143+
private void loginWithFacebook(AccessToken accessToken){
144+
LoginActivity activity = this;
145+
App.get().getServiceClient().postAsync(new dtos.Authenticate()
146+
.setProvider("facebook")
147+
.setAccessToken(accessToken.getToken())
148+
.setRememberMe(true),
149+
r -> {
150+
Intent intent = new Intent(activity, MainActivity.class);
151+
startActivity(intent);
152+
stopProgressBar();
153+
},
154+
error -> {
155+
Log.e("Facebook LoginButton FAILED!", error);
156+
stopProgressBar();
157+
});
109158
}
110159

111160
@Override
112161
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
113162
super.onActivityResult(requestCode, resultCode, data);
114163
twitterAuth.onActivityResult(requestCode, resultCode, data);
164+
facebookCallback.onActivityResult(requestCode, resultCode, data);
115165
}
116166

117167
private void startProgressBar(){
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0">
6+
<path
7+
android:fillColor="#FF3B579D"
8+
android:pathData="M21.8,0H2.2C1,0,0,1,0,2.2v19.6C0,23,1,24,2.2,24H12V14H9v-3h3V8c0-2.5,1-4,4-4h3v3h-1.3 C16.8,7,16,7.8,16,8.7V11h4l-0.5,3H16v10h5.8c1.2,0,2.2-1,2.2-2.2V2.2C24,1,23,0,21.8,0z"/>
9+
</vector>

src/AndroidClient/androidchat/src/main/res/layout/login.xml

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
1616
android:showAsAction="always" />
1717
<LinearLayout
18-
android:orientation="horizontal"
18+
android:orientation="vertical"
1919
android:layout_width="match_parent"
2020
android:layout_height="fill_parent"
21-
android:layout_marginBottom="200dp"
22-
android:gravity="center">
21+
android:gravity="center"
22+
android:layout_alignParentBottom="true">
2323

2424
<LinearLayout
2525
android:orientation="vertical"
@@ -39,7 +39,26 @@
3939
android:text="Twitter"
4040
android:gravity="center"
4141
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
42+
</LinearLayout>
4243

44+
<LinearLayout
45+
android:orientation="vertical"
46+
android:layout_width="wrap_content"
47+
android:layout_height="wrap_content"
48+
android:gravity="bottom">
49+
<ImageButton
50+
android:id="@+id/btnFacebook"
51+
android:layout_width="110dp"
52+
android:layout_height="110dp"
53+
android:layout_margin="10dp"
54+
android:background="@drawable/ic_facebook_logo" />
55+
<TextView
56+
android:layout_width="match_parent"
57+
android:layout_height="wrap_content"
58+
android:textColor="@android:color/black"
59+
android:text="Facebook"
60+
android:gravity="center"
61+
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
4362
</LinearLayout>
4463

4564
<LinearLayout

0 commit comments

Comments
 (0)