Reparacion de registrarte con email y recuperacion de contraseña!

This commit is contained in:
santi 2025-05-29 12:18:50 +02:00
parent 73109cfbfb
commit 156a76a009
4 changed files with 210 additions and 0 deletions

View File

@ -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<ApiResponse>() {
@Override
public void onResponse(Call<ApiResponse> call, Response<ApiResponse> 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<ApiResponse> call, Throwable t) {
showToast("Error: " + t.getMessage());
}
});
});
return binding.getRoot();
}
private void showToast(String msg) {
Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show();
}
}

View File

@ -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<ApiResponse>() {
@Override
public void onResponse(@NonNull Call<ApiResponse> call, @NonNull Response<ApiResponse> 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<ApiResponse> 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;
}
}

View File

@ -0,0 +1,30 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp">
<EditText
android:id="@+id/editEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edit_text_background"
android:hint="Correo electrónico"
android:inputType="textEmailAddress"
android:textColor="@android:color/white"
android:textColorHint="@android:color/white" />
<Button
android:id="@+id/buttonSendRecovery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Enviar recuperación" />
<Button
android:id="@+id/buttonGoToReset"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Ya tengo el código" />
</LinearLayout>

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp">
<EditText
android:id="@+id/editEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Correo electrónico" />
<EditText
android:id="@+id/editToken"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Código de recuperación" />
<EditText
android:id="@+id/editNewPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nueva contraseña"
android:inputType="textPassword" />
<Button
android:id="@+id/buttonResetPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Restablecer contraseña"
android:layout_marginTop="16dp" />
</LinearLayout>