10
10
11
11
import com .firebase .ui .auth .AuthUI ;
12
12
import com .firebase .ui .auth .ErrorCodes ;
13
+ import com .firebase .ui .auth .FirebaseAuthUIActivityResultContract ;
13
14
import com .firebase .ui .auth .IdpResponse ;
15
+ import com .firebase .ui .auth .data .model .FirebaseAuthUIAuthenticationResult ;
14
16
import com .firebase .uidemo .R ;
15
17
import com .firebase .uidemo .util .ConfigurationUtils ;
16
18
import com .google .android .gms .tasks .OnCompleteListener ;
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
import butterknife .BindView ;
29
33
import butterknife .ButterKnife ;
30
34
import butterknife .OnClick ;
31
35
32
- public class AnonymousUpgradeActivity extends AppCompatActivity {
36
+ public class AnonymousUpgradeActivity extends AppCompatActivity
37
+ implements ActivityResultCallback <FirebaseAuthUIAuthenticationResult > {
33
38
34
39
private static final String TAG = "AccountLink" ;
35
40
36
- private static final int RC_SIGN_IN = 123 ;
37
-
38
41
@ BindView (R .id .status_text )
39
42
TextView mStatus ;
40
43
@@ -52,6 +55,9 @@ public class AnonymousUpgradeActivity extends AppCompatActivity {
52
55
53
56
private AuthCredential mPendingCredential ;
54
57
58
+ private final ActivityResultLauncher <Intent > signIn =
59
+ registerForActivityResult (new FirebaseAuthUIActivityResultContract (), this );
60
+
55
61
@ Override
56
62
protected void onCreate (@ Nullable Bundle savedInstanceState ) {
57
63
super .onCreate (savedInstanceState );
@@ -64,8 +70,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
64
70
// Occurs after catching an email link
65
71
IdpResponse response = IdpResponse .fromResultIntent (getIntent ());
66
72
if (response != null ) {
67
- handleSignInResult (RC_SIGN_IN , ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT ,
68
- getIntent ());
73
+ handleSignInResult (ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT , response );
69
74
}
70
75
}
71
76
@@ -90,12 +95,12 @@ public void onComplete(@NonNull Task<AuthResult> task) {
90
95
@ OnClick (R .id .begin_flow )
91
96
public void startAuthUI () {
92
97
List <AuthUI .IdpConfig > providers = ConfigurationUtils .getConfiguredProviders (this );
93
- Intent intent = AuthUI .getInstance ().createSignInIntentBuilder ()
98
+ Intent signInIntent = AuthUI .getInstance ().createSignInIntentBuilder ()
94
99
.setLogo (R .drawable .firebase_auth_120dp )
95
100
.setAvailableProviders (providers )
96
101
.enableAnonymousUsersAutoUpgrade ()
97
102
.build ();
98
- startActivityForResult ( intent , RC_SIGN_IN );
103
+ signIn . launch ( signInIntent );
99
104
}
100
105
101
106
@ OnClick (R .id .resolve_merge )
@@ -137,34 +142,25 @@ public void onComplete(@NonNull Task<Void> task) {
137
142
});
138
143
}
139
144
140
- @ Override
141
- protected void onActivityResult (int requestCode , int resultCode , @ Nullable Intent data ) {
142
- super .onActivityResult (requestCode , resultCode , data );
143
- handleSignInResult (requestCode , resultCode , data );
144
- }
145
-
146
- private void handleSignInResult (int requestCode , int resultCode , Intent data ) {
147
- if (requestCode == RC_SIGN_IN ) {
148
- IdpResponse response = IdpResponse .fromResultIntent (data );
149
- if (response == null ) {
150
- // User pressed back button
151
- return ;
152
- }
153
- if (resultCode == RESULT_OK ) {
154
- setStatus ("Signed in as " + getUserIdentifier (FirebaseAuth .getInstance ()
155
- .getCurrentUser ()));
156
- } else if (response .getError ().getErrorCode () == ErrorCodes
157
- .ANONYMOUS_UPGRADE_MERGE_CONFLICT ) {
158
- setStatus ("Merge conflict: user already exists." );
159
- mResolveMergeButton .setEnabled (true );
160
- mPendingCredential = response .getCredentialForLinking ();
161
- } else {
162
- Toast .makeText (this , "Auth error, see logs" , Toast .LENGTH_SHORT ).show ();
163
- Log .w (TAG , "Error: " + response .getError ().getMessage (), response .getError ());
164
- }
165
-
166
- updateUI ();
145
+ private void handleSignInResult (int resultCode , @ Nullable IdpResponse response ) {
146
+ if (response == null ) {
147
+ // User pressed back button
148
+ return ;
149
+ }
150
+ if (resultCode == RESULT_OK ) {
151
+ setStatus ("Signed in as " + getUserIdentifier (FirebaseAuth .getInstance ()
152
+ .getCurrentUser ()));
153
+ } else if (response .getError ().getErrorCode () == ErrorCodes
154
+ .ANONYMOUS_UPGRADE_MERGE_CONFLICT ) {
155
+ setStatus ("Merge conflict: user already exists." );
156
+ mResolveMergeButton .setEnabled (true );
157
+ mPendingCredential = response .getCredentialForLinking ();
158
+ } else {
159
+ Toast .makeText (this , "Auth error, see logs" , Toast .LENGTH_SHORT ).show ();
160
+ Log .w (TAG , "Error: " + response .getError ().getMessage (), response .getError ());
167
161
}
162
+
163
+ updateUI ();
168
164
}
169
165
170
166
private void updateUI () {
@@ -212,4 +208,9 @@ private String getUserIdentifier(FirebaseUser user) {
212
208
return "unknown" ;
213
209
}
214
210
}
211
+
212
+ @ Override
213
+ public void onActivityResult (@ NonNull FirebaseAuthUIAuthenticationResult result ) {
214
+ handleSignInResult (result .getResultCode (), result .getIdpResponse ());
215
+ }
215
216
}
0 commit comments