Skip to content

Commit 8f6653f

Browse files
committed
more
1 parent ed3c23c commit 8f6653f

File tree

4 files changed

+390
-355
lines changed

4 files changed

+390
-355
lines changed

auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailHandler.java

-108
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.firebase.ui.auth.ui.email
2+
3+
import android.app.Activity
4+
import android.app.Application
5+
import android.app.PendingIntent
6+
import android.content.Intent
7+
import android.util.Log
8+
import com.firebase.ui.auth.data.model.PendingIntentRequiredException
9+
import com.firebase.ui.auth.data.model.Resource
10+
import com.firebase.ui.auth.data.model.User
11+
import com.firebase.ui.auth.util.data.ProviderUtils
12+
import com.firebase.ui.auth.viewmodel.AuthViewModelBase
13+
import com.firebase.ui.auth.viewmodel.RequestCodes
14+
import com.google.android.gms.auth.api.identity.BeginSignInRequest
15+
import com.google.android.gms.auth.api.identity.Identity
16+
import com.google.android.gms.auth.api.identity.SignInCredential
17+
import com.google.android.gms.auth.api.identity.SignInClient
18+
import com.google.android.gms.common.api.ApiException
19+
import androidx.annotation.Nullable
20+
21+
class CheckEmailHandler(application: Application) : AuthViewModelBase<User>(application) {
22+
companion object {
23+
private const val TAG = "CheckEmailHandler"
24+
}
25+
26+
/**
27+
* Initiates a hint picker flow using the new Identity API.
28+
* This replaces the deprecated Credentials API call.
29+
*/
30+
fun fetchCredential() {
31+
val signInClient: SignInClient = Identity.getSignInClient(getApplication())
32+
val signInRequest = BeginSignInRequest.builder()
33+
.setPasswordRequestOptions(
34+
BeginSignInRequest.PasswordRequestOptions.builder()
35+
.setSupported(true)
36+
.build()
37+
)
38+
.build()
39+
40+
signInClient.beginSignIn(signInRequest)
41+
.addOnSuccessListener { result ->
42+
// The new API returns a PendingIntent to launch the hint picker.
43+
val pendingIntent: PendingIntent = result.pendingIntent
44+
setResult(
45+
Resource.forFailure(
46+
PendingIntentRequiredException(pendingIntent, RequestCodes.CRED_HINT)
47+
)
48+
)
49+
}
50+
.addOnFailureListener { e ->
51+
Log.e(TAG, "beginSignIn failed", e)
52+
setResult(Resource.forFailure(e))
53+
}
54+
}
55+
56+
/**
57+
* Fetches the top provider for the given email.
58+
*/
59+
fun fetchProvider(email: String) {
60+
setResult(Resource.forLoading())
61+
ProviderUtils.fetchTopProvider(getAuth(), getArguments(), email)
62+
.addOnCompleteListener { task ->
63+
if (task.isSuccessful) {
64+
setResult(Resource.forSuccess(User.Builder(task.result, email).build()))
65+
} else {
66+
setResult(Resource.forFailure(task.exception ?: Exception("Unknown error")))
67+
}
68+
}
69+
}
70+
71+
/**
72+
* Handles the result from the hint picker launched via the new Identity API.
73+
*/
74+
fun onActivityResult(requestCode: Int, resultCode: Int, @Nullable data: Intent?) {
75+
if (requestCode != RequestCodes.CRED_HINT || resultCode != Activity.RESULT_OK) {
76+
return
77+
}
78+
79+
setResult(Resource.forLoading())
80+
val signInClient: SignInClient = Identity.getSignInClient(getApplication())
81+
try {
82+
// Retrieve the SignInCredential from the returned intent.
83+
val credential: SignInCredential = signInClient.getSignInCredentialFromIntent(data)
84+
val email: String = credential.id
85+
86+
ProviderUtils.fetchTopProvider(getAuth(), getArguments(), email)
87+
.addOnCompleteListener { task ->
88+
if (task.isSuccessful) {
89+
setResult(
90+
Resource.forSuccess(
91+
User.Builder(task.result, email)
92+
.setName(credential.displayName)
93+
.setPhotoUri(credential.profilePictureUri)
94+
.build()
95+
)
96+
)
97+
} else {
98+
setResult(Resource.forFailure(task.exception ?: Exception("Unknown error")))
99+
}
100+
}
101+
} catch (e: ApiException) {
102+
Log.e(TAG, "getSignInCredentialFromIntent failed", e)
103+
setResult(Resource.forFailure(e))
104+
}
105+
}
106+
}

0 commit comments

Comments
 (0)