🐙 Implement new CategoryDetails screen#1231
Open
igorescodro wants to merge 30 commits into
Open
Conversation
igorescodro
commented
Mar 29, 2026
Document the CategoryDetails screen specification including UI components, task grouping behavior, navigation flow, and design assets for the new full-screen category view replacing the existing bottom sheet.
Document the full UI specification for the CategoryDetails screen, including layout, component hierarchy, task grouping sections, and interaction patterns. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduce a sealed class TaskGroup with five subclasses — Overdue, DueToday, Upcoming, NoDueDate, and Completed — each holding a List<Task>, to represent the grouped task sections shown in CategoryDetails. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add a Flow-based use case that loads tasks for a given category and groups them into TaskGroup sections (Overdue, DueToday, Upcoming, NoDueDate, Completed) using the device's local date for classification. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace UTC-based date comparison with the device's local date obtained directly from dateTimeProvider, ensuring task grouping reflects the user's local time rather than UTC. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add CategoryDetails serializable destination, OnCategoryDetailsClick routing event in CategoryEvent, and wire the feature flag check in CategoryNavGraph so the new screen is reachable only when isNewDesignEnabled is true. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move DateTimePicker from features/task into libraries/designsystem/components so it can be shared across features without creating inter-feature dependencies. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add 9 strings for the CategoryDetails screen — progress header, empty state, options content description, and five section headers — across all four supported locales: en, es, fr, and pt-rBR. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implement KuvioCategoryHeader in the Kuvio design system to display a category name, color, optional emoji, and task progress (total vs completed), with light and dark preview support. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add CategoryDetailsState sealed class (Loading/Error/Success), CategoryDetailsMapper for domain-to-view conversion, and fakes for LoadCategoryFake, LoadCategoryTasksFake, AddTaskFake, and UpdateTaskStatusFake to support ViewModel unit tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implement CategoryDetailsViewModel exposing loadContent(categoryId) as a cold Flow<CategoryDetailsState> via combine(), with addTask and updateTaskStatus launching fire-and-forget on AppCoroutineScope. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implement the three-layer composable structure: CategoryDetailsSection (public, koinInject), CategoryDetailsScreen (internal, state-driven), and CategoryDetailsContent (stateless), with extracted CategoryDetailsEmptyState and CategoryDetailsTaskList. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix CategoryDetailsScreen error branch to use KuvioBodyMediumText instead of the raw Compose Text composable, keeping the screen consistent with Kuvio design system conventions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add CategoryDetails entry to CategoryNavGraph using Navigation3's entry<> DSL, branching on DesignSystemConfig.isNewDesignEnabled to keep the legacy flow intact while the new screen rolls out. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add three Compose UI tests verifying the empty state, task group display, and section header rendering in CategoryDetailsContent using AlkaaTest and runComposeUiTest. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add three end-to-end tests in the shared module covering navigation to CategoryDetails, task display, and task completion flow using full Koin+Compose setup with DAO-based data seeding. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Auto-format all CategoryDetails source files to comply with project ktlint rules after the feature implementation was complete. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix detekt findings across CategoryDetails files: UnnamedParameterUse in tests, deprecated LocalDate constructor, ElseCaseInsteadOfExhaustiveWhen, LongMethod, and BooleanPropertyNaming for isNewDesignEnabled. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Added `2026-03-27-category-details.md` to outline the step-by-step implementation for the new full-screen Category Details screen. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Split Section into Section+Loader (koinInject isolated), wrap content in Scaffold with AlkaaToolbar, remove onBackClick from CategoryDetailsContent, add uiToolingPreview dependency, and add light/dark Compose previews. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Extract Success state fields into a dedicated @immutable data class. CategoryDetailsState sealed class remains first in the file.
Wrap the five success fields into CategoryDetailsData inside toViewState.
Remove AppCoroutineScope constructor param; use viewModelScope.launch for addTask and updateTaskStatus fire-and-forget operations.
…hape Remove appScope; access task counts via state.data; drop AppCoroutineScope import. Update CategoryDetailsScreen to access state fields via state.data.
Hardcode isSinglePane = true in AlkaaToolbar call since the screen is always single-pane. Add TODO for unimplemented options menu. Update composables to use CategoryDetailsData.
CategoryDetailsSection no longer accepts isSinglePane; remove the now-invalid argument. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace inline fully-qualified kotlinx.datetime.LocalDate with a proper import. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove private CategoryIconBox wrapper and call KuvioEmojiIcon directly.
Extract repeated composable setup into a private ComposeUiTest extension function. Add one test for each TaskGroup variant: Overdue, DueToday, Upcoming, NoDueDate, Completed.
969dfa4 to
84718bb
Compare
Updated `KuvioCategoryHeader` to replace the standard Material `Icon` with the custom `KuvioMoreIcon` component.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TaskGroupdomain model andLoadCategoryTasksuse case with local-timezone-aware task classificationKuvioCategoryHeaderKuvio design system component and promotesDateTimePickertodesignsystemfor cross-feature reuseFlow<CategoryDetailsState>, stateless composables, localization (en/es/fr/pt-rBR), and feature-flagged routing viaDesignSystemConfig.isNewDesignEnabledChanges
domainTaskGroupsealed class,LoadCategoryTasksuse case + implementation + unit testsdesignsystemKuvioCategoryHeadercomponent,DateTimePickerpromoted fromfeatures/tasknavigation-apiCategoryDetailsdestination,OnCategoryDetailsClickrouting eventfeatures/categoryCategoryDetailsViewModel,CategoryDetailsScreen(Section/Screen/Content), state, mapper, DI wiringresourcesCategoryDetailsViewModelTest(7 unit),CategoryDetailsScreenTest(3 UI),CategoryFlowTest(3 E2E)🤖 Generated with Claude Code