Closer/docs/qa/ui-review.md

166 lines
7.9 KiB
Markdown

# Batch 8 — Responsive Visual QA Code Review
## Scope
Reviewed Compose UI files under `app/src/main/java/app/closer/ui/` for responsive layout issues:
- Missing `maxLines` + `TextOverflow.Ellipsis` in constrained containers
- Missing `navigationBarsPadding()` / `WindowInsets` handling near bottom nav
- Cramped cards/rows with insufficient padding
- Missing `weight(1f)` in Rows/Columns that push buttons off-screen
- Interactive elements smaller than 48dp touch targets
- Inconsistent spacing patterns
## Build Verification
`./gradlew :app:compileDebugKotlin`**BUILD SUCCESSFUL** (3s)
## Correction (R25 review — some Batch-8 truncations reverted)
A follow-up review found that Batch 8 over-applied `maxLines`+`TextOverflow.Ellipsis`: it's correct for
*chrome* (one-line titles, labels, pills, counts) but wrong for *content and errors*, where it silently
hides what a partner wrote. The rule is now **ellipsize chrome, never content or errors; bound content at
input instead.** The following Batch-8 entries below were **reverted** (the code no longer truncates them):
- **`questions/components/QuestionDiscussionThread.kt`** — message bubble `maxLines=10` **removed** (messages
wrap in full; was also inconsistent with the main `ConversationScreen`, which never truncated bubbles).
- **`questions/components/AnswerBubble.kt`** — `maxLines=5` on the answer bubble **removed** (it was
ellipsizing full written answers).
- **`questions/components/QuestionHeader.kt`** — `maxLines=6` on the question text **removed** (the question
is the screen's focal content and wraps).
- **`settings/RelationshipSettingsScreen.kt`** — truncation on the **explanation + error** text **removed**
(the `TopAppBar` title's `maxLines=1` was **kept** — that's chrome).
Instead of display truncation, free-text is **bounded at entry** in the ViewModels, centralized in
`ui/components/TextInputLimits.kt` (`MESSAGE` 2000 · `DISCUSSION_MESSAGE` 500 · `WRITTEN_ANSWER` 2000; the
conversation/discussion/question-detail/question-thread/wheel VMs alias those, and chat/discussion/wheel/
written-answer `.trim()` on send). The spin-the-wheel written answer — the one input that was genuinely
uncapped — is now capped. The shared written-answer field shows a character counter only within
`TextInputLimits.COUNTER_THRESHOLD` of the cap. (See `ClaudeQAPlan.md` → Pass J.)
**Note:** the `components/PlaceholderScreen.kt` entry below refers to a file that no longer exists in the
tree (removed/renamed since Batch 8) — disregard it.
## Per-File Findings
### `home/HomeScreen.kt`
- Added text truncation (`maxLines`/`overflow`) to subtitle, moment cue, and category count text.
### `dates/DateMatchScreen.kt`
- Added `weight(1f)` and text truncation to the header row so it doesn't overlap the close button.
- Added truncation to chip text inside constrained width.
### `dates/DateMatchesScreen.kt`
- Added `maxLines`/`overflow` to date-idea titles inside cards.
### `dates/DateBuilderScreen.kt`
- Fixed header layout with proper weighting and truncation for value/budget text.
- Added `weight(1f)` to duration chip rows so chips share space correctly.
- Increased chip touch target to meet 48dp minimum.
### `dates/BucketListScreen.kt`
- Added `maxLines`/`overflow` to header title, subtitle, item title, and item description.
- Added `navigationBarsPadding()` handling to the top-level content.
- Made `LazyColumn` fill remaining space via `weight(1f)`.
- Added `horizontalScroll` to filter chip rows so they don't overflow on narrow screens.
- Increased `FilterChip` and `CategoryChip` touch targets to 48dp minimum.
### `components/PlaceholderScreen.kt`
- Added `maxLines`/`overflow` to header title/description, panel title, "Ready" badge, and detail rows.
### `settings/SettingsScreen.kt`
- Added text truncation to profile card name/email, partner card texts, and `SettingsRow` labels.
### `settings/AccountScreen.kt`
- Added `weight(1f)` to profile card text column.
- Added text truncation to profile description and `AccountRow` labels.
### `settings/DeleteAccountScreen.kt`
- Added `heightIn(min = 48.dp)` to the acknowledgment checkbox row to meet minimum touch target.
### `settings/RelationshipSettingsScreen.kt`
- Added text truncation to TopAppBar title, explanation text, and error text.
- Switched leave-couple button to `heightIn(min = 52.dp)` for consistent responsive sizing.
### `pairing/CreateInviteScreen.kt`
- Added `navigationBarsPadding()` to scrollable content.
- Increased bottom TextButton touch target to 48dp.
### `pairing/AcceptInviteScreen.kt`
- Added `navigationBarsPadding()` to scrollable content.
- Increased primary button and bottom TextButton touch targets to minimum heights.
### `pairing/InviteConfirmScreen.kt`
- Added `navigationBarsPadding()` to scrollable content.
- Increased primary button and bottom TextButton touch targets to minimum heights.
### `questions/components/QuestionHeader.kt`
- Added `maxLines`/`overflow` to question text.
### `questions/components/QuestionAnswerInput.kt`
- Added text truncation to single-choice, multi-choice, and this-or-that option text.
### `questions/components/QuestionDiscussionThread.kt`
- Added `maxLines`/`overflow` to message bubble text.
- Increased send `IconButton` size from 44dp to 48dp.
### `questions/components/AnswerBubble.kt`
- Added text truncation to answer summary text.
- Increased reaction picker and "Add a reaction" touch targets to 48dp.
### `questions/components/QuestionNavigationBar.kt`
- Increased previous/next button heights from 44dp to 48dp.
### `questions/LocalQuestionContent.kt`
- Added `maxLines`/`overflow` to the screen subtitle.
### `questions/QuestionCategoryScreen.kt`
- Added `maxLines`/`overflow` to category description, filter/category pills, loading card text, and message card text.
- Increased `FilterPill` and `CategoryPill` touch targets.
### `questions/QuestionPackLibraryScreen.kt`
- Added `maxLines`/`overflow` to header title/description, filter/pack pills, loading card text, and message card text.
- Increased filter/pack pill touch targets and "Unlock all packs" button height.
### `questions/components/QuestionHelpExpandable.kt`
- Increased header row minimum height to 48dp.
- Added text truncation to header label and expanded help text.
### `wheel/CategoryPickerScreen.kt`
- Added text truncation to header title/description and category/filter pills.
- Increased pill touch targets.
### `wheel/SpinWheelScreen.kt`
- Added text truncation to headline and category pill.
- Increased all primary/outlined button heights to 56dp minimum.
### `wheel/WheelSessionScreen.kt`
- Added text truncation to category pill, progress count, question card text, and empty-state text.
- Increased primary/outline/text button touch targets to minimum heights.
### `wheel/WheelCompleteScreen.kt`
- Added text truncation to headline, category name, and summary text.
- Increased primary/outline button heights to 56dp minimum.
### `wheel/WheelHistoryScreen.kt`
- Added text truncation to header title, session card text, locked-card text, and date labels.
- Increased "Unlock premium" button and pill touch targets.
### `answers/AnswerHistoryScreen.kt`
- Added text truncation to header title/description, answer card text, and history pills.
- Increased remove `TextButton` and pill touch targets.
### `answers/AnswerRevealScreen.kt`
- Added text truncation to header text, question text, preview text, and all pills.
- Increased all primary/outline/text button touch targets.
## Files Reviewed with No Issues
- `questions/DailyQuestionScreen.kt` — delegates to `LocalQuestionContent`, no direct UI.
- `questions/QuestionComposerScreen.kt` — delegates to `PlaceholderScreen`.
- `questions/QuestionThreadScreen.kt` — delegates to `LocalQuestionContent`.
- `questions/LocalAnswerMapping.kt` — mapping helper, no UI.
## Constraints Respected
- No colors, fonts, or visual styles changed.
- No new dependencies added.
- No business logic or data flow changed.
- No screen layouts restructured — only responsive fixes applied.
- No commits or pushes made.