I had this problem: https://stackoverflow.com/questions/78528358/how-to-prevent-circularprogressindicator-from-freezing-during-authentication-in
Now after fixing it, I want to make sure that this is the best approach to solve the problem for Kotlin Compose.
Google Auth:
@Composable
fun activityGoogleResultLauncher(): ActivityResultLauncher<Intent> {
val loginViewModel = LocalUserState.current
val startAutocomplete: ActivityResultLauncher<Intent> = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { result ->
val completedTask: Task<GoogleSignInAccount> =
GoogleSignIn.getSignedInAccountFromIntent(result.data)
try {
if (completedTask.isSuccessful) {
val account: GoogleSignInAccount? =
completedTask.getResult(ApiException::class.java)
val email = account?.email
val token: String = account?.idToken!!
loginViewModel.singInWithGoogle(token)
if (email != null) {
loginViewModel.updateEmail(email)
}
} else {
println("AUTH Google Auth failed: ${completedTask.exception}")
}
} catch (e: ApiException) {
println("AUTH Failed to authenticate using Google OAuth: " + e.message)
}
}
return startAutocomplete
}
Facebook Auth:
LoginManager.getInstance().registerCallback(
callbackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult) {
val accessToken = result.accessToken
loginViewModel.signInWithFacebookLogin(accessToken.token)
}
override fun onCancel() {
println("AUTH Cancelled Facebook login")
loginViewModel.loadingLogin = false
}
override fun onError(error: FacebookException) {
println("AUTH Failed to authenticate with Facebook: ${error.message}")
loginViewModel.loadingLogin = false
}
})
Login View Model:
fun singInWithGoogle(googleUserIDToken: String)
{
viewModelScope.launch(Dispatchers.IO) {
repo.signInWithGoogleLoginAndroid(googleUserIDToken)
getUserType = true
loginStatus = "in"
FirebaseMessaging.getInstance().token.addOnCompleteListener {
insertFCMWhenLogin(it.result)
}
}
}
fun signInWithFacebookLogin(accessToken: String)
{
viewModelScope.launch(Dispatchers.IO) {
repo.signInWithFacebookLogin(accessToken)
getUserType = true
loginStatus = "in"
FirebaseMessaging.getInstance().token.addOnCompleteListener {
insertFCMWhenLogin(it.result)
}
}
}
Could you please tell me if there is a better way to do it?