Summary
Text in the conversation timeline on Android is not selectable. Users cannot copy output text, assistant responses, command execution results, reasoning text, or error messages.
iOS already supports this via .textSelection(.enabled) across its views.
Current Behavior
All text in the Android conversation timeline (ConversationTimeline.kt) is read-only with no ability to select or copy. This applies to:
- Assistant markdown responses (
MarkdownText composable)
- Command execution output (
CommandExecutionRow)
- Reasoning/thinking text (
ReasoningRow)
- Error messages (
ErrorRow)
- Code review findings (
CodeReviewFindingCard)
- User messages (
UserMessageRow)
Expected Behavior
Users should be able to long-press on text in the conversation timeline to select and copy it, matching the iOS behavior.
Notes
- Compose
Text elements need SelectionContainer wrapping
- The
MarkdownText composable uses a native TextView via AndroidView and will need setTextIsSelectable(true), but this conflicts with the current LinkMovementMethod used for clickable links
SelectionContainer does not work across LazyColumn items, so cross-message selection is not feasible — per-message selection is the realistic target
- The scrollable command output box may have gesture conflicts with selection
References
- iOS text selection:
apps/ios/Sources/Litter/Views/ConversationTimelineView.swift (line 1118)
- Android output text:
apps/android/app/src/main/java/com/litter/android/ui/conversation/ConversationTimeline.kt (lines 614–631)
- Android markdown rendering: same file (lines 1141–1156)
Summary
Text in the conversation timeline on Android is not selectable. Users cannot copy output text, assistant responses, command execution results, reasoning text, or error messages.
iOS already supports this via
.textSelection(.enabled)across its views.Current Behavior
All text in the Android conversation timeline (
ConversationTimeline.kt) is read-only with no ability to select or copy. This applies to:MarkdownTextcomposable)CommandExecutionRow)ReasoningRow)ErrorRow)CodeReviewFindingCard)UserMessageRow)Expected Behavior
Users should be able to long-press on text in the conversation timeline to select and copy it, matching the iOS behavior.
Notes
Textelements needSelectionContainerwrappingMarkdownTextcomposable uses a nativeTextViewviaAndroidViewand will needsetTextIsSelectable(true), but this conflicts with the currentLinkMovementMethodused for clickable linksSelectionContainerdoes not work acrossLazyColumnitems, so cross-message selection is not feasible — per-message selection is the realistic targetReferences
apps/ios/Sources/Litter/Views/ConversationTimelineView.swift(line 1118)apps/android/app/src/main/java/com/litter/android/ui/conversation/ConversationTimeline.kt(lines 614–631)