1 / 9
Create task
2 / 9
Manage category
3 / 9
Sort tasks
1 / 3
Search tasks
1 / 3
Create subtasks
1 / 3
Set reminder
1 / 3
Add note
1 / 3
Change task category
1 / 3
Delete task
1 / 3

Tecnical details

Architecture

The application is modularized in features. I used Jetpack Compose to create the UI. ViewModels and flows to handle the state of the composables and the presentation logic. Dependency injection with Hilt to inject ViewModels in the main composables. Courotinng for data operations and flow for live data observation. Room Database for data persistency, DAOS, and repositories for Data Access Logic.

Reminder System

AlarmManager sets the reminders. A Pending Intent wraps an Intent with the data of the current Task and broadcasts it when the AlarmManager triggers the Pending Intent. Then, a Broadcast receiver processes the data from the broadcasted Intent and shows the notification.

Mark task as done from notifications

A Pending Intent wraps an Intent that contains the action to mark the task as done. When the "mark as done" button is pulsed, the Pending Intent is activated, consequently sending a broadcast. Then, the broadcast receiver processes the broadcasted action and calls the method to mark the notified task as done.