# 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.