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
|
|
|
}
|
|
|
|
|
}
|