summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlberto Duarte (PWC) <alberto.duarte.delgado@pwc.com>2023-06-08 13:53:06 +0100
committerAlberto Duarte (PWC) <alberto.duarte.delgado@pwc.com>2023-06-08 13:53:06 +0100
commit35835765585937cf373cbfbd9c6ccf7939969bac (patch)
treedd4fd034c58aae051aa7a900083673e140c5e65e
parent3e20d3a79d8f5acd90229b398f4d181cc4ef35f5 (diff)
parentd198e262a3460831f4c1d5bfdf5d5ac6e3961692 (diff)
Merge branch 'fran_nazario' of github.com:Asturfran/Proyecto-android-formacion into alberto_duarte
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/data/datasources/SigninRemoteDataSource.kt26
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/data/repositories/SigninRepository.kt22
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/data/responses/SigninResponse.kt3
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/data/utils/StringUtils.kt15
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/data/viewmodels/SigninViewModel.kt23
-rw-r--r--app/src/main/java/com/frannazario/proyectoandroid/presentation/fragments/SigninFragment.kt26
-rw-r--r--app/src/main/res/drawable/button_background.xml5
-rw-r--r--app/src/main/res/drawable/button_clicked.xml13
-rw-r--r--app/src/main/res/drawable/button_stand.xml9
-rw-r--r--app/src/main/res/layout/fragment_signin.xml2
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