From d198e262a3460831f4c1d5bfdf5d5ac6e3961692 Mon Sep 17 00:00:00 2001 From: Nazario Date: Thu, 8 Jun 2023 14:52:19 +0200 Subject: Updated viewmodel and visuals --- .../data/datasources/SigninRemoteDataSource.kt | 26 ---------------------- .../data/repositories/SigninRepository.kt | 22 +++++++++++++----- .../data/responses/SigninResponse.kt | 3 ++- .../proyectoandroid/data/utils/StringUtils.kt | 15 ++++++++----- .../data/viewmodels/SigninViewModel.kt | 23 ++++++++++++++++++- .../presentation/fragments/SigninFragment.kt | 26 +++++++++++++++------- app/src/main/res/drawable/button_background.xml | 5 +++++ app/src/main/res/drawable/button_clicked.xml | 13 +++++++++++ app/src/main/res/drawable/button_stand.xml | 9 ++++++++ app/src/main/res/layout/fragment_signin.xml | 2 ++ 10 files changed, 98 insertions(+), 46 deletions(-) delete mode 100644 app/src/main/java/com/frannazario/proyectoandroid/data/datasources/SigninRemoteDataSource.kt create mode 100644 app/src/main/res/drawable/button_background.xml create mode 100644 app/src/main/res/drawable/button_clicked.xml create mode 100644 app/src/main/res/drawable/button_stand.xml diff --git a/app/src/main/java/com/frannazario/proyectoandroid/data/datasources/SigninRemoteDataSource.kt b/app/src/main/java/com/frannazario/proyectoandroid/data/datasources/SigninRemoteDataSource.kt deleted file mode 100644 index 7841045..0000000 --- a/app/src/main/java/com/frannazario/proyectoandroid/data/datasources/SigninRemoteDataSource.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.frannazario.proyectoandroid.data.datasources - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.frannazario.proyectoandroid.data.responses.SigninResponse -import com.google.firebase.auth.FirebaseAuth - -class SigninRemoteDataSource: SigninDataSource { - private val auth = FirebaseAuth.getInstance() - - override fun register(email: String, password: String): LiveData { - val resultLiveData = MutableLiveData() - - auth.createUserWithEmailAndPassword(email, password) - .addOnCompleteListener { task -> - if (task.isSuccessful) { - val user = auth.currentUser - resultLiveData.value = SigninResponse.Success(user) - } else { - val error = task.exception?.message ?: "Error desconocido" - resultLiveData.value = SigninResponse.Error(error) - } - } - return resultLiveData - } -} \ No newline at end of file diff --git a/app/src/main/java/com/frannazario/proyectoandroid/data/repositories/SigninRepository.kt b/app/src/main/java/com/frannazario/proyectoandroid/data/repositories/SigninRepository.kt index c5c6fc9..06acd39 100644 --- a/app/src/main/java/com/frannazario/proyectoandroid/data/repositories/SigninRepository.kt +++ b/app/src/main/java/com/frannazario/proyectoandroid/data/repositories/SigninRepository.kt @@ -3,14 +3,26 @@ package com.frannazario.proyectoandroid.data.repositories import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.frannazario.proyectoandroid.data.datasources.SigninDataSource -import com.frannazario.proyectoandroid.data.datasources.SigninRemoteDataSource import com.frannazario.proyectoandroid.data.responses.SigninResponse +import com.frannazario.proyectoandroid.data.utils.FieldEnum import com.google.firebase.auth.FirebaseAuth -class SigninRepository( - private val remoteDataSource: SigninDataSource = SigninRemoteDataSource() -) { +class SigninRepository() { + private val auth = FirebaseAuth.getInstance() + fun register(email: String, password: String): LiveData { - return remoteDataSource.register(email, password) + val resultLiveData = MutableLiveData() + + auth.createUserWithEmailAndPassword(email, password) + .addOnCompleteListener { task -> + if (task.isSuccessful) { + val user = auth.currentUser + resultLiveData.value = SigninResponse.Success(user) + } else { + val error = task.exception?.message ?: "Error desconocido" + resultLiveData.value = SigninResponse.Error(error, FieldEnum.EMAIL_FIELD) + } + } + return resultLiveData } } \ No newline at end of file diff --git a/app/src/main/java/com/frannazario/proyectoandroid/data/responses/SigninResponse.kt b/app/src/main/java/com/frannazario/proyectoandroid/data/responses/SigninResponse.kt index df30b8c..701118d 100644 --- a/app/src/main/java/com/frannazario/proyectoandroid/data/responses/SigninResponse.kt +++ b/app/src/main/java/com/frannazario/proyectoandroid/data/responses/SigninResponse.kt @@ -1,8 +1,9 @@ package com.frannazario.proyectoandroid.data.responses +import com.frannazario.proyectoandroid.data.utils.FieldEnum import com.google.firebase.auth.FirebaseUser sealed class SigninResponse { data class Success(val user: FirebaseUser?): SigninResponse() - data class Error(val error: String): SigninResponse() + data class Error(val error: String, val field: FieldEnum): SigninResponse() } \ No newline at end of file diff --git a/app/src/main/java/com/frannazario/proyectoandroid/data/utils/StringUtils.kt b/app/src/main/java/com/frannazario/proyectoandroid/data/utils/StringUtils.kt index a8f90f6..6a0fb16 100644 --- a/app/src/main/java/com/frannazario/proyectoandroid/data/utils/StringUtils.kt +++ b/app/src/main/java/com/frannazario/proyectoandroid/data/utils/StringUtils.kt @@ -36,9 +36,14 @@ fun checkPassword(password: String?): ErrorTypes? { } } -enum class ErrorTypes() { - EMAIL_EMPTY, - EMAIL_WRONG_FORMAT, - PASSWORD_TOO_SHORT, - PASSWORD_WRONG_FORMAT +enum class ErrorTypes(val error: String) { + EMAIL_EMPTY("Email vacio"), + EMAIL_WRONG_FORMAT("El formato del email es incorrecto"), + PASSWORD_TOO_SHORT("Contraseña demasiado corta"), + PASSWORD_WRONG_FORMAT("La password debe contener una minuscula, una mayuscula, un número y un simbolo") +} + +enum class FieldEnum() { + PASSWORD_FIELD, + EMAIL_FIELD } \ No newline at end of file diff --git a/app/src/main/java/com/frannazario/proyectoandroid/data/viewmodels/SigninViewModel.kt b/app/src/main/java/com/frannazario/proyectoandroid/data/viewmodels/SigninViewModel.kt index 2b4833c..81e8455 100644 --- a/app/src/main/java/com/frannazario/proyectoandroid/data/viewmodels/SigninViewModel.kt +++ b/app/src/main/java/com/frannazario/proyectoandroid/data/viewmodels/SigninViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.frannazario.proyectoandroid.data.repositories.SigninRepository import com.frannazario.proyectoandroid.data.responses.SigninResponse +import com.frannazario.proyectoandroid.data.utils.FieldEnum import com.frannazario.proyectoandroid.data.utils.checkEmail import com.frannazario.proyectoandroid.data.utils.checkPassword @@ -17,11 +18,31 @@ class SigninViewModel(private val repository: SigninRepository = SigninRepositor } fun register(email: String?, password: String?) { - if(checkEmail(email) == null && checkPassword(password) == null) { + val emailState = checkEmail(email) + val passState = checkPassword(password) + + if(emailState == null && passState == null) { val response = repository.register( email ?: "", password ?: "") signinResponseLiveData.postValue(response.value) + response.observeForever { signinResponse -> + signinResponseLiveData.postValue(signinResponse) + } + } else if (emailState != null) { + signinResponseLiveData.postValue( + SigninResponse.Error( + emailState.error, + FieldEnum.EMAIL_FIELD + ) + ) + } else if (passState != null) { + signinResponseLiveData.postValue( + SigninResponse.Error( + passState.error, + FieldEnum.PASSWORD_FIELD + ) + ) } } } \ No newline at end of file diff --git a/app/src/main/java/com/frannazario/proyectoandroid/presentation/fragments/SigninFragment.kt b/app/src/main/java/com/frannazario/proyectoandroid/presentation/fragments/SigninFragment.kt index bfb451d..bd974af 100644 --- a/app/src/main/java/com/frannazario/proyectoandroid/presentation/fragments/SigninFragment.kt +++ b/app/src/main/java/com/frannazario/proyectoandroid/presentation/fragments/SigninFragment.kt @@ -6,7 +6,9 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer import com.frannazario.proyectoandroid.data.responses.SigninResponse +import com.frannazario.proyectoandroid.data.utils.FieldEnum import com.frannazario.proyectoandroid.data.viewmodels.SigninViewModel import com.frannazario.proyectoandroid.databinding.FragmentSigninBinding @@ -29,16 +31,24 @@ class SigninFragment: Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewModel.getSigninResultLiveData().observe(viewLifecycleOwner) { response -> - when (response) { - is SigninResponse.Success -> { - Toast.makeText(requireContext(), "Funciona perfect", Toast.LENGTH_LONG).show() - } - is SigninResponse.Error -> { - Toast.makeText(requireContext(), response.error, Toast.LENGTH_LONG).show() + viewModel.getSigninResultLiveData().observe(viewLifecycleOwner, Observer { response -> + response?.apply { + when (response) { + is SigninResponse.Success -> { + Toast.makeText(requireContext(), "Funciona perfect", Toast.LENGTH_LONG) + .show() + } + + is SigninResponse.Error -> { + if (response.field == FieldEnum.EMAIL_FIELD) { + binding.emailIet.error = response.error + } + } + + else -> {} } } - } + }) binding.signinBtn.setOnClickListener { viewModel.register( email = binding.emailIet.text?.toString(), diff --git a/app/src/main/res/drawable/button_background.xml b/app/src/main/res/drawable/button_background.xml new file mode 100644 index 0000000..1bd9052 --- /dev/null +++ b/app/src/main/res/drawable/button_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_clicked.xml b/app/src/main/res/drawable/button_clicked.xml new file mode 100644 index 0000000..c39a7e3 --- /dev/null +++ b/app/src/main/res/drawable/button_clicked.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_stand.xml b/app/src/main/res/drawable/button_stand.xml new file mode 100644 index 0000000..5c58464 --- /dev/null +++ b/app/src/main/res/drawable/button_stand.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_signin.xml b/app/src/main/res/layout/fragment_signin.xml index ae1e7a3..362a731 100644 --- a/app/src/main/res/layout/fragment_signin.xml +++ b/app/src/main/res/layout/fragment_signin.xml @@ -41,6 +41,8 @@ app:layout_constraintTop_toBottomOf="@id/password_il" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" + android:textColor="@color/white" + android:background="@drawable/button_background" android:text="@string/signin" /> \ No newline at end of file -- cgit v1.2.3-54-g00ecf