Tesis 1.0.0
Loading...
Searching...
No Matches
RegisterFragment.java
Go to the documentation of this file.
1package com.example.food_front;
2
3import android.os.Bundle;
4import android.util.Log;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8import android.widget.Button;
9import android.widget.EditText;
10import android.widget.Toast;
11
12import androidx.fragment.app.Fragment;
13import androidx.fragment.app.FragmentManager;
14import androidx.fragment.app.FragmentTransaction;
15
16import com.android.volley.Request;
17import com.android.volley.RequestQueue;
18import com.android.volley.Response;
19import com.android.volley.VolleyError;
20import com.android.volley.toolbox.JsonObjectRequest;
21import com.android.volley.toolbox.Volley;
22import com.example.food_front.utils.SessionManager;
23
24import org.json.JSONException;
25import org.json.JSONObject;
26
27public class RegisterFragment extends Fragment {
28
29 private EditText etNombre, etApellido, etCorreo, etTelefono, etPassword, etPassword2;
30 private Button btnRegister;
31
33 // Required empty public constructor
34 }
35
36 @Override
37 public View onCreateView(LayoutInflater inflater, ViewGroup container,
38 Bundle savedInstanceState) {
39
40 View view = inflater.inflate(R.layout.fragment_register, container, false);
41
42 // Inicializar las vistas
43 etNombre = view.findViewById(R.id.etNombre);
44 etApellido = view.findViewById(R.id.etApellido);
45 etCorreo = view.findViewById(R.id.etCorreo);
46 etTelefono = view.findViewById(R.id.etTelefono);
47 etPassword = view.findViewById(R.id.etPassword);
48 etPassword2 = view.findViewById(R.id.etPassword2);
49 btnRegister = view.findViewById(R.id.btnRegister);
50
51 // Agregar el listener al boton de registro
52 btnRegister.setOnClickListener(new View.OnClickListener() {
53 @Override
54 public void onClick(View v) {
55 if (validateInputs()) {
56 registerUser();
57 }
58 }
59 });
60
61 return view;
62 }
63
64 private boolean validateInputs() {
65 // Controlar que no haya imputs vacíos
66 if (etNombre.getText().toString().isEmpty() ||
67 etApellido.getText().toString().isEmpty() ||
68 etCorreo.getText().toString().isEmpty() ||
69 etTelefono.getText().toString().isEmpty() ||
70 etPassword.getText().toString().isEmpty() ||
71 etPassword2.getText().toString().isEmpty()) {
72 Toast.makeText(getActivity(), "Por favor complete todos los campos", Toast.LENGTH_SHORT).show();
73 return false;
74 }
75
76 // Validar nombre y apellido
77 if (etNombre.getText().toString().length() < 3 || etApellido.getText().toString().length() < 3) {
78 Toast.makeText(getActivity(), "El nombre y el apellido deben tener al menos 3 letras", Toast.LENGTH_SHORT).show();
79 return false;
80 }
81
82 // Validar correo electrónico
83 if (!isValidEmail(etCorreo.getText().toString())) {
84 Toast.makeText(getActivity(), "Por favor, ingrese un correo electrónico válido", Toast.LENGTH_SHORT).show();
85 return false;
86 }
87
88 // Validar número de teléfono
89 String telefono = etTelefono.getText().toString();
90 if (telefono.length() < 7 || !isNumeric(telefono)) {
91 Toast.makeText(getActivity(), "El número de teléfono debe tener al menos 7 dígitos y no debe contener letras", Toast.LENGTH_SHORT).show();
92 return false;
93 }
94
95 // Controlar que las contraseñas coincidan
96 if (!etPassword.getText().toString().equals(etPassword2.getText().toString())) {
97 Toast.makeText(getActivity(), "Las contraseñas no coinciden", Toast.LENGTH_SHORT).show();
98 return false;
99 }
100
101 // Validar contraseña
102 if (!isValidPassword(etPassword.getText().toString())) {
103 Toast.makeText(getActivity(), "La contraseña debe tener al menos 4 caracteres, una mayúscula y un número", Toast.LENGTH_SHORT).show();
104 return false;
105 }
106
107 return true;
108 }
109
110 private boolean isNumeric(String str) {
111 return str.matches("\\d+");
112 }
113
114 private boolean isValidEmail(String email) {
115 return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
116 }
117
118 private boolean isValidPassword(String password) {
119 return password.length() >= 4 && password.matches(".*[A-Z].*") && password.matches(".*[0-9].*");
120 }
121
122 private void registerUser() {
123 String url = "https://backmobile1.onrender.com/appUSERS/register/";
124
125 // Crear el json que se enviará en el body
126 JSONObject requestBody = new JSONObject();
127 try {
128 requestBody.put("email", etCorreo.getText().toString());
129 requestBody.put("password", etPassword.getText().toString());
130 requestBody.put("nombre", etNombre.getText().toString());
131 requestBody.put("apellido", etApellido.getText().toString());
132 requestBody.put("telefono", etTelefono.getText().toString());
133 } catch (JSONException e) {
134 e.printStackTrace();
135 Toast.makeText(getActivity(), "Error al crear el cuerpo de la solicitud", Toast.LENGTH_SHORT).show();
136 return;
137 }
138
139 // Crear el request de volley
140 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
141 Request.Method.POST,
142 url,
143 requestBody,
144 new Response.Listener<JSONObject>() {
145 @Override
146 public void onResponse(JSONObject response) {
147 // Verificar si es un re-registro
148 boolean reRegistro = response.optBoolean("re_registro", false);
149 String nombre = response.optString("nombre", "");
150 if (reRegistro && !nombre.isEmpty()) {
151 Toast.makeText(getActivity(), "Gracias por volver a elegirnos, " + nombre + "!", Toast.LENGTH_LONG).show();
152 } else {
153 Toast.makeText(getActivity(), "Registro exitoso", Toast.LENGTH_SHORT).show();
154 }
155 // Guardar el email en SessionManager tras registro exitoso
156 SessionManager sessionManager = new SessionManager(requireContext());
157 sessionManager.saveEmail(etCorreo.getText().toString());
158 // Redirigir al login tras registro exitoso
159 requireActivity().getSupportFragmentManager()
160 .beginTransaction()
161 .replace(R.id.fragment_container_view, new LoginFragment())
162 .commit();
163 }
164 },
165 new Response.ErrorListener() {
166 @Override
167 public void onErrorResponse(VolleyError error) {
168 String errorMessage = error.networkResponse != null && error.networkResponse.data != null
169 ? new String(error.networkResponse.data)
170 : "Error en el inicio de sesión";
171
172 if (errorMessage.contains("Usuario with this email already exists.") ) {
173 Toast.makeText(getContext(), "Ya existe una cuenta con ese mail.", Toast.LENGTH_LONG).show();
174 } else {
175 Toast.makeText(getContext(), errorMessage, Toast.LENGTH_SHORT).show();
176 }
177 }
178 }
179 );
180
181 // Agregar la request a la queue de Volley
182 RequestQueue requestQueue = Volley.newRequestQueue(requireContext());
183 requestQueue.add(jsonObjectRequest);
184 }
185
186 private void replaceFragment(Fragment newFragment) {
187 FragmentManager fragmentManager = requireActivity().getSupportFragmentManager();
188 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
189 fragmentTransaction.replace(R.id.fragment_container_view, newFragment);
190 fragmentTransaction.addToBackStack(null);
191 fragmentTransaction.commit();
192 }
193}
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)