99
1010import com .firebase .ui .auth .AuthUI ;
1111import com .firebase .ui .auth .ErrorCodes ;
12+ import com .firebase .ui .auth .FirebaseAuthUIActivityResultContract ;
1213import com .firebase .ui .auth .IdpResponse ;
14+ import com .firebase .ui .auth .data .model .FirebaseAuthUIAuthenticationResult ;
1315import com .firebase .uidemo .R ;
1416import com .firebase .uidemo .databinding .ActivityAnonymousUpgradeBinding ;
1517import com .firebase .uidemo .util .ConfigurationUtils ;
2224
2325import java .util .List ;
2426
27+ import androidx .activity .result .ActivityResultCallback ;
28+ import androidx .activity .result .ActivityResultLauncher ;
2529import androidx .annotation .NonNull ;
2630import androidx .annotation .Nullable ;
2731import androidx .appcompat .app .AppCompatActivity ;
2832
29- public class AnonymousUpgradeActivity extends AppCompatActivity {
33+ public class AnonymousUpgradeActivity extends AppCompatActivity
34+ implements ActivityResultCallback <FirebaseAuthUIAuthenticationResult > {
3035
3136 private static final String TAG = "AccountLink" ;
3237
33- private static final int RC_SIGN_IN = 123 ;
34-
3538 private ActivityAnonymousUpgradeBinding mBinding ;
3639
3740 private AuthCredential mPendingCredential ;
3841
42+ private final ActivityResultLauncher <Intent > signIn =
43+ registerForActivityResult (new FirebaseAuthUIActivityResultContract (), this );
44+
3945 @ Override
4046 protected void onCreate (@ Nullable Bundle savedInstanceState ) {
4147 super .onCreate (savedInstanceState );
@@ -48,8 +54,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
4854 // Occurs after catching an email link
4955 IdpResponse response = IdpResponse .fromResultIntent (getIntent ());
5056 if (response != null ) {
51- handleSignInResult (RC_SIGN_IN , ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT ,
52- getIntent ());
57+ handleSignInResult (ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT , response );
5358 }
5459
5560 mBinding .anonSignIn .setOnClickListener (new View .OnClickListener () {
@@ -100,12 +105,12 @@ public void onComplete(@NonNull Task<AuthResult> task) {
100105
101106 public void startAuthUI () {
102107 List <AuthUI .IdpConfig > providers = ConfigurationUtils .getConfiguredProviders (this );
103- Intent intent = AuthUI .getInstance ().createSignInIntentBuilder ()
108+ Intent signInIntent = AuthUI .getInstance ().createSignInIntentBuilder ()
104109 .setLogo (R .drawable .firebase_auth_120dp )
105110 .setAvailableProviders (providers )
106111 .enableAnonymousUsersAutoUpgrade ()
107112 .build ();
108- startActivityForResult ( intent , RC_SIGN_IN );
113+ signIn . launch ( signInIntent );
109114 }
110115
111116 public void resolveMerge () {
@@ -145,34 +150,25 @@ public void onComplete(@NonNull Task<Void> task) {
145150 });
146151 }
147152
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 ;
175157 }
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 ();
176172 }
177173
178174 private void updateUI () {
@@ -220,4 +216,9 @@ private String getUserIdentifier(FirebaseUser user) {
220216 return "unknown" ;
221217 }
222218 }
219+
220+ @ Override
221+ public void onActivityResult (@ NonNull FirebaseAuthUIAuthenticationResult result ) {
222+ handleSignInResult (result .getResultCode (), result .getIdpResponse ());
223+ }
223224}
0 commit comments