Skip to content

Commit

Permalink
Added implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Futsch1 committed May 8, 2024
1 parent 03cdab6 commit 348497f
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 29 deletions.
Expand Up @@ -30,7 +30,7 @@ public void generateTestMedicine() {
}),
new TestMedicine("Selen (200 µg)", null, new TestReminder[]{
new TestReminder("2", 9 * 60, 1, 0, ""),
new TestReminder("1", 18 * 60, 1, 1, "")
new TestReminder("1", 22 * 60, 1, 1, "")
})
};

Expand Down
Expand Up @@ -55,11 +55,7 @@ public void bind(ReminderEvent reminderEvent) {
chipGroup.setOnCheckedStateChangeListener((group, checkedIds) -> {
if (!checkedIds.isEmpty()) {
int checkedId = checkedIds.get(0);
Intent i =
checkedId == R.id.chipTaken ?
ReminderProcessor.getTakenActionIntent(itemView.getContext(), reminderEvent.reminderEventId) :
ReminderProcessor.getDismissedActionIntent(itemView.getContext(), reminderEvent.reminderEventId);
itemView.getContext().sendBroadcast(i);
processTakenOrSkipped(reminderEvent, R.id.chipTaken == checkedId);
}
});

Expand All @@ -69,4 +65,12 @@ public void bind(ReminderEvent reminderEvent) {
ViewColorHelper.setDefaultColors((MaterialCardView) itemView, Collections.singletonList(reminderEventText));
}
}

private void processTakenOrSkipped(ReminderEvent reminderEvent, boolean taken) {
Intent i =
taken ?
ReminderProcessor.getTakenActionIntent(itemView.getContext(), reminderEvent.reminderEventId) :
ReminderProcessor.getDismissedActionIntent(itemView.getContext(), reminderEvent.reminderEventId);
itemView.getContext().sendBroadcast(i);
}
}
Expand Up @@ -19,6 +19,9 @@
import com.futsch1.medtimer.R;
import com.futsch1.medtimer.database.Medicine;
import com.futsch1.medtimer.database.Reminder;
import com.futsch1.medtimer.database.ReminderEvent;
import com.futsch1.medtimer.reminders.ReminderProcessor;
import com.futsch1.medtimer.reminders.ReminderWork;

import java.time.Instant;
import java.time.ZoneId;
Expand All @@ -32,6 +35,8 @@ public class NextReminderListener extends BroadcastReceiver {

private final HandlerThread thread;
private final NextReminderIsTodayCallback nextReminderIsTodayCallback;
private Reminder reminder;
private Medicine medicine;

public NextReminderListener(TextView nextReminder, NextReminderIsTodayCallback nextReminderIsTodayCallback, MedicineViewModel medicineViewModel) {
this.nextReminder = nextReminder;
Expand Down Expand Up @@ -59,9 +64,9 @@ private void receiveNextReminderIntent(Context context, Intent intent) {
int reminderId = intent.getIntExtra(EXTRA_REMINDER_ID, 0);
Instant timestamp = intent.getSerializableExtra(EXTRA_REMINDER_TIME, Instant.class);
if (reminderId > 0 && timestamp != null) {
Reminder reminder = medicineViewModel.getReminder(reminderId);
reminder = medicineViewModel.getReminder(reminderId);
if (reminder != null) {
Medicine medicine = medicineViewModel.getMedicine(reminder.medicineRelId);
medicine = medicineViewModel.getMedicine(reminder.medicineRelId);
ZonedDateTime reminderTime = timestamp.atZone(ZoneId.systemDefault());
reportIfNextReminderIsToday(reminderTime);
String nextTime = reminderTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT));
Expand All @@ -83,6 +88,19 @@ private void setNextReminderText(Context context, Reminder reminder, Medicine me
}
}

public void processFutureReminder(boolean taken) {
Handler handler = new Handler(thread.getLooper());
handler.post(() -> {
ReminderEvent reminderEvent = ReminderWork.buildReminderEvent(medicine, reminder);
if (reminderEvent != null) {
reminderEvent.status = taken ? ReminderEvent.ReminderStatus.TAKEN : ReminderEvent.ReminderStatus.SKIPPED;
medicineViewModel.medicineRepository.insertReminderEvent(reminderEvent);
ReminderProcessor.requestReschedule(nextReminder.getContext());
}
});

}

public void stop() {
thread.quitSafely();
}
Expand Down
Expand Up @@ -26,7 +26,6 @@
import com.futsch1.medtimer.R;
import com.futsch1.medtimer.database.ReminderEvent;
import com.futsch1.medtimer.reminders.ReminderProcessor;
import com.google.android.material.chip.Chip;

import java.time.Instant;
import java.util.List;
Expand All @@ -45,12 +44,14 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
fragmentOverview = inflater.inflate(R.layout.fragment_overview, container, false);
medicineViewModel = new ViewModelProvider(this).get(MedicineViewModel.class);

Chip takenNow = fragmentOverview.findViewById(R.id.takenNow);
Chip skippedNow = fragmentOverview.findViewById(R.id.skippedNow);
Button takenNow = fragmentOverview.findViewById(R.id.takenNow);
Button skippedNow = fragmentOverview.findViewById(R.id.skippedNow);
NextReminderListener.NextReminderIsTodayCallback callback = isToday -> requireActivity().runOnUiThread(() -> {
takenNow.setVisibility(isToday ? View.VISIBLE : View.GONE);
skippedNow.setVisibility(isToday ? View.VISIBLE : View.GONE);
});
takenNow.setOnClickListener(buttonView -> nextReminderListener.processFutureReminder(true));
skippedNow.setOnClickListener(buttonView -> nextReminderListener.processFutureReminder(false));

nextReminderListener = new NextReminderListener(fragmentOverview.findViewById(R.id.nextReminderInfo), callback, medicineViewModel);
Intent nextReminder = requireContext().registerReceiver(nextReminderListener, new IntentFilter(NEXT_REMINDER_ACTION), Context.RECEIVER_EXPORTED);
Expand Down
31 changes: 19 additions & 12 deletions app/src/main/java/com/futsch1/medtimer/reminders/ReminderWork.java
Expand Up @@ -53,7 +53,7 @@ public Result doWork() {
if (reminder != null) {
int reminderEventId = inputData.getInt(EXTRA_REMINDER_EVENT_ID, 0);
Medicine medicine = medicineRepository.getMedicine(reminder.medicineRelId);
ReminderEvent reminderEvent = reminderEventId == 0 ? buildReminderEvent(medicine, reminder) : medicineRepository.getReminderEvent(reminderEventId);
ReminderEvent reminderEvent = reminderEventId == 0 ? buildAndInsertReminderEvent(medicine, reminder) : medicineRepository.getReminderEvent(reminderEventId);

if (reminderEvent != null && medicine != null) {
showNotification(medicine, reminderEvent, reminder);
Expand All @@ -78,7 +78,24 @@ private Reminder getReminder(MedicineRepository medicineRepository, Data inputDa
return reminder;
}

private ReminderEvent buildReminderEvent(Medicine medicine, Reminder reminder) {
private ReminderEvent buildAndInsertReminderEvent(Medicine medicine, Reminder reminder) {
ReminderEvent reminderEvent = buildReminderEvent(medicine, reminder);
if (reminderEvent != null) {
reminderEvent.reminderEventId = (int) medicineRepository.insertReminderEvent(reminderEvent);
}
return reminderEvent;
}

private void showNotification(Medicine medicine, ReminderEvent reminderEvent, Reminder reminder) {
if (canShowNotifications()) {
Color color = medicine.useColor ? Color.valueOf(medicine.color) : null;
Notifications notifications = new Notifications(context);
reminderEvent.notificationId = notifications.showNotification(minutesToTimeString(reminder.timeInMinutes), reminderEvent.medicineName, reminder.amount, reminder.instructions, reminder.reminderId, reminderEvent.reminderEventId, color);
medicineRepository.updateReminderEvent(reminderEvent);
}
}

public static ReminderEvent buildReminderEvent(Medicine medicine, Reminder reminder) {
if (medicine != null && reminder != null) {
ReminderEvent reminderEvent = new ReminderEvent();
reminderEvent.reminderId = reminder.reminderId;
Expand All @@ -89,23 +106,13 @@ private ReminderEvent buildReminderEvent(Medicine medicine, Reminder reminder) {
reminderEvent.color = medicine.color;
reminderEvent.useColor = medicine.useColor;
reminderEvent.status = ReminderEvent.ReminderStatus.RAISED;
reminderEvent.reminderEventId = (int) medicineRepository.insertReminderEvent(reminderEvent);

return reminderEvent;
} else {
return null;
}
}

private void showNotification(Medicine medicine, ReminderEvent reminderEvent, Reminder reminder) {
if (canShowNotifications()) {
Color color = medicine.useColor ? Color.valueOf(medicine.color) : null;
Notifications notifications = new Notifications(context);
reminderEvent.notificationId = notifications.showNotification(minutesToTimeString(reminder.timeInMinutes), reminderEvent.medicineName, reminder.amount, reminder.instructions, reminder.reminderId, reminderEvent.reminderEventId, color);
medicineRepository.updateReminderEvent(reminderEvent);
}
}

private boolean canShowNotifications() {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
boolean showNotificationSetInPreferences = sharedPref.getBoolean("show_notification", true);
Expand Down
13 changes: 7 additions & 6 deletions app/src/main/res/layout/fragment_overview.xml
Expand Up @@ -34,27 +34,28 @@
app:drawableStartCompat="@drawable/hourglass_split" />

<LinearLayout
style="?buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<com.google.android.material.chip.Chip
<Button
android:id="@+id/takenNow"
style="?buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/taken_now"
app:chipIcon="@drawable/check2_circle"
tools:visibility="gone" />
android:visibility="gone" />

<com.google.android.material.chip.Chip
<Button
android:id="@+id/skippedNow"
style="?buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/skip_reminder"
app:chipIcon="@drawable/x_circle"
tools:visibility="gone" />
android:visibility="gone" />
</LinearLayout>
</LinearLayout>

Expand Down

0 comments on commit 348497f

Please sign in to comment.