142 lines
5.5 KiB
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;
|
|
}
|
|
}
|