1010
1111import com .firebase .ui .auth .AuthUI ;
1212import com .firebase .ui .auth .ErrorCodes ;
13+ import com .firebase .ui .auth .FirebaseAuthUIActivityResultContract ;
1314import com .firebase .ui .auth .IdpResponse ;
15+ import com .firebase .ui .auth .data .model .FirebaseAuthUIAuthenticationResult ;
1416import com .firebase .uidemo .R ;
1517import com .firebase .uidemo .util .ConfigurationUtils ;
1618import com .google .android .gms .tasks .OnCompleteListener ;
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 ;
2832import butterknife .BindView ;
2933import butterknife .ButterKnife ;
3034import butterknife .OnClick ;
3135
32- public class AnonymousUpgradeActivity extends AppCompatActivity {
36+ public class AnonymousUpgradeActivity extends AppCompatActivity
37+ implements ActivityResultCallback <FirebaseAuthUIAuthenticationResult > {
3338
3439 private static final String TAG = "AccountLink" ;
3540
36- private static final int RC_SIGN_IN = 123 ;
37-
3841 @ BindView (R .id .status_text )
3942 TextView mStatus ;
4043
@@ -52,6 +55,9 @@ public class AnonymousUpgradeActivity extends AppCompatActivity {
5255
5356 private AuthCredential mPendingCredential ;
5457
58+ private final ActivityResultLauncher <Intent > signIn =
59+ registerForActivityResult (new FirebaseAuthUIActivityResultContract (), this );
60+
5561 @ Override
5662 protected void onCreate (@ Nullable Bundle savedInstanceState ) {
5763 super .onCreate (savedInstanceState );
@@ -64,8 +70,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
6470 // Occurs after catching an email link
6571 IdpResponse response = IdpResponse .fromResultIntent (getIntent ());
6672 if (response != null ) {
67- handleSignInResult (RC_SIGN_IN , ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT ,
68- getIntent ());
73+ handleSignInResult (ErrorCodes .ANONYMOUS_UPGRADE_MERGE_CONFLICT , response );
6974 }
7075 }
7176
@@ -90,12 +95,12 @@ public void onComplete(@NonNull Task<AuthResult> task) {
9095 @ OnClick (R .id .begin_flow )
9196 public void startAuthUI () {
9297 List <AuthUI .IdpConfig > providers = ConfigurationUtils .getConfiguredProviders (this );
93- Intent intent = AuthUI .getInstance ().createSignInIntentBuilder ()
98+ Intent signInIntent = AuthUI .getInstance ().createSignInIntentBuilder ()
9499 .setLogo (R .drawable .firebase_auth_120dp )
95100 .setAvailableProviders (providers )
96101 .enableAnonymousUsersAutoUpgrade ()
97102 .build ();
98- startActivityForResult ( intent , RC_SIGN_IN );
103+ signIn . launch ( signInIntent );
99104 }
100105
101106 @ OnClick (R .id .resolve_merge )
@@ -137,34 +142,25 @@ public void onComplete(@NonNull Task<Void> task) {
137142 });
138143 }
139144
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 ());
167161 }
162+
163+ updateUI ();
168164 }
169165
170166 private void updateUI () {
@@ -212,4 +208,9 @@ private String getUserIdentifier(FirebaseUser user) {
212208 return "unknown" ;
213209 }
214210 }
211+
212+ @ Override
213+ public void onActivityResult (@ NonNull FirebaseAuthUIAuthenticationResult result ) {
214+ handleSignInResult (result .getResultCode (), result .getIdpResponse ());
215+ }
215216}
0 commit comments