Skip to content

Commit 39c85f0

Browse files
SUPERCILEXsamtstern
authored andcommitted
Prep for final refactors (#1188)
1 parent 0857d59 commit 39c85f0

27 files changed

+211
-314
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.firebase.ui.auth.data.model;
2+
3+
import android.content.Intent;
4+
import android.support.annotation.NonNull;
5+
import android.support.annotation.RestrictTo;
6+
7+
import com.firebase.ui.auth.ErrorCodes;
8+
import com.firebase.ui.auth.FirebaseUiException;
9+
10+
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
11+
public class IntentRequiredException extends FirebaseUiException {
12+
private final Intent mIntent;
13+
private final int mRequestCode;
14+
15+
public IntentRequiredException(@NonNull Intent intent, int requestCode) {
16+
super(ErrorCodes.UNKNOWN_ERROR);
17+
mIntent = intent;
18+
mRequestCode = requestCode;
19+
}
20+
21+
@NonNull
22+
public Intent getIntent() {
23+
return mIntent;
24+
}
25+
26+
public int getRequestCode() {
27+
return mRequestCode;
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.firebase.ui.auth.data.model;
2+
3+
import android.app.PendingIntent;
4+
import android.support.annotation.NonNull;
5+
import android.support.annotation.RestrictTo;
6+
7+
import com.firebase.ui.auth.ErrorCodes;
8+
import com.firebase.ui.auth.FirebaseUiException;
9+
10+
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
11+
public class PendingIntentRequiredException extends FirebaseUiException {
12+
private final PendingIntent mPendingIntent;
13+
private final int mRequestCode;
14+
15+
public PendingIntentRequiredException(@NonNull PendingIntent pendingIntent, int requestCode) {
16+
super(ErrorCodes.UNKNOWN_ERROR);
17+
mPendingIntent = pendingIntent;
18+
mRequestCode = requestCode;
19+
}
20+
21+
@NonNull
22+
public PendingIntent getPendingIntent() {
23+
return mPendingIntent;
24+
}
25+
26+
public int getRequestCode() {
27+
return mRequestCode;
28+
}
29+
}

auth/src/main/java/com/firebase/ui/auth/data/model/Resource.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public final class Resource<T> {
1717
private final T mValue;
1818
private final Exception mException;
1919

20+
private boolean mUsed;
21+
2022
private Resource(State state, T value, Exception exception) {
2123
mState = state;
2224
mValue = value;
@@ -62,14 +64,20 @@ public State getState() {
6264

6365
@Nullable
6466
public final Exception getException() {
67+
mUsed = true;
6568
return mException;
6669
}
6770

6871
@Nullable
6972
public T getValue() {
73+
mUsed = true;
7074
return mValue;
7175
}
7276

77+
public boolean isUsed() {
78+
return mUsed;
79+
}
80+
7381
@Override
7482
public boolean equals(Object o) {
7583
if (this == o) return true;

auth/src/main/java/com/firebase/ui/auth/data/remote/ProfileMerger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import com.firebase.ui.auth.IdpResponse;
99
import com.firebase.ui.auth.data.model.User;
10-
import com.firebase.ui.auth.ui.TaskFailureLogger;
10+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
1111
import com.google.android.gms.tasks.Continuation;
1212
import com.google.android.gms.tasks.Task;
1313
import com.google.android.gms.tasks.Tasks;

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

Lines changed: 0 additions & 35 deletions
This file was deleted.

auth/src/main/java/com/firebase/ui/auth/ui/credentials/CredentialSaveActivity.java

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.arch.lifecycle.ViewModelProviders;
55
import android.content.Context;
66
import android.content.Intent;
7-
import android.content.IntentSender;
87
import android.os.Bundle;
98
import android.support.annotation.NonNull;
109
import android.support.annotation.Nullable;
@@ -15,17 +14,15 @@
1514
import com.firebase.ui.auth.data.model.Resource;
1615
import com.firebase.ui.auth.ui.HelperActivityBase;
1716
import com.firebase.ui.auth.util.ExtraConstants;
18-
import com.firebase.ui.auth.viewmodel.PendingResolution;
19-
import com.firebase.ui.auth.viewmodel.ResolutionCodes;
17+
import com.firebase.ui.auth.util.ui.FlowUtils;
2018
import com.firebase.ui.auth.viewmodel.smartlock.SmartLockHandler;
2119
import com.google.android.gms.auth.api.credentials.Credential;
2220

2321
/**
2422
* Invisible Activity used for saving credentials to SmartLock.
2523
*/
2624
public class CredentialSaveActivity extends HelperActivityBase {
27-
28-
private static final String TAG = "SmartlockSave";
25+
private static final String TAG = "CredentialSaveActivity";
2926

3027
private SmartLockHandler mHandler;
3128
private IdpResponse mIdpResponse;
@@ -50,7 +47,7 @@ protected void onCreate(Bundle savedInstanceState) {
5047
Credential credential = getIntent().getParcelableExtra(ExtraConstants.EXTRA_CREDENTIAL);
5148
mIdpResponse = getIntent().getParcelableExtra(ExtraConstants.EXTRA_IDP_RESPONSE);
5249

53-
mHandler.getSaveOperation().observe(this, new Observer<Resource<Void>>() {
50+
mHandler.getOperation().observe(this, new Observer<Resource<Void>>() {
5451
@Override
5552
public void onChanged(@Nullable Resource<Void> resource) {
5653
if (resource == null) {
@@ -62,20 +59,8 @@ public void onChanged(@Nullable Resource<Void> resource) {
6259
}
6360
});
6461

65-
mHandler.getPendingResolution().observe(this, new Observer<PendingResolution>() {
66-
@Override
67-
public void onChanged(@Nullable PendingResolution resolution) {
68-
if (resolution == null) {
69-
Log.w(TAG, "getPendingResolution:onChanged: null");
70-
return;
71-
}
72-
73-
onPendingResolution(resolution);
74-
}
75-
});
76-
7762
// Avoid double-saving
78-
Resource<Void> currentOp = mHandler.getSaveOperation().getValue();
63+
Resource<Void> currentOp = mHandler.getOperation().getValue();
7964
if (currentOp == null) {
8065
Log.d(TAG, "Launching save operation.");
8166
mHandler.saveCredentials(credential);
@@ -86,10 +71,8 @@ public void onChanged(@Nullable PendingResolution resolution) {
8671

8772
@Override
8873
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
89-
// Forward activity results to the ViewModel
90-
if (!mHandler.onActivityResult(requestCode, resultCode, data)) {
91-
super.onActivityResult(requestCode, resultCode, data);
92-
}
74+
super.onActivityResult(requestCode, resultCode, data);
75+
mHandler.onActivityResult(requestCode, resultCode);
9376
}
9477

9578
private void onSaveOperation(@NonNull Resource<Void> resource) {
@@ -99,23 +82,11 @@ private void onSaveOperation(@NonNull Resource<Void> resource) {
9982
break;
10083
case SUCCESS:
10184
case FAILURE:
102-
finish(RESULT_OK, mIdpResponse.toIntent());
85+
if (!resource.isUsed()
86+
&& !FlowUtils.handleError(this, resource.getException())) {
87+
finish(RESULT_OK, mIdpResponse.toIntent());
88+
}
10389
break;
10490
}
10591
}
106-
107-
private void onPendingResolution(@NonNull PendingResolution resolution) {
108-
if (resolution.getRequestCode() == ResolutionCodes.RC_CRED_SAVE) {
109-
try {
110-
startIntentSenderForResult(
111-
resolution.getPendingIntent().getIntentSender(),
112-
resolution.getRequestCode(),
113-
null, 0, 0, 0);
114-
} catch (IntentSender.SendIntentException e) {
115-
Log.e(TAG, "Failed to send resolution.", e);
116-
finish(RESULT_OK, mIdpResponse.toIntent());
117-
};
118-
}
119-
}
120-
12192
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ protected void onCreate(Bundle savedInstanceState) {
6464

6565
mHandler = ViewModelProviders.of(this).get(RecoverPasswordHandler.class);
6666
mHandler.init(getFlowHolder().getArguments());
67-
mHandler.getProgressLiveData().observe(this, new Observer<Resource<String>>() {
67+
mHandler.getOperation().observe(this, new Observer<Resource<String>>() {
6868
@Override
6969
public void onChanged(Resource<String> resource) {
7070
if (resource.getState() == State.LOADING) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
import com.firebase.ui.auth.data.model.User;
2222
import com.firebase.ui.auth.data.remote.ProfileMerger;
2323
import com.firebase.ui.auth.ui.FragmentBase;
24-
import com.firebase.ui.auth.ui.TaskFailureLogger;
2524
import com.firebase.ui.auth.ui.idp.WelcomeBackIdpPrompt;
2625
import com.firebase.ui.auth.util.ExtraConstants;
2726
import com.firebase.ui.auth.util.data.ProviderUtils;
27+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
2828
import com.firebase.ui.auth.util.ui.ImeHelper;
2929
import com.firebase.ui.auth.util.ui.PreambleHandler;
3030
import com.firebase.ui.auth.util.ui.fieldvalidators.BaseValidator;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ protected void onCreate(Bundle savedInstanceState) {
110110
mHandler.init(getFlowHolder().getArguments());
111111

112112
// Observe the state of the main auth operation
113-
mHandler.getSignInOperation().observe(this, new Observer<Resource<IdpResponse>>() {
113+
mHandler.getOperation().observe(this, new Observer<Resource<IdpResponse>>() {
114114
@Override
115115
public void onChanged(@Nullable Resource<IdpResponse> resource) {
116116
onSignInOperation(resource);

auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@
4141
import com.firebase.ui.auth.provider.TwitterProvider;
4242
import com.firebase.ui.auth.ui.AppCompatBase;
4343
import com.firebase.ui.auth.ui.HelperActivityBase;
44-
import com.firebase.ui.auth.ui.TaskFailureLogger;
4544
import com.firebase.ui.auth.ui.email.EmailActivity;
4645
import com.firebase.ui.auth.ui.phone.PhoneActivity;
4746
import com.firebase.ui.auth.util.data.ProviderUtils;
47+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
4848
import com.google.android.gms.tasks.OnSuccessListener;
4949
import com.google.firebase.auth.AuthCredential;
5050
import com.google.firebase.auth.AuthResult;

auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939
import com.firebase.ui.auth.provider.TwitterProvider;
4040
import com.firebase.ui.auth.ui.AppCompatBase;
4141
import com.firebase.ui.auth.ui.HelperActivityBase;
42-
import com.firebase.ui.auth.ui.TaskFailureLogger;
4342
import com.firebase.ui.auth.util.ExtraConstants;
4443
import com.firebase.ui.auth.util.data.ProviderUtils;
44+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
4545
import com.google.android.gms.tasks.OnCompleteListener;
4646
import com.google.android.gms.tasks.OnFailureListener;
4747
import com.google.android.gms.tasks.OnSuccessListener;

auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public enum FirebaseAuthError {
3333

3434
ERROR_CREDENTIAL_ALREADY_IN_USE("This credential is already associated with a different user account."),
3535

36-
ERROR_USER_DISABLED( "The user account has been disabled by an administrator."),
36+
ERROR_USER_DISABLED("The user account has been disabled by an administrator."),
3737

3838
ERROR_USER_TOKEN_EXPIRED("The user's credential has expired. The user must sign in again."),
3939

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.firebase.ui.auth.util.data;
2+
3+
import android.support.annotation.NonNull;
4+
import android.util.Log;
5+
6+
import com.google.android.gms.tasks.OnFailureListener;
7+
8+
public class TaskFailureLogger implements OnFailureListener {
9+
private String mTag;
10+
private String mMessage;
11+
12+
public TaskFailureLogger(@NonNull String tag, @NonNull String message) {
13+
mTag = tag;
14+
mMessage = message;
15+
}
16+
17+
@Override
18+
public void onFailure(@NonNull Exception e) {
19+
Log.w(mTag, mMessage, e);
20+
}
21+
}

auth/src/main/java/com/firebase/ui/auth/util/signincontainer/IdpSignInContainer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
import com.firebase.ui.auth.provider.TwitterProvider;
3838
import com.firebase.ui.auth.ui.FragmentBase;
3939
import com.firebase.ui.auth.ui.HelperActivityBase;
40-
import com.firebase.ui.auth.ui.TaskFailureLogger;
4140
import com.firebase.ui.auth.ui.idp.CredentialSignInHandler;
4241
import com.firebase.ui.auth.util.ExtraConstants;
4342
import com.firebase.ui.auth.util.data.ProviderUtils;
43+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
4444
import com.google.android.gms.tasks.OnSuccessListener;
4545
import com.google.firebase.auth.AuthCredential;
4646
import com.google.firebase.auth.AuthResult;

auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
import com.firebase.ui.auth.data.model.FlowParameters;
2020
import com.firebase.ui.auth.data.model.User;
2121
import com.firebase.ui.auth.ui.FragmentBase;
22-
import com.firebase.ui.auth.ui.TaskFailureLogger;
2322
import com.firebase.ui.auth.ui.email.EmailActivity;
2423
import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity;
2524
import com.firebase.ui.auth.ui.phone.PhoneActivity;
2625
import com.firebase.ui.auth.util.ExtraConstants;
2726
import com.firebase.ui.auth.util.GoogleApiUtils;
2827
import com.firebase.ui.auth.util.data.ProviderUtils;
28+
import com.firebase.ui.auth.util.data.TaskFailureLogger;
2929
import com.google.android.gms.auth.api.credentials.Credential;
3030
import com.google.android.gms.auth.api.credentials.CredentialRequest;
3131
import com.google.android.gms.auth.api.credentials.CredentialRequestResponse;

auth/src/main/java/com/firebase/ui/auth/util/ui/BucketedTextChangeListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public BucketedTextChangeListener(EditText editText, int expectedContentLength,
7171
}
7272

7373
/**
74-
* For example, passing in ("-", 6) would return the following result: {"", "-", "--", "---",
75-
* "----", "-----", "------"}
74+
* For example, passing in ("-", 6) would return the following result:
75+
* {"", "-", "--", "---", "----", "-----", "------"}
7676
*
7777
* @param repeatableChar the char to repeat to the specified length
7878
* @param length the maximum length of repeated chars
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.firebase.ui.auth.util.ui;
2+
3+
import android.app.Activity;
4+
import android.app.PendingIntent;
5+
import android.content.IntentSender;
6+
import android.support.annotation.NonNull;
7+
8+
import com.firebase.ui.auth.IdpResponse;
9+
import com.firebase.ui.auth.data.model.IntentRequiredException;
10+
import com.firebase.ui.auth.data.model.PendingIntentRequiredException;
11+
import com.firebase.ui.auth.ui.HelperActivityBase;
12+
13+
public final class FlowUtils {
14+
private FlowUtils() {
15+
throw new AssertionError("No instance for you!");
16+
}
17+
18+
public static boolean handleError(@NonNull HelperActivityBase activity, @NonNull Exception e) {
19+
if (e instanceof IntentRequiredException) {
20+
IntentRequiredException typed = (IntentRequiredException) e;
21+
activity.startActivityForResult(typed.getIntent(), typed.getRequestCode());
22+
return true;
23+
} else if (e instanceof PendingIntentRequiredException) {
24+
PendingIntentRequiredException typed = (PendingIntentRequiredException) e;
25+
startIntentSenderForResult(activity, typed.getPendingIntent(), typed.getRequestCode());
26+
return true;
27+
}
28+
29+
return false;
30+
}
31+
32+
private static void startIntentSenderForResult(HelperActivityBase activity,
33+
PendingIntent intent,
34+
int requestCode) {
35+
try {
36+
activity.startIntentSenderForResult(
37+
intent.getIntentSender(), requestCode, null, 0, 0, 0);
38+
} catch (IntentSender.SendIntentException e) {
39+
activity.finish(Activity.RESULT_CANCELED, IdpResponse.getErrorIntent(e));
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)