9
9
10
10
import com .firebase .ui .auth .AuthUI ;
11
11
import com .firebase .ui .auth .ErrorCodes ;
12
+ import com .firebase .ui .auth .FirebaseAuthUIActivityResultContract ;
12
13
import com .firebase .ui .auth .IdpResponse ;
14
+ import com .firebase .ui .auth .data .model .FirebaseAuthUIAuthenticationResult ;
13
15
import com .firebase .uidemo .R ;
14
16
import com .firebase .uidemo .databinding .ActivityAnonymousUpgradeBinding ;
15
17
import com .firebase .uidemo .util .ConfigurationUtils ;
22
24
23
25
import java .util .List ;
24
26
27
+ import androidx .activity .result .ActivityResultCallback ;
28
+ import androidx .activity .result .ActivityResultLauncher ;
25
29
import androidx .annotation .NonNull ;
26
30
import androidx .annotation .Nullable ;
27
31
import androidx .appcompat .app .AppCompatActivity ;
28
32
29
- public class AnonymousUpgradeActivity extends AppCompatActivity {
33
+ public class AnonymousUpgradeActivity extends AppCompatActivity
34
+ implements ActivityResultCallback <FirebaseAuthUIAuthenticationResult > {
30
35
31
36
private static final String TAG = "AccountLink" ;
32
37
33
- private static final int RC_SIGN_IN = 123 ;
34
-
35
38
private ActivityAnonymousUpgradeBinding mBinding ;
36
39
37
40
private AuthCredential mPendingCredential ;
38
41
42
+ private final ActivityResultLauncher <Intent > signIn =
43
+ registerForActivityResult (new FirebaseAuthUIActivityResultContract (), this );
44
+
39
45
@ Override
40
46
protected void onCreate (@ Nullable Bundle savedInstanceState ) {
41
47
super .onCreate (savedInstanceState );
@@ -48,8 +54,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
48
54
// Occurs after catching an email link
49
55
IdpResponse response = IdpResponse .fromResultIntent (getIntent ());
50
56
if (response != null ) {
51
- handleSignInResult (RC_SIGN_IN , ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT ,
52
- getIntent ());
57
+ handleSignInResult (ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT , response );
53
58
}
54
59
55
60
mBinding .anonSignIn .setOnClickListener (new View .OnClickListener () {
@@ -100,12 +105,12 @@ public void onComplete(@NonNull Task<AuthResult> task) {
100
105
101
106
public void startAuthUI () {
102
107
List <AuthUI .IdpConfig > providers = ConfigurationUtils .getConfiguredProviders (this );
103
- Intent intent = AuthUI .getInstance ().createSignInIntentBuilder ()
108
+ Intent signInIntent = AuthUI .getInstance ().createSignInIntentBuilder ()
104
109
.setLogo (R .drawable .firebase_auth_120dp )
105
110
.setAvailableProviders (providers )
106
111
.enableAnonymousUsersAutoUpgrade ()
107
112
.build ();
108
- startActivityForResult ( intent , RC_SIGN_IN );
113
+ signIn . launch ( signInIntent );
109
114
}
110
115
111
116
public void resolveMerge () {
@@ -145,34 +150,25 @@ public void onComplete(@NonNull Task<Void> task) {
145
150
});
146
151
}
147
152
148
- @ Override
149
- protected void onActivityResult (int requestCode , int resultCode , @ Nullable Intent data ) {
150
- super .onActivityResult (requestCode , resultCode , data );
151
- handleSignInResult (requestCode , resultCode , data );
152
- }
153
-
154
- private void handleSignInResult (int requestCode , int resultCode , Intent data ) {
155
- if (requestCode == RC_SIGN_IN ) {
156
- IdpResponse response = IdpResponse .fromResultIntent (data );
157
- if (response == null ) {
158
- // User pressed back button
159
- return ;
160
- }
161
- if (resultCode == RESULT_OK ) {
162
- setStatus ("Signed in as " + getUserIdentifier (FirebaseAuth .getInstance ()
163
- .getCurrentUser ()));
164
- } else if (response .getError ().getErrorCode () == ErrorCodes
165
- .ANONYMOUS_UPGRADE_MERGE_CONFLICT ) {
166
- setStatus ("Merge conflict: user already exists." );
167
- mBinding .resolveMerge .setEnabled (true );
168
- mPendingCredential = response .getCredentialForLinking ();
169
- } else {
170
- Toast .makeText (this , "Auth error, see logs" , Toast .LENGTH_SHORT ).show ();
171
- Log .w (TAG , "Error: " + response .getError ().getMessage (), response .getError ());
172
- }
173
-
174
- updateUI ();
153
+ private void handleSignInResult (int resultCode , @ Nullable IdpResponse response ) {
154
+ if (response == null ) {
155
+ // User pressed back button
156
+ return ;
175
157
}
158
+ if (resultCode == RESULT_OK ) {
159
+ setStatus ("Signed in as " + getUserIdentifier (FirebaseAuth .getInstance ()
160
+ .getCurrentUser ()));
161
+ } else if (response .getError ().getErrorCode () == ErrorCodes
162
+ .ANONYMOUS_UPGRADE_MERGE_CONFLICT ) {
163
+ setStatus ("Merge conflict: user already exists." );
164
+ mBinding .resolveMerge .setEnabled (true );
165
+ mPendingCredential = response .getCredentialForLinking ();
166
+ } else {
167
+ Toast .makeText (this , "Auth error, see logs" , Toast .LENGTH_SHORT ).show ();
168
+ Log .w (TAG , "Error: " + response .getError ().getMessage (), response .getError ());
169
+ }
170
+
171
+ updateUI ();
176
172
}
177
173
178
174
private void updateUI () {
@@ -220,4 +216,9 @@ private String getUserIdentifier(FirebaseUser user) {
220
216
return "unknown" ;
221
217
}
222
218
}
219
+
220
+ @ Override
221
+ public void onActivityResult (@ NonNull FirebaseAuthUIAuthenticationResult result ) {
222
+ handleSignInResult (result .getResultCode (), result .getIdpResponse ());
223
+ }
223
224
}
0 commit comments