diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/forgotpassword/ForgotPasswordFragment.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/forgotpassword/ForgotPasswordFragment.java new file mode 100644 index 0000000..b23985f --- /dev/null +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/forgotpassword/ForgotPasswordFragment.java @@ -0,0 +1,63 @@ +package com.santiparra.yomitrack.ui.fragments.forgotpassword; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; + +import com.santiparra.yomitrack.api.ApiClient; +import com.santiparra.yomitrack.api.ApiService; +import com.santiparra.yomitrack.databinding.FragmentForgotPasswordBinding; +import com.santiparra.yomitrack.model.ApiResponse; +import com.santiparra.yomitrack.R; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ForgotPasswordFragment extends Fragment { + private FragmentForgotPasswordBinding binding; + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + binding = FragmentForgotPasswordBinding.inflate(inflater, container, false); + + binding.buttonSendRecovery.setOnClickListener(v -> { + String email = binding.editEmail.getText().toString().trim(); + if (email.isEmpty()) { + showToast("Ingresa tu correo electrónico"); + return; + } + + ApiService apiService = ApiClient.getClient().create(ApiService.class); + apiService.forgotPassword(email).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + showToast("Revisa tu correo para restablecer la contraseña"); + NavHostFragment.findNavController(ForgotPasswordFragment.this) + .navigate(R.id.action_forgotPasswordFragment_to_resetPasswordFragment); + } else { + showToast("No se pudo enviar el correo. Verifica tu email."); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + showToast("Error: " + t.getMessage()); + } + }); + }); + + return binding.getRoot(); + } + + private void showToast(String msg) { + Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show(); + } +} diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/resetpassword/ResetPasswordFragment.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/resetpassword/ResetPasswordFragment.java new file mode 100644 index 0000000..f695b43 --- /dev/null +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/resetpassword/ResetPasswordFragment.java @@ -0,0 +1,84 @@ +package com.santiparra.yomitrack.ui.fragments.resetpassword; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; + +import com.santiparra.yomitrack.api.ApiClient; +import com.santiparra.yomitrack.api.ApiService; +import com.santiparra.yomitrack.databinding.FragmentResetPasswordBinding; +import com.santiparra.yomitrack.model.ApiResponse; +import com.santiparra.yomitrack.R; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ResetPasswordFragment extends Fragment { + + private FragmentResetPasswordBinding binding; + + public ResetPasswordFragment() {} + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentResetPasswordBinding.inflate(inflater, container, false); + return binding.getRoot(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + binding.buttonResetPassword.setOnClickListener(v -> resetPassword()); + } + + private void resetPassword() { + String email = binding.editEmail.getText().toString().trim(); + String token = binding.editToken.getText().toString().trim(); + String newPassword = binding.editNewPassword.getText().toString().trim(); + + if (email.isEmpty() || token.isEmpty() || newPassword.isEmpty()) { + showToast("Completa todos los campos"); + return; + } + + ApiService apiService = ApiClient.getClient().create(ApiService.class); + apiService.resetPassword(email, token, newPassword).enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (response.isSuccessful() && response.body() != null) { + showToast("Contraseña restablecida correctamente"); + NavHostFragment.findNavController(ResetPasswordFragment.this) + .navigate(R.id.action_resetPasswordFragment_to_loginFragment); + } else { + showToast("Token inválido o expirado"); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + showToast("Error de red: " + t.getMessage()); + } + }); + } + + private void showToast(String message) { + Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} diff --git a/app/src/main/res/layout/fragment_forgot_password.xml b/app/src/main/res/layout/fragment_forgot_password.xml new file mode 100644 index 0000000..00735b1 --- /dev/null +++ b/app/src/main/res/layout/fragment_forgot_password.xml @@ -0,0 +1,30 @@ + + + + +