Skip to content

Commit f6fb313

Browse files
SUPERCILEXsamtstern
authored andcommitted
Fix a ton of bugs (#4)
1 parent 5b2fc22 commit f6fb313

File tree

7 files changed

+218
-44
lines changed

7 files changed

+218
-44
lines changed

auth/README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@ dependencies {
5353
and add the Fabric repository
5454

5555
```groovy
56-
repositories {
57-
// ...
58-
maven { url 'https://maven.fabric.io/public' }
56+
allprojects {
57+
repositories {
58+
// ...
59+
maven { url 'https://maven.fabric.io/public' }
60+
}
5961
}
6062
```
6163

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
public class ExtraConstants {
2121
public static final String EXTRA_EMAIL = "extra_email";
2222
public static final String EXTRA_NAME = "extra_name";
23+
public static final String EXTRA_USER = "extra_user";
2324
public static final String EXTRA_ERROR_MESSAGE = "extra_error_msg";
2425
public static final String EXTRA_FLOW_PARAMS = "extra_flow_params";
2526
public static final String EXTRA_IDP_RESPONSE = "extra_idp_response";

auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.PendingIntent;
44
import android.content.Intent;
55
import android.content.IntentSender;
6+
import android.net.Uri;
67
import android.os.Bundle;
78
import android.support.annotation.NonNull;
89
import android.support.annotation.Nullable;
@@ -36,8 +37,7 @@
3637
*
3738
* Host Activities should implement {@link CheckEmailListener}.
3839
*/
39-
public class CheckEmailFragment extends BaseFragment implements
40-
View.OnClickListener {
40+
public class CheckEmailFragment extends BaseFragment implements View.OnClickListener {
4141

4242
/**
4343
* Interface to be implemented by Activities hosting this Fragment.
@@ -47,17 +47,17 @@ interface CheckEmailListener {
4747
/**
4848
* Email entered belongs to an existing email user.
4949
*/
50-
void onExistingEmailUser(@NonNull String email);
50+
void onExistingEmailUser(User user);
5151

5252
/**
5353
* Email entered belongs to an existing IDP user.
5454
*/
55-
void onExistingIdpUser(@NonNull String email, @NonNull String provider);
55+
void onExistingIdpUser(User user);
5656

5757
/**
5858
* Email entered does not beling to an existing user.
5959
*/
60-
void onNewUser(@NonNull String email, @Nullable String name);
60+
void onNewUser(User user);
6161

6262
}
6363

@@ -117,7 +117,11 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
117117
if (!(getActivity() instanceof CheckEmailListener)) {
118118
throw new IllegalStateException("Activity must implement CheckEmailListener");
119119
}
120-
this.mListener = (CheckEmailListener) getActivity();
120+
mListener = (CheckEmailListener) getActivity();
121+
122+
if (savedInstanceState != null) {
123+
return;
124+
}
121125

122126
// Check for email
123127
String email = getArguments().getString(ExtraConstants.EXTRA_EMAIL);
@@ -131,6 +135,12 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
131135
}
132136
}
133137

138+
@Override
139+
public void onSaveInstanceState(Bundle outState) {
140+
outState.putBoolean(ExtraConstants.HAS_EXISTING_INSTANCE, true);
141+
super.onSaveInstanceState(outState);
142+
}
143+
134144
@Override
135145
public void onActivityResult(int requestCode, int resultCode, Intent data) {
136146
super.onActivityResult(requestCode, resultCode, data);
@@ -182,15 +192,22 @@ public void onSuccess(ProviderQueryResult result) {
182192
if (providers == null || providers.isEmpty()) {
183193
// Get name from SmartLock, if possible
184194
String name = null;
195+
Uri photoUri = null;
185196
if (mLastCredential != null && mLastCredential.getId().equals(email)) {
186197
name = mLastCredential.getName();
198+
photoUri = mLastCredential.getProfilePictureUri();
187199
}
188200

189-
mListener.onNewUser(email, name);
201+
mListener.onNewUser(new User.Builder(email)
202+
.setName(name)
203+
.setPhotoUri(photoUri)
204+
.build());
190205
} else if (EmailAuthProvider.PROVIDER_ID.equalsIgnoreCase(providers.get(0))) {
191-
mListener.onExistingEmailUser(email);
206+
mListener.onExistingEmailUser(new User.Builder(email).build());
192207
} else {
193-
mListener.onExistingIdpUser(email, providers.get(0));
208+
mListener.onExistingIdpUser(new User.Builder(email)
209+
.setProvider(providers.get(0))
210+
.build());
194211
}
195212
}
196213
});

auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailActivity.java

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
import android.content.Context;
1818
import android.content.Intent;
1919
import android.os.Bundle;
20-
import android.support.annotation.NonNull;
21-
import android.support.annotation.Nullable;
20+
import android.support.v4.app.FragmentTransaction;
21+
import android.view.View;
2222

2323
import com.firebase.ui.auth.IdpResponse;
2424
import com.firebase.ui.auth.R;
@@ -46,6 +46,10 @@ protected void onCreate(Bundle savedInstanceState) {
4646
super.onCreate(savedInstanceState);
4747
setContentView(R.layout.activity_register_email);
4848

49+
if (savedInstanceState != null) {
50+
return;
51+
}
52+
4953
// Get email from intent (can be null)
5054
String email = getIntent().getExtras().getString(ExtraConstants.EXTRA_EMAIL);
5155

@@ -58,6 +62,12 @@ protected void onCreate(Bundle savedInstanceState) {
5862
.commit();
5963
}
6064

65+
@Override
66+
protected void onSaveInstanceState(Bundle outState) {
67+
outState.putBoolean(ExtraConstants.HAS_EXISTING_INSTANCE, true);
68+
super.onSaveInstanceState(outState);
69+
}
70+
6171
@Override
6272
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
6373
super.onActivityResult(requestCode, resultCode, data);
@@ -69,45 +79,45 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
6979
}
7080

7181
@Override
72-
public void onExistingEmailUser(@NonNull String email) {
82+
public void onExistingEmailUser(User user) {
7383
// Existing email user, direct them to sign in with their password.
7484
startActivityForResult(
7585
WelcomeBackPasswordPrompt.createIntent(
7686
this,
7787
mActivityHelper.getFlowParams(),
78-
new IdpResponse(EmailAuthProvider.PROVIDER_ID, email)),
88+
new IdpResponse(EmailAuthProvider.PROVIDER_ID, user.getEmail())),
7989
RC_SIGN_IN);
8090

8191
setSlideAnimation();
8292
}
8393

8494
@Override
85-
public void onExistingIdpUser(@NonNull String email, @NonNull String provider) {
95+
public void onExistingIdpUser(User user) {
8696
// Existing social user, direct them to sign in using their chosen provider.
8797
Intent intent = WelcomeBackIdpPrompt.createIntent(
8898
this,
8999
mActivityHelper.getFlowParams(),
90-
provider,
100+
user.getProvider(),
91101
null,
92-
email);
93-
mActivityHelper.startActivityForResult(intent,
94-
RC_WELCOME_BACK_IDP);
102+
user.getEmail());
103+
mActivityHelper.startActivityForResult(intent, RC_WELCOME_BACK_IDP);
95104

96105
setSlideAnimation();
97106
}
98107

99108
@Override
100-
public void onNewUser(@NonNull String email, @Nullable String name) {
109+
public void onNewUser(User user) {
101110
// New user, direct them to create an account with email/password.
102111
RegisterEmailFragment fragment = RegisterEmailFragment.getInstance(
103112
mActivityHelper.getFlowParams(),
104-
email,
105-
name);
106-
getSupportFragmentManager().beginTransaction()
107-
.replace(R.id.fragment_register_email, fragment, RegisterEmailFragment.TAG)
108-
.addSharedElement(findViewById(R.id.email_layout), "email_field")
109-
.disallowAddToBackStack()
110-
.commit();
113+
user);
114+
FragmentTransaction ft = getSupportFragmentManager().beginTransaction()
115+
.replace(R.id.fragment_register_email, fragment, RegisterEmailFragment.TAG);
116+
117+
View v = findViewById(R.id.email_layout);
118+
if (v != null) ft.addSharedElement(v, "email_field");
119+
120+
ft.disallowAddToBackStack().commit();
111121
}
112122

113123
private void setSlideAnimation() {

auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,29 @@ public class RegisterEmailFragment extends BaseFragment implements
6060
private RequiredFieldValidator mNameValidator;
6161
private SaveSmartLock mSaveSmartLock;
6262

63-
public static RegisterEmailFragment getInstance(FlowParameters flowParameters,
64-
@Nullable String email,
65-
@Nullable String name) {
63+
private User mUser;
64+
65+
public static RegisterEmailFragment getInstance(FlowParameters flowParameters, User user) {
6666
RegisterEmailFragment fragment = new RegisterEmailFragment();
6767

6868
Bundle args = new Bundle();
6969
args.putParcelable(ExtraConstants.EXTRA_FLOW_PARAMS, flowParameters);
70-
args.putString(ExtraConstants.EXTRA_EMAIL, email);
71-
args.putString(ExtraConstants.EXTRA_NAME, name);
70+
args.putParcelable(ExtraConstants.EXTRA_USER, user);
7271

7372
fragment.setArguments(args);
7473
return fragment;
7574
}
7675

76+
@Override
77+
public void onCreate(@Nullable Bundle savedInstanceState) {
78+
super.onCreate(savedInstanceState);
79+
if (savedInstanceState == null) {
80+
mUser = getArguments().getParcelable(ExtraConstants.EXTRA_USER);
81+
} else {
82+
mUser = savedInstanceState.getParcelable(ExtraConstants.EXTRA_USER);
83+
}
84+
}
85+
7786
@Nullable
7887
@Override
7988
public View onCreateView(LayoutInflater inflater,
@@ -102,24 +111,44 @@ public View onCreateView(LayoutInflater inflater,
102111
mPasswordEditText.setOnFocusChangeListener(this);
103112
v.findViewById(R.id.button_create).setOnClickListener(this);
104113

114+
if (savedInstanceState != null) {
115+
return v;
116+
}
117+
105118
// If email is passed in, fill in the field and move down to the name field.
106-
String email = getArguments().getString(ExtraConstants.EXTRA_EMAIL);
119+
String email = mUser.getEmail();
107120
if (!TextUtils.isEmpty(email)) {
108121
mEmailEditText.setText(email);
109-
mNameEditText.requestFocus();
110122
}
111123

112124
// If name is passed in, fill in the field and move down to the password field.
113-
String name = getArguments().getString(ExtraConstants.EXTRA_NAME);
125+
String name = mUser.getName();
114126
if (!TextUtils.isEmpty(name)) {
115127
mNameEditText.setText(name);
116-
mPasswordEditText.requestFocus();
128+
}
129+
130+
// See http://stackoverflow.com/questions/11082341/android-requestfocus-ineffective#comment51774752_11082523
131+
if (!TextUtils.isEmpty(mNameEditText.getText())) {
132+
safeRequestFocus(mPasswordEditText);
133+
} else if (!TextUtils.isEmpty(mEmailEditText.getText())) {
134+
safeRequestFocus(mNameEditText);
135+
} else {
136+
safeRequestFocus(mEmailEditText);
117137
}
118138

119139
return v;
120140

121141
}
122142

143+
private void safeRequestFocus(final View v) {
144+
v.post(new Runnable() {
145+
@Override
146+
public void run() {
147+
v.requestFocus();
148+
}
149+
});
150+
}
151+
123152
@Override
124153
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
125154
super.onActivityCreated(savedInstanceState);
@@ -132,12 +161,22 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
132161
setUpTermsOfService();
133162
}
134163

164+
@Override
165+
public void onSaveInstanceState(Bundle outState) {
166+
outState.putParcelable(ExtraConstants.EXTRA_USER,
167+
new User.Builder(mEmailEditText.getText().toString())
168+
.setName(mNameEditText.getText().toString())
169+
.setPhotoUri(mUser.getPhotoUri())
170+
.build());
171+
super.onSaveInstanceState(outState);
172+
}
173+
135174
private void setUpTermsOfService() {
136175
if (mHelper.getFlowParams().termsOfServiceUrl == null) {
137176
return;
138177
}
139-
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(
140-
ContextCompat.getColor(getActivity().getApplicationContext(), R.color.linkColor));
178+
ForegroundColorSpan foregroundColorSpan =
179+
new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.linkColor));
141180

142181
String preamble = getResources().getString(R.string.create_account_preamble);
143182
String link = getResources().getString(R.string.terms_of_service);
@@ -204,7 +243,10 @@ private void registerUser(final String email, final String name, final String pa
204243
public void onSuccess(AuthResult authResult) {
205244
// Set display name
206245
UserProfileChangeRequest changeNameRequest =
207-
new UserProfileChangeRequest.Builder().setDisplayName(name).build();
246+
new UserProfileChangeRequest.Builder()
247+
.setDisplayName(name)
248+
.setPhotoUri(mUser.getPhotoUri())
249+
.build();
208250

209251
final FirebaseUser user = authResult.getUser();
210252
user.updateProfile(changeNameRequest)
@@ -222,7 +264,7 @@ public void onComplete(@NonNull Task<Void> task) {
222264
user,
223265
password,
224266
new IdpResponse(EmailAuthProvider.PROVIDER_ID,
225-
email));
267+
email));
226268
}
227269
});
228270
}

0 commit comments

Comments
 (0)