Skip to content

Add text selection support to Android conversation output #71

@mulyoved

Description

@mulyoved

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions