Repository navigation
Upcoming screen: day-grouped task list #138
Description
Description
Create the Upcoming screen that displays all tasks grouped by day. The groups are, in order: Overdue, Today, Tomorrow, then specific dates (e.g., "June 5"), and finally "No Date" for tasks without a due date.
Each group shows a header with the day label and the count of tasks in that group, followed by the task rows. Tapping a task row navigates to the Task Detail screen.
The task rows reuse the shared task row component (from #128). Tasks within each group are sorted by priority (highest first).
Depends on #120 (Task domain model and data layer), #128 (Task row component), #137 (Navigation redesign).
Scope
In scope: UpcomingScreen composable, UpcomingViewModel, day-grouped task list with headers (Overdue, Today, Tomorrow, specific dates, No Date), task count per group, priority sorting within groups, navigation to Task Detail on tap, and string resources.
Out of scope: filter dropdowns (separate ticket #16), inline quick-add (separate ticket #20), swipe actions (separate tickets #21, #22).
Acceptance criteria
- GIVEN the user navigates to the Upcoming tab
WHEN the screen renders
THEN all tasks are displayed grouped by day - GIVEN tasks exist with overdue due dates
WHEN the Upcoming screen renders
THEN an "Overdue" group is shown at the top - GIVEN tasks exist with today's due date
WHEN the Upcoming screen renders
THEN a "Today" group is shown after Overdue - GIVEN tasks exist with tomorrow's due date
WHEN the Upcoming screen renders
THEN a "Tomorrow" group is shown after Today - GIVEN tasks exist with future due dates beyond tomorrow
WHEN the Upcoming screen renders
THEN groups for each specific date are shown in chronological order - GIVEN tasks exist without a due date
WHEN the Upcoming screen renders
THEN a "No Date" group is shown at the bottom - GIVEN a day group is displayed
WHEN the group header renders
THEN it shows the day label and the count of tasks in that group - GIVEN tasks exist within a group
WHEN the group renders
THEN tasks are sorted by priority with highest priority first - GIVEN the user taps a task row on the Upcoming screen
WHEN the action occurs
THEN the user navigates to the Task Detail screen for that task - GIVEN the user has no tasks at all
WHEN the Upcoming screen renders
THEN an appropriate empty state is shown - GIVEN user-visible text appears on the Upcoming screen
WHEN the app renders the screen
THEN all visible text comes from string resources
Activity