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.Ellipsisin constrained containers - Missing
navigationBarsPadding()/WindowInsetshandling 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 bubblemaxLines=10removed (messages wrap in full; was also inconsistent with the mainConversationScreen, which never truncated bubbles).questions/components/AnswerBubble.kt—maxLines=5on the answer bubble removed (it was ellipsizing full written answers).questions/components/QuestionHeader.kt—maxLines=6on the question text removed (the question is the screen's focal content and wraps).settings/RelationshipSettingsScreen.kt— truncation on the explanation + error text removed (theTopAppBartitle'smaxLines=1was 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/overflowto 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/overflowto header title, subtitle, item title, and item description. - Added
navigationBarsPadding()handling to the top-level content. - Made
LazyColumnfill remaining space viaweight(1f). - Added
horizontalScrollto filter chip rows so they don't overflow on narrow screens. - Increased
FilterChipandCategoryChiptouch targets to 48dp minimum.
components/PlaceholderScreen.kt
- Added
maxLines/overflowto 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
SettingsRowlabels.
settings/AccountScreen.kt
- Added
weight(1f)to profile card text column. - Added text truncation to profile description and
AccountRowlabels.
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/overflowto 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/overflowto message bubble text. - Increased send
IconButtonsize 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/overflowto the screen subtitle.
questions/QuestionCategoryScreen.kt
- Added
maxLines/overflowto category description, filter/category pills, loading card text, and message card text. - Increased
FilterPillandCategoryPilltouch targets.
questions/QuestionPackLibraryScreen.kt
- Added
maxLines/overflowto 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
TextButtonand 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 toLocalQuestionContent, no direct UI.questions/QuestionComposerScreen.kt— delegates toPlaceholderScreen.questions/QuestionThreadScreen.kt— delegates toLocalQuestionContent.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.