diff options
| author | Alberto Duarte (PWC) <alberto.duarte.delgado@pwc.com> | 2023-06-08 13:53:06 +0100 |
|---|---|---|
| committer | Alberto Duarte (PWC) <alberto.duarte.delgado@pwc.com> | 2023-06-08 13:53:06 +0100 |
| commit | 35835765585937cf373cbfbd9c6ccf7939969bac (patch) | |
| tree | dd4fd034c58aae051aa7a900083673e140c5e65e | |
| parent | 3e20d3a79d8f5acd90229b398f4d181cc4ef35f5 (diff) | |
| parent | d198e262a3460831f4c1d5bfdf5d5ac6e3961692 (diff) | |
Merge branch 'fran_nazario' of github.com:Asturfran/Proyecto-android-formacion into alberto_duarte
10 files changed, 98 insertions, 46 deletions
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<SigninResponse> { - val resultLiveData = MutableLiveData<SigninResponse>() - - 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<SigninResponse> { - return remoteDataSource.register(email, password) + val resultLiveData = MutableLiveData<SigninResponse>() + + 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<SigninResponse?> { 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true" android:drawable="@drawable/button_clicked" /> + <item android:drawable="@drawable/button_stand" /> +</selector>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <stroke + android:width="5dp" + android:color="@color/black" /> + <gradient + android:type="linear" + android:angle="45" + android:startColor="@color/purple_200" + android:endColor="@color/purple_700" /> + <corners android:radius="15dp" /> +</shape>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <stroke + android:width="5dp" + android:color="@color/black" /> + <solid android:color="@color/purple_500" /> + <corners android:radius="15dp" /> +</shape>
\ 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" /> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file |