Skip to content

Commit d995eb7

Browse files
SUPERCILEXsamtstern
authored andcommitted
Merge improvements from anonymous auth PR (#309) (#808)
1 parent bb9f2ff commit d995eb7

19 files changed

+311
-254
lines changed

auth/src/main/java/com/firebase/ui/auth/AuthUI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public Task<Void> signOut(@NonNull FragmentActivity activity) {
192192

193193
// Twitter sign out
194194
try {
195-
TwitterProvider.signout(activity);
195+
TwitterProvider.signOut(activity);
196196
} catch (NoClassDefFoundError e) {
197197
// do nothing
198198
}

auth/src/main/java/com/firebase/ui/auth/IdpResponse.java

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,28 @@
2424

2525
import com.firebase.ui.auth.ui.ExtraConstants;
2626
import com.google.firebase.auth.FacebookAuthProvider;
27-
import com.google.firebase.auth.GithubAuthProvider;
2827
import com.google.firebase.auth.GoogleAuthProvider;
2928
import com.google.firebase.auth.TwitterAuthProvider;
3029

3130
/**
3231
* A container that encapsulates the result of authenticating with an Identity Provider.
3332
*/
3433
public class IdpResponse implements Parcelable {
35-
private final String mProviderId;
36-
private final String mEmail;
37-
private final String mPhoneNumber;
34+
private final User mUser;
3835
private final String mToken;
3936
private final String mSecret;
4037
private final int mErrorCode;
4138

4239
private IdpResponse(int errorCode) {
43-
this(null, null, null, null, null, errorCode);
40+
this(null, null, null, errorCode);
4441
}
4542

4643
private IdpResponse(
47-
String providerId,
48-
String email,
49-
String phoneNumber,
44+
User user,
5045
String token,
5146
String secret,
5247
int errorCode) {
53-
mProviderId = providerId;
54-
mEmail = email;
55-
mPhoneNumber = phoneNumber;
48+
mUser = user;
5649
mToken = token;
5750
mSecret = secret;
5851
mErrorCode = errorCode;
@@ -89,23 +82,23 @@ public Intent toIntent() {
8982
@NonNull
9083
@AuthUI.SupportedProvider
9184
public String getProviderType() {
92-
return mProviderId;
85+
return mUser.getProviderId();
9386
}
9487

9588
/**
9689
* Get the email used to sign in.
9790
*/
9891
@Nullable
9992
public String getEmail() {
100-
return mEmail;
93+
return mUser.getEmail();
10194
}
10295

10396
/**
10497
* Get the phone number used to sign in.
10598
*/
10699
@Nullable
107100
public String getPhoneNumber() {
108-
return mPhoneNumber;
101+
return mUser.getPhoneNumber();
109102
}
110103

111104
/**
@@ -138,9 +131,7 @@ public int describeContents() {
138131

139132
@Override
140133
public void writeToParcel(Parcel dest, int flags) {
141-
dest.writeString(mProviderId);
142-
dest.writeString(mEmail);
143-
dest.writeString(mPhoneNumber);
134+
dest.writeParcelable(mUser, flags);
144135
dest.writeString(mToken);
145136
dest.writeString(mSecret);
146137
dest.writeInt(mErrorCode);
@@ -150,9 +141,7 @@ public void writeToParcel(Parcel dest, int flags) {
150141
@Override
151142
public IdpResponse createFromParcel(Parcel in) {
152143
return new IdpResponse(
153-
in.readString(),
154-
in.readString(),
155-
in.readString(),
144+
in.<User>readParcelable(User.class.getClassLoader()),
156145
in.readString(),
157146
in.readString(),
158147
in.readInt()
@@ -167,21 +156,12 @@ public IdpResponse[] newArray(int size) {
167156

168157
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
169158
public static class Builder {
170-
private String mProviderId;
171-
private String mEmail;
172-
private String mPhoneNumber;
159+
private User mUser;
173160
private String mToken;
174161
private String mSecret;
175162

176-
public Builder(@AuthUI.SupportedProvider @NonNull String providerId,
177-
@Nullable String email) {
178-
mProviderId = providerId;
179-
mEmail = email;
180-
}
181-
182-
public Builder setPhoneNumber(String phoneNumber) {
183-
mPhoneNumber = phoneNumber;
184-
return this;
163+
public Builder(@NonNull User user) {
164+
mUser = user;
185165
}
186166

187167
public Builder setToken(String token) {
@@ -195,22 +175,21 @@ public Builder setSecret(String secret) {
195175
}
196176

197177
public IdpResponse build() {
198-
if ((mProviderId.equalsIgnoreCase(GoogleAuthProvider.PROVIDER_ID)
199-
|| mProviderId.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)
200-
|| mProviderId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
201-
|| mProviderId.equalsIgnoreCase(GithubAuthProvider.PROVIDER_ID))
178+
String providerId = mUser.getProviderId();
179+
if ((providerId.equalsIgnoreCase(GoogleAuthProvider.PROVIDER_ID)
180+
|| providerId.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)
181+
|| providerId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID))
202182
&& TextUtils.isEmpty(mToken)) {
203183
throw new IllegalStateException(
204184
"Token cannot be null when using a non-email provider.");
205185
}
206-
if (mProviderId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
186+
if (providerId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
207187
&& TextUtils.isEmpty(mSecret)) {
208188
throw new IllegalStateException(
209189
"Secret cannot be null when using the Twitter provider.");
210190
}
211191

212-
return new IdpResponse(
213-
mProviderId, mEmail, mPhoneNumber, mToken, mSecret, ResultCodes.OK);
192+
return new IdpResponse(mUser, mToken, mSecret, ResultCodes.OK);
214193
}
215194
}
216195
}
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
package com.firebase.ui.auth;
2+
3+
import android.content.Intent;
4+
import android.net.Uri;
5+
import android.os.Bundle;
6+
import android.os.Parcel;
7+
import android.os.Parcelable;
8+
import android.support.annotation.NonNull;
9+
import android.support.annotation.Nullable;
10+
import android.support.annotation.RestrictTo;
11+
12+
import com.firebase.ui.auth.ui.ExtraConstants;
13+
14+
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
15+
public class User implements Parcelable {
16+
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
17+
@Override
18+
public User createFromParcel(Parcel in) {
19+
return new User(
20+
in.readString(),
21+
in.readString(),
22+
in.readString(),
23+
in.readString(),
24+
in.<Uri>readParcelable(Uri.class.getClassLoader()));
25+
}
26+
27+
@Override
28+
public User[] newArray(int size) {
29+
return new User[size];
30+
}
31+
};
32+
33+
private final String mProviderId;
34+
private final String mEmail;
35+
private final String mPhoneNumber;
36+
private final String mName;
37+
private final Uri mPhotoUri;
38+
39+
private User(String providerId, String email, String phoneNumber, String name, Uri photoUri) {
40+
mProviderId = providerId;
41+
mEmail = email;
42+
mPhoneNumber = phoneNumber;
43+
mName = name;
44+
mPhotoUri = photoUri;
45+
}
46+
47+
public static User getUser(Intent intent) {
48+
return intent.getParcelableExtra(ExtraConstants.EXTRA_USER);
49+
}
50+
51+
public static User getUser(Bundle arguments) {
52+
return arguments.getParcelable(ExtraConstants.EXTRA_USER);
53+
}
54+
55+
@NonNull
56+
@AuthUI.SupportedProvider
57+
public String getProviderId() {
58+
return mProviderId;
59+
}
60+
61+
@Nullable
62+
public String getEmail() {
63+
return mEmail;
64+
}
65+
66+
@Nullable
67+
public String getPhoneNumber() {
68+
return mPhoneNumber;
69+
}
70+
71+
@Nullable
72+
public String getName() {
73+
return mName;
74+
}
75+
76+
@Nullable
77+
public Uri getPhotoUri() {
78+
return mPhotoUri;
79+
}
80+
81+
@Override
82+
public boolean equals(Object o) {
83+
if (this == o) return true;
84+
if (o == null || getClass() != o.getClass()) return false;
85+
86+
User user = (User) o;
87+
88+
return mProviderId.equals(user.mProviderId)
89+
&& (mEmail == null ? user.mEmail == null : mEmail.equals(user.mEmail))
90+
&& (mName == null ? user.mName == null : mName.equals(user.mName))
91+
&& (mPhotoUri == null ? user.mPhotoUri == null : mPhotoUri.equals(user.mPhotoUri));
92+
}
93+
94+
@Override
95+
public int hashCode() {
96+
int result = mProviderId.hashCode();
97+
result = 31 * result + (mEmail == null ? 0 : mEmail.hashCode());
98+
result = 31 * result + (mName == null ? 0 : mName.hashCode());
99+
result = 31 * result + (mPhotoUri == null ? 0 : mPhotoUri.hashCode());
100+
return result;
101+
}
102+
103+
@Override
104+
public String toString() {
105+
return "User{" +
106+
"mProviderId='" + mProviderId + '\'' +
107+
", mEmail='" + mEmail + '\'' +
108+
", mName='" + mName + '\'' +
109+
", mPhotoUri=" + mPhotoUri +
110+
'}';
111+
}
112+
113+
@Override
114+
public int describeContents() {
115+
return 0;
116+
}
117+
118+
@Override
119+
public void writeToParcel(@NonNull Parcel dest, int flags) {
120+
dest.writeString(mProviderId);
121+
dest.writeString(mEmail);
122+
dest.writeString(mPhoneNumber);
123+
dest.writeString(mName);
124+
dest.writeParcelable(mPhotoUri, flags);
125+
}
126+
127+
public static class Builder {
128+
private String mProviderId;
129+
private String mEmail;
130+
private String mPhoneNumber;
131+
private String mName;
132+
private Uri mPhotoUri;
133+
134+
public Builder(@AuthUI.SupportedProvider @NonNull String providerId,
135+
@Nullable String email) {
136+
mProviderId = providerId;
137+
mEmail = email;
138+
}
139+
140+
public Builder setPhoneNumber(String phoneNumber) {
141+
mPhoneNumber = phoneNumber;
142+
return this;
143+
}
144+
145+
public Builder setName(String name) {
146+
mName = name;
147+
return this;
148+
}
149+
150+
public Builder setPhotoUri(Uri photoUri) {
151+
mPhotoUri = photoUri;
152+
return this;
153+
}
154+
155+
public User build() {
156+
return new User(mProviderId, mEmail, mPhoneNumber, mName, mPhotoUri);
157+
}
158+
}
159+
}

auth/src/main/java/com/firebase/ui/auth/provider/FacebookProvider.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.app.Activity;
1818
import android.content.Context;
1919
import android.content.Intent;
20+
import android.net.Uri;
2021
import android.os.Bundle;
2122
import android.support.annotation.LayoutRes;
2223
import android.support.annotation.Nullable;
@@ -35,6 +36,7 @@
3536
import com.firebase.ui.auth.AuthUI;
3637
import com.firebase.ui.auth.IdpResponse;
3738
import com.firebase.ui.auth.R;
39+
import com.firebase.ui.auth.User;
3840
import com.google.firebase.auth.AuthCredential;
3941
import com.google.firebase.auth.FacebookAuthProvider;
4042

@@ -133,19 +135,31 @@ public void onCompleted(JSONObject object, GraphResponse response) {
133135
Log.w(TAG, "Received null response from Facebook GraphRequest");
134136
onFailure();
135137
} else {
138+
String email = null;
139+
String name = null;
140+
Uri photoUri = null;
141+
136142
try {
137-
String email = object.getString("email");
138-
onSuccess(email, loginResult);
143+
email = object.getString("email");
139144
} catch (JSONException e) {
140145
Log.e(TAG, "Failure retrieving Facebook email", e);
141-
onSuccess(null, loginResult);
142146
}
147+
try {
148+
name = object.getString("name");
149+
} catch (JSONException ignored) {}
150+
try {
151+
photoUri = Uri.parse(object.getJSONObject("picture")
152+
.getJSONObject("data")
153+
.getString("url"));
154+
} catch (JSONException ignored) {}
155+
156+
onSuccess(loginResult, email, name, photoUri);
143157
}
144158
}
145159
});
146160

147161
Bundle parameters = new Bundle();
148-
parameters.putString("fields", "id,name,email");
162+
parameters.putString("fields", "id,name,email,picture");
149163
request.setParameters(parameters);
150164
request.executeAsync();
151165
}
@@ -161,15 +175,18 @@ public void onError(FacebookException error) {
161175
onFailure();
162176
}
163177

164-
private void onSuccess(@Nullable String email, LoginResult loginResult) {
178+
private void onSuccess(LoginResult loginResult,
179+
@Nullable String email,
180+
String name,
181+
Uri photoUri) {
165182
gcCallbackManager();
166-
mCallbackObject.onSuccess(createIdpResponse(email, loginResult));
167-
}
168-
169-
private IdpResponse createIdpResponse(@Nullable String email, LoginResult loginResult) {
170-
return new IdpResponse.Builder(FacebookAuthProvider.PROVIDER_ID, email)
183+
mCallbackObject.onSuccess(new IdpResponse.Builder(
184+
new User.Builder(FacebookAuthProvider.PROVIDER_ID, email)
185+
.setName(name)
186+
.setPhotoUri(photoUri)
187+
.build())
171188
.setToken(loginResult.getAccessToken().getToken())
172-
.build();
189+
.build());
173190
}
174191

175192
private void onFailure() {

0 commit comments

Comments
 (0)