diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt index 86db4ca2..c11fba8f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/login/LoginActivity.kt @@ -16,6 +16,8 @@ import androidx.credentials.GetCredentialRequest import androidx.credentials.exceptions.GetCredentialException import androidx.lifecycle.lifecycleScope import androidx.media3.common.util.UnstableApi +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability import com.google.android.libraries.identity.googleid.GetGoogleIdOption import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential.Companion.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL @@ -125,6 +127,9 @@ class LoginActivity : BaseActivity(ActivityLoginBinding::i binding.ivSignUpEmail.setOnClickListener { startSignUp() } binding.ivLoginGoogle.setOnClickListener { + if (!isGoogleLoginAvailable()) { + return@setOnClickListener + } loadingDialog.show(width = screenWidth) val credentialManager = CredentialManager.create(this) @@ -152,7 +157,10 @@ class LoginActivity : BaseActivity(ActivityLoginBinding::i handleSignIn(result.credential) } catch (e: GetCredentialException) { showToast(getString(R.string.login_google_failed)) - Logger.e("Couldn't retrieve user's credentials: ${e.localizedMessage}") + Logger.e( + "Couldn't retrieve user's credentials: " + + "${e.javaClass.simpleName}, ${e.localizedMessage}" + ) loadingDialog.dismiss() } } @@ -301,6 +309,27 @@ class LoginActivity : BaseActivity(ActivityLoginBinding::i startActivity(nextIntent) } + private fun isGoogleLoginAvailable(): Boolean { + if (BuildConfig.GOOGLE_CLIENT_ID.isBlank()) { + Logger.e("Google login blocked: GOOGLE_CLIENT_ID is blank.") + showToast(getString(R.string.login_google_failed)) + return false + } + + val status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) + if (status == ConnectionResult.SUCCESS) { + return true + } + + Logger.e("Google login blocked: Google Play services unavailable. status=$status") + if (GoogleApiAvailability.getInstance().isUserResolvableError(status)) { + GoogleApiAvailability.getInstance() + .getErrorDialog(this, status, 1001)?.show() + } + showToast(getString(R.string.login_google_failed)) + return false + } + private fun navigateToMain() { finishAffinity() val nextIntent = Intent(applicationContext, MainActivity::class.java)