Files
cuidamais/documentacao_projecto/backups_codigo/MedicationFragment.java

142 lines
5.5 KiB
Java

package com.example.cuida.ui.medication;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.example.cuida.data.model.Medication;
import com.example.cuida.databinding.FragmentMedicationBinding;
public class MedicationFragment extends Fragment {
private FragmentMedicationBinding binding;
private MedicationViewModel medicationViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
medicationViewModel = new ViewModelProvider(this).get(MedicationViewModel.class);
binding = FragmentMedicationBinding.inflate(inflater, container, false);
MedicationAdapter adapter = new MedicationAdapter(new MedicationAdapter.OnItemClickListener() {
@Override
public void onCheckClick(Medication medication) {
medicationViewModel.update(medication);
}
@Override
public void onItemClick(Medication medication) {
showMedicationDialog(medication);
}
});
binding.recyclerMedication.setLayoutManager(new LinearLayoutManager(getContext()));
binding.recyclerMedication.setAdapter(adapter);
medicationViewModel.getAllMedications().observe(getViewLifecycleOwner(), medications -> {
adapter.setMedications(medications);
if (medications != null && !medications.isEmpty()) {
binding.recyclerMedication.setVisibility(View.VISIBLE);
binding.textEmptyMedications.setVisibility(View.GONE);
} else {
binding.recyclerMedication.setVisibility(View.GONE);
binding.textEmptyMedications.setVisibility(View.VISIBLE);
}
});
binding.fabAddMedication.setOnClickListener(v -> showMedicationDialog(null));
return binding.getRoot();
}
private void showMedicationDialog(Medication medication) {
MedicationDialog dialog = new MedicationDialog();
dialog.setMedicationToEdit(medication);
dialog.setListener(medicationToSave -> {
// If it's an edit, cancel old alarms first
if (medication != null && medication.time != null) {
String[] oldTimes = medication.time.split(",\\s*");
for (String t : oldTimes) {
if (t.isEmpty()) continue;
try {
int oldId = (medication.name + t).hashCode();
com.example.cuida.utils.AlarmScheduler.cancelAlarm(requireContext(), oldId);
} catch (Exception e) {}
}
}
if (medication == null) {
medicationViewModel.insert(medicationToSave);
} else {
medicationViewModel.update(medicationToSave);
}
String[] times = medicationToSave.time.split(",\\s*");
for (String t : times) {
if (t.isEmpty()) continue;
try {
String[] timeParts = t.split(":");
int hour = Integer.parseInt(timeParts[0]);
int minute = Integer.parseInt(timeParts[1]);
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.set(java.util.Calendar.HOUR_OF_DAY, hour);
calendar.set(java.util.Calendar.MINUTE, minute);
calendar.set(java.util.Calendar.SECOND, 0);
if (calendar.getTimeInMillis() <= System.currentTimeMillis()) {
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
}
String title = "Hora do Medicamento";
String msg = "É hora de tomar: " + medicationToSave.name + " (" + medicationToSave.dosage + ")";
int alarmId = (medicationToSave.name + t).hashCode();
com.example.cuida.utils.AlarmScheduler.scheduleAlarm(
requireContext(),
calendar.getTimeInMillis(),
title,
msg,
alarmId);
} catch (Exception e) {
e.printStackTrace();
}
}
dialog.dismiss();
});
dialog.setDeleteListener(medicationToDelete -> {
medicationViewModel.delete(medicationToDelete);
// Cancel all alarms for this medication
if (medicationToDelete.time != null) {
String[] times = medicationToDelete.time.split(",\\s*");
for (String t : times) {
if (t.isEmpty()) continue;
try {
int alarmId = (medicationToDelete.name + t).hashCode();
com.example.cuida.utils.AlarmScheduler.cancelAlarm(requireContext(), alarmId);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
dialog.show(getParentFragmentManager(), "MedicationDialog");
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}