tou a editar o perfil e deixar a pp mais bonita

This commit is contained in:
2026-02-03 17:01:22 +00:00
parent 44523ac02b
commit 1d5470b8a4
217 changed files with 16514 additions and 13565 deletions

View File

@@ -15,7 +15,7 @@ import com.example.cuida.data.model.Medication;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Database(entities = { User.class, Appointment.class, Medication.class }, version = 3, exportSchema = false)
@Database(entities = { User.class, Appointment.class, Medication.class }, version = 4, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
@@ -56,9 +56,9 @@ public abstract class AppDatabase extends RoomDatabase {
medDao.insert(new Medication("Vitamina C", "20:00", "1 comp", "Antes de dormir"));
AppointmentDao apptDao = INSTANCE.appointmentDao();
apptDao.insert(new Appointment("Medicina Geral", "25/01/2026", "10:00", false));
apptDao.insert(new Appointment("Cardiologia", "02/02/2026", "15:30", false));
apptDao.insert(new Appointment("Oftalmologia", "10/01/2025", "09:00", true));
apptDao.insert(new Appointment("Medicina Geral", "25/01/2026", "10:00", "Check-up anual", false));
apptDao.insert(new Appointment("Cardiologia", "02/02/2026", "15:30", "Dor no peito", false));
apptDao.insert(new Appointment("Oftalmologia", "10/01/2025", "09:00", "Renovação óculos", true));
});
}
};

View File

@@ -11,12 +11,14 @@ public class Appointment {
public String type; // e.g. "Medicina Geral", "Cardiologia"
public String date; // dd/MM/yyyy
public String time; // HH:mm
public String reason;
public boolean isPast;
public Appointment(String type, String date, String time, boolean isPast) {
public Appointment(String type, String date, String time, String reason, boolean isPast) {
this.type = type;
this.date = date;
this.time = time;
this.reason = reason;
this.isPast = isPast;
}
}

View File

@@ -33,6 +33,7 @@ public class AppointmentAdapter extends RecyclerView.Adapter<AppointmentAdapter.
holder.textType.setText(appointment.type);
holder.textDate.setText(appointment.date);
holder.textTime.setText(appointment.time);
holder.textReason.setText("Motivo: " + (appointment.reason != null ? appointment.reason : "--"));
}
@Override
@@ -41,13 +42,14 @@ public class AppointmentAdapter extends RecyclerView.Adapter<AppointmentAdapter.
}
public static class AppointmentViewHolder extends RecyclerView.ViewHolder {
TextView textType, textDate, textTime;
TextView textType, textDate, textTime, textReason;
public AppointmentViewHolder(@NonNull View itemView) {
super(itemView);
textType = itemView.findViewById(R.id.text_type);
textDate = itemView.findViewById(R.id.text_date);
textTime = itemView.findViewById(R.id.text_time);
textReason = itemView.findViewById(R.id.text_reason);
}
}
}

View File

@@ -57,6 +57,31 @@ public class LoginActivity extends AppCompatActivity {
String email = binding.emailEditText.getText().toString();
String password = binding.passwordEditText.getText().toString();
if (email.equals("admin") && password.equals("123")) {
SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
prefs.edit().putBoolean("is_logged_in", true).apply();
// Mock data for admin
String adminEmail = "admin@papcuida.com";
prefs.edit().putString("user_email", adminEmail).apply();
prefs.edit().putString("user_name", "Administrador").apply();
// Ensure admin exists in DB
UserDao userDao = AppDatabase.getDatabase(this).userDao();
AppDatabase.databaseWriteExecutor.execute(() -> {
if (userDao.checkUser(adminEmail) == null) {
User adminUser = new User("Administrador", adminEmail, "123", 99, "000000000");
// Set empty profile picture URI if needed to avoid null issues later, though
// it's optional
userDao.insert(adminUser);
}
});
Toast.makeText(this, "Login de Administrador", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, MainActivity.class));
finish();
return;
}
if (email.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "Preencha todos os campos", Toast.LENGTH_SHORT).show();
return;

View File

@@ -94,8 +94,10 @@ public class ProfileFragment extends Fragment {
});
private void showEditDialog() {
if (currentUser == null)
if (currentUser == null) {
Toast.makeText(getContext(), "Erro: Utilizador não carregado.", Toast.LENGTH_SHORT).show();
return;
}
// Reset temp uri
tempProfileUri = null;

View File

@@ -41,7 +41,16 @@ public class ScheduleAppointmentFragment extends Fragment {
setupRecyclerView();
setupObservers();
btnConfirm.setOnClickListener(v -> scheduleViewModel.confirmAppointment());
btnConfirm.setOnClickListener(v -> {
com.google.android.material.textfield.TextInputEditText editReason = getView()
.findViewById(R.id.edit_reason);
String reason = editReason.getText().toString();
if (reason.isEmpty()) {
Toast.makeText(getContext(), "Por favor indique o motivo", Toast.LENGTH_SHORT).show();
return;
}
scheduleViewModel.confirmAppointment(reason);
});
return root;
}

View File

@@ -95,12 +95,12 @@ public class ScheduleViewModel extends AndroidViewModel {
slots.add(new TimeSlot(time, isBooked, isSelected));
}
public void confirmAppointment() {
public void confirmAppointment(String reason) {
String date = selectedDate.getValue();
String time = selectedTime.getValue();
if (date != null && time != null) {
Appointment appointment = new Appointment("Consulta Geral", date, time, false);
Appointment appointment = new Appointment("Consulta Geral", date, time, reason, false);
executorService.execute(() -> {
appointmentDao.insert(appointment);
saveSuccess.postValue(true);