Closer/docs/qa/ui-review.md

7.9 KiB

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:compileDebugKotlinBUILD 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.ktmaxLines=5 on the answer bubble removed (it was ellipsizing full written answers).
  • questions/components/QuestionHeader.ktmaxLines=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.