Skip to content

Commit c4830f2

Browse files
committed
Fix rotation bugs
Signed-off-by: Alex Saveau <[email protected]>
1 parent 4b222dc commit c4830f2

File tree

9 files changed

+28
-43
lines changed

9 files changed

+28
-43
lines changed

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

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,14 @@
1212
*/
1313
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
1414
public final class Resource<T> {
15-
private State mState;
16-
private final boolean mUsable;
17-
15+
private final State mState;
1816
private final T mValue;
1917
private final Exception mException;
2018

21-
private Resource(State state, boolean usable, T value, Exception exception) {
19+
private boolean mIsUsed;
20+
21+
private Resource(State state, T value, Exception exception) {
2222
mState = state;
23-
mUsable = usable;
2423
mValue = value;
2524
mException = exception;
2625
}
@@ -30,47 +29,31 @@ private Resource(State state, boolean usable, T value, Exception exception) {
3029
*/
3130
@NonNull
3231
public static Resource<Void> forVoidSuccess() {
33-
return new Resource<>(State.SUCCESS, false, null, null);
32+
return new Resource<>(State.SUCCESS, null, null);
3433
}
3534

3635
/**
3736
* Creates a successful resource containing a value.
3837
*/
3938
@NonNull
4039
public static <T> Resource<T> forSuccess(@NonNull T value) {
41-
return new Resource<>(State.SUCCESS, false, value, null);
42-
}
43-
44-
/**
45-
* Similar to {@link #forSuccess(Object)}, but this resource can be used up.
46-
*/
47-
@NonNull
48-
public static <T> Resource<T> forUsableSuccess(@NonNull T value) {
49-
return new Resource<>(State.SUCCESS, true, value, null);
40+
return new Resource<>(State.SUCCESS, value, null);
5041
}
5142

5243
/**
5344
* Creates a failed resource with an exception.
5445
*/
5546
@NonNull
5647
public static <T> Resource<T> forFailure(@NonNull Exception e) {
57-
return new Resource<>(State.FAILURE, false, null, e);
58-
}
59-
60-
/**
61-
* Similar to {@link #forFailure(Exception)}, but this resource can be used up.
62-
*/
63-
@NonNull
64-
public static <T> Resource<T> forUsableFailure(@NonNull Exception e) {
65-
return new Resource<>(State.FAILURE, true, null, e);
48+
return new Resource<>(State.FAILURE, null, e);
6649
}
6750

6851
/**
6952
* Creates a resource in the loading state, without a value or an exception.
7053
*/
7154
@NonNull
7255
public static <T> Resource<T> forLoading() {
73-
return new Resource<>(State.LOADING, false, null, null);
56+
return new Resource<>(State.LOADING, null, null);
7457
}
7558

7659
@NonNull
@@ -80,16 +63,20 @@ public State getState() {
8063

8164
@Nullable
8265
public final Exception getException() {
83-
if (mUsable) { mState = State.USED; }
66+
mIsUsed = true;
8467
return mException;
8568
}
8669

8770
@Nullable
8871
public T getValue() {
89-
if (mUsable) { mState = State.USED; }
72+
mIsUsed = true;
9073
return mValue;
9174
}
9275

76+
public boolean isUsed() {
77+
return mIsUsed;
78+
}
79+
9380
@Override
9481
public boolean equals(Object o) {
9582
if (this == o) return true;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
66
public enum State {
7-
SUCCESS, FAILURE, LOADING, USED
7+
SUCCESS, FAILURE, LOADING
88
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void startSignIn(@NonNull HelperActivityBase activity) {
6161
}
6262

6363
private void start() {
64-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
64+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
6565
GoogleSignIn.getClient(getApplication(), getSignInOptions()).getSignInIntent(),
6666
RequestCodes.GOOGLE_PROVIDER)));
6767
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void onComplete(@NonNull Task<CredentialRequestResponse> task) {
7474
task.getResult(ApiException.class).getCredential());
7575
} catch (ResolvableApiException e) {
7676
if (e.getStatusCode() == CommonStatusCodes.RESOLUTION_REQUIRED) {
77-
setResult(Resource.<IdpResponse>forUsableFailure(
77+
setResult(Resource.<IdpResponse>forFailure(
7878
new PendingIntentRequiredException(
7979
e.getResolution(), RequestCodes.CRED_HINT)));
8080
} else {
@@ -99,12 +99,12 @@ private void startAuthMethodChoice() {
9999
String firstProvider = firstIdpConfig.getProviderId();
100100
switch (firstProvider) {
101101
case EmailAuthProvider.PROVIDER_ID:
102-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
102+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
103103
EmailActivity.createIntent(getApplication(), getArguments()),
104104
RequestCodes.EMAIL_FLOW)));
105105
break;
106106
case PhoneAuthProvider.PROVIDER_ID:
107-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
107+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
108108
PhoneActivity.createIntent(
109109
getApplication(), getArguments(), firstIdpConfig.getParams()),
110110
RequestCodes.PHONE_FLOW)));
@@ -114,7 +114,7 @@ private void startAuthMethodChoice() {
114114
break;
115115
}
116116
} else {
117-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
117+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
118118
AuthMethodPickerActivity.createIntent(getApplication(), getArguments()),
119119
RequestCodes.AUTH_PICKER_FLOW)));
120120
}
@@ -123,14 +123,14 @@ private void startAuthMethodChoice() {
123123
private void redirectSignIn(String provider, String email) {
124124
switch (provider) {
125125
case EmailAuthProvider.PROVIDER_ID:
126-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
126+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
127127
EmailActivity.createIntent(getApplication(), getArguments(), email),
128128
RequestCodes.EMAIL_FLOW)));
129129
break;
130130
case GoogleAuthProvider.PROVIDER_ID:
131131
case FacebookAuthProvider.PROVIDER_ID:
132132
case TwitterAuthProvider.PROVIDER_ID:
133-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
133+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
134134
SingleSignInActivity.createIntent(
135135
getApplication(),
136136
getArguments(),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void onChanged(@Nullable Resource<Void> resource) {
5555
return;
5656
}
5757

58-
onSaveOperation(resource);
58+
if (!resource.isUsed()) { onSaveOperation(resource); }
5959
}
6060
});
6161

auth/src/main/java/com/firebase/ui/auth/viewmodel/ResourceObserver.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public final void onChanged(Resource<T> resource) {
2828
}
2929
mActivity.getDialogHolder().dismissDialog();
3030

31+
if (resource.isUsed()) { return; }
32+
3133
if (resource.getState() == State.SUCCESS) {
3234
onSuccess(resource.getValue());
3335
} else if (resource.getState() == State.FAILURE) {

auth/src/main/java/com/firebase/ui/auth/viewmodel/idp/SocialProviderResponseHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void onSuccess(String provider) {
109109

110110
if (provider.equals(EmailAuthProvider.PROVIDER_ID)) {
111111
// Start email welcome back flow
112-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
112+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
113113
WelcomeBackPasswordPrompt.createIntent(
114114
getApplication(),
115115
getArguments(),
@@ -118,7 +118,7 @@ public void onSuccess(String provider) {
118118
)));
119119
} else {
120120
// Start Idp welcome back flow
121-
setResult(Resource.<IdpResponse>forUsableFailure(new IntentRequiredException(
121+
setResult(Resource.<IdpResponse>forFailure(new IntentRequiredException(
122122
WelcomeBackIdpPrompt.createIntent(
123123
getApplication(),
124124
getArguments(),

auth/src/main/java/com/firebase/ui/auth/viewmodel/smartlock/SmartLockHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public void onComplete(@NonNull Task<Void> task) {
7676
setResult(Resource.forVoidSuccess());
7777
} else if (task.getException() instanceof ResolvableApiException) {
7878
ResolvableApiException rae = (ResolvableApiException) task.getException();
79-
setResult(Resource.<Void>forUsableFailure(
79+
setResult(Resource.<Void>forFailure(
8080
new PendingIntentRequiredException(
8181
rae.getResolution(), RequestCodes.CRED_SAVE)));
8282
} else {

auth/src/test/java/com/firebase/ui/auth/testhelpers/ResourceMatchers.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ public static <T> ArgumentMatcher<Resource<T>> isFailure() {
2222
return isState(State.FAILURE);
2323
}
2424

25-
public static <T> ArgumentMatcher<Resource<T>> isUsed() {
26-
return isState(State.USED);
27-
}
28-
2925
public static <T> ArgumentMatcher<Resource<T>> isSuccessWith(final T result) {
3026
return new ArgumentMatcher<Resource<T>>() {
3127
@Override

0 commit comments

Comments
 (0)