124 lines
4.2 KiB
Kotlin
Raw Normal View History

2023-02-06 13:44:27 -06:00
package com.isolaatti.login
2023-07-15 20:58:57 -06:00
import android.app.Activity
2023-02-06 13:44:27 -06:00
import android.content.Intent
2023-07-15 20:58:57 -06:00
import android.net.Uri
2023-02-06 13:44:27 -06:00
import android.os.Bundle
2023-07-15 20:58:57 -06:00
import android.view.View
2023-02-06 13:44:27 -06:00
import android.widget.Toast
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
2023-07-15 20:58:57 -06:00
import androidx.browser.customtabs.CustomTabsIntent
2023-02-06 13:44:27 -06:00
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider
2023-07-15 20:58:57 -06:00
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.isolaatti.BuildConfig
import com.isolaatti.R
import com.isolaatti.common.IsolaattiBaseActivity
2023-02-06 13:44:27 -06:00
import com.isolaatti.databinding.ActivityLoginBinding
import com.isolaatti.home.HomeActivity
2023-07-15 20:58:57 -06:00
import com.isolaatti.utils.Resource
2023-02-06 13:44:27 -06:00
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class LogInActivity: AppCompatActivity() {
2023-07-15 20:58:57 -06:00
2023-02-06 13:44:27 -06:00
lateinit var viewBinding: ActivityLoginBinding
2023-07-15 20:58:57 -06:00
private val viewModel: LogInViewModel by viewModels()
2023-02-06 13:44:27 -06:00
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewBinding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(viewBinding.root)
viewModel.signInSuccess.observe(this) {success ->
2023-07-15 20:58:57 -06:00
if(success) {
setResult(Activity.RESULT_OK)
finish()
}
}
viewModel.signInLoading.observe(this) {
viewBinding.progressBar.visibility = View.VISIBLE
viewBinding.signInBtn.isEnabled = false
viewBinding.textFieldEmail.isEnabled = false
viewBinding.textFieldPassword.isEnabled = false
}
viewModel.signInError.observe(this) {
viewBinding.progressBar.visibility = View.GONE
viewBinding.signInBtn.isEnabled = true
viewBinding.textFieldEmail.isEnabled = true
viewBinding.textFieldPassword.isEnabled = true
when(it) {
Resource.Error.ErrorType.NetworkError -> showNetworkErrorMessage()
Resource.Error.ErrorType.AuthError -> showWrongPasswordErrorMessage()
Resource.Error.ErrorType.NotFoundError -> showNotFoundErrorMessage()
Resource.Error.ErrorType.ServerError -> showServerErrorMessage()
Resource.Error.ErrorType.OtherError -> showUnknownErrorMessage()
null -> {}
}
2023-02-06 13:44:27 -06:00
}
viewModel.formIsValid.observe(this) {isValid ->
viewBinding.signInBtn.isEnabled = isValid
}
viewBinding.textFieldEmail.editText?.doOnTextChanged { text, start, before, count ->
// Email Validation
viewModel.validateEmail(text.toString())
}
viewBinding.textFieldPassword.editText?.doOnTextChanged { text, start, before, count ->
// Password validation
viewModel.validatePassword(text.toString())
}
viewBinding.signInBtn.setOnClickListener {
val email = viewBinding.textFieldEmail.editText?.text
val password = viewBinding.textFieldPassword.editText?.text
viewModel.signIn(email.toString(), password.toString())
}
2023-07-15 20:58:57 -06:00
viewBinding.forgotPasswordBtn.setOnClickListener {
openForgotPassword()
}
}
private fun openForgotPassword() {
CustomTabsIntent.Builder()
.setShowTitle(true)
.build()
.launchUrl(this, Uri.parse("${BuildConfig.backend}/recuperacion_cuenta"))
}
private fun showWrongPasswordErrorMessage() {
MaterialAlertDialogBuilder(this)
.setMessage(R.string.wrong_password)
.setNeutralButton(R.string.forgot_password) {_,_ -> openForgotPassword()}
.setPositiveButton(R.string.dismiss, null)
.show()
}
private fun showNetworkErrorMessage() {
Toast.makeText(this, R.string.network_error, Toast.LENGTH_SHORT).show()
}
private fun showServerErrorMessage() {
}
private fun showNotFoundErrorMessage() {
MaterialAlertDialogBuilder(this)
.setMessage(getString(R.string.account_not_found, viewBinding.textFieldEmail.editText?.text))
.setPositiveButton(R.string.dismiss, null)
.show()
}
private fun showUnknownErrorMessage() {
2023-02-06 13:44:27 -06:00
}
}