Skip to content

[Episode Chat] Restyle the conversation - #6124

Merged
sztomek merged 12 commits into
mainfrom
feat/episode-chat-conversation-redesign
Oct 13, 2026
Merged

sztomek merged 12 commits into
mainfrom
feat/episode-chat-conversation-redesign

Conversation

@sztomek

@sztomek sztomek commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Description

Restyles the "Ask about this episode" conversation to match Figma. This PR is based on #6123.

Start of the chat

  • The "Chatting with this episode · 22m" chip and the welcome bubble are replaced by the line "Ask about anything in this episode. Or start here." and a "Summarize this episode" suggestion.
  • Tapping the suggestion sends it as a question. It is disabled while offline or while a reply is on its way.
  • After the first question, the line and the suggestion stay at the top and the suggestion can still be tapped. It is dimmed only while offline or while a reply is on its way.
  • Analytics: episode_chat_message_sent now sends input_type: typed for typed questions and summary_prompt for the suggestion (a retry keeps the original type). The property is in EventHorizonSchemas Refresh Now button: Stuck on 'refreshing...' #139 and in the artifact this stack already uses.

Messages

  • Answers are plain text, without the "EPISODE ASSISTANT" label and podcast icon.
  • Questions are in a rounded bubble on the right.
  • Quotes are inline: italic text followed by the timestamp, e.g. "(02:51 – 02:57)". When the quote can play, the timestamp is blue and tapping it plays the quote; tapping it again stops it. While it plays, the timestamp is underlined. TalkBack reads the quote as one item with a "Play quote" / "Stop quote" action.
  • "AI can make mistakes, so double-check it." shows under the latest answer.
  • The "THINKING" label is gone; the dots stay.

Input

  • Rounded field with the hint "Ask a question…", and a round arrow send button.

Strings

  • New: chat_welcome, chat_suggestion_summarize, chat_ai_disclaimer, chat_input_question_hint. The hint has a new key, so translations don't keep showing the old text.
  • Removed (unused now): chat_context_label, chat_context_label_with_duration, chat_episode_assistant, chat_thinking, chat_input_hint, together with their translations, the same way Remove the referrals tooltip from the Profile tab #6103 did.

Not in this PR (needs the server)
Generated suggestions, follow-up chips, timestamps inside answers, and 👍/👎 feedback.

For design / product

  • The Figma timestamp blue (#2A67F9) is below the WCAG AA contrast ratio (about 3.3–4.4:1) on the dark player backgrounds.
  • Figma doesn't show a playing quote; I underline the timestamp while it plays. Product has since decided that a tap jumps to the quote and keeps playing; that change (and the whole quote being tappable) is in a follow-up PR at the top of the stack.

Fixes POC-949 https://linear.app/a8c/issue/POC-949/chat-redesign
Figma fYQpVraWFho92vaX08U6A1-fi-203_25595, fYQpVraWFho92vaX08U6A1-fi-203_25630

Testing Instructions

Use a debug build with "Episode Chat" on in Beta features (Plus account, or a free account with "Episode Chat: Free Beta" on). "Episode Chat: Playable Quotes" is on by default in debug builds.

  1. Play Radiolab › Grass Apes, open the full-screen player, then ⋯ › Ask about this episode. If there are messages, tap ⋯ › Clear Chat.
  2. ✅ The chat shows "Ask about anything in this episode. Or start here." and a "Summarize this episode" suggestion on the right.
  3. Tap the suggestion. ✅ It's sent as your question, the suggestion moves to the left and dims until the answer arrives, and the answer shows as plain text with "AI can make mistakes, so double-check it." under it.
    Tap the suggestion again. ✅ It's sent again.
  4. Ask "Any remarkable quotes from the episode?". ✅ The quote is italic with a blue timestamp. Tap the timestamp. ✅ The quote plays and the timestamp is underlined; when it ends, playback returns to where it was.
  5. Type in the input. ✅ The hint disappears and the send button turns white.
  6. Clear the chat and turn on airplane mode. ✅ The suggestion can't be tapped.
  7. With TalkBack, focus the quote. ✅ It's read as one item with a "Play quote" action.

Screenshots or Screencast

collage

(The question in the quote screenshot is cut short because of how I typed it on the emulator.)

Checklist

  • If this is a user-facing change, I have added an entry in CHANGELOG.md
  • Ensure the linter passes (./gradlew spotlessApply to automatically apply formatting/linting)
  • I have considered whether it makes sense to add tests for my changes
  • All strings that need to be localized are in modules/services/localization/src/main/res/values/strings.xml
  • Any jetpack compose components I added or changed are covered by compose previews
  • I have updated (or requested that someone edit) the Event Horizon schema to reflect any new or changed analytics.

I have tested any UI changes...

  • with different themes
  • with a landscape orientation
  • with the device set to have a large display and font size
  • for accessibility with TalkBack

@claude

claude Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 56s —— View job


Nothing here blocks the merge. The suggestion's send path does the same guards and performSend as typing a question. The quote's link and its TalkBack action both call the same rememberUpdatedState callback. The removed strings and composables have no remaining references outside the translation files.

Non-blocking

  • modules/features/chat/src/main/kotlin/au/com/shiftyjelly/pocketcasts/chat/ui/ChatScreen.kt:155: If a chat already has messages, the "Summarize" chip shows as enabled for a moment when the chat opens and then jumps to the left. A quick tap in that moment sends a summary into the existing conversation, because messages is empty until the first observeMessages emission. To fix it, track whether messages have loaded and gate both the chip and onSuggestionClick on it. [Episode Chat] Restyle the conversation #6124 (comment)

@dangermattic

dangermattic commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator
1 Warning
⚠️ This PR is larger than 500 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.

Generated by 🚫 Danger

@sztomek sztomek added this to the 8.23 milestone Oct 5, 2026
@sztomek
sztomek marked this pull request as ready for review October 5, 2026 20:03
@sztomek
sztomek requested a review from a team as a code owner October 5, 2026 20:03
@sztomek
sztomek requested review from geekygecko and removed request for a team October 5, 2026 20:03
@sztomek
sztomek force-pushed the feat/episode-chat-conversation-redesign branch from 536c95e to f6f7be5 Compare October 8, 2026 15:00
@claude

claude Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 27s —— View job


The new commits add nothing that blocks the merge. One earlier non-blocking finding is still open.

Non-blocking

  • modules/features/chat/src/main/kotlin/au/com/shiftyjelly/pocketcasts/chat/ui/ChatScreen.kt:155: still open. When a chat that already has messages opens, the "Summarize" chip is briefly enabled and can send a summary into the existing conversation. messages is empty until the first observeMessages emission, and onSummarizeClick doesn't check whether messages have loaded. [Episode Chat] Restyle the conversation #6124 (comment)

@sztomek
sztomek force-pushed the feat/episode-chat-player-overlay branch from a427121 to 79fb072 Compare October 9, 2026 13:15
@sztomek
sztomek force-pushed the feat/episode-chat-conversation-redesign branch from f6f7be5 to 2adfb23 Compare October 9, 2026 13:18
@claude

claude Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 19s —— View job


Nothing new blocks the merge, and no earlier findings are still open. 2adfb23 fixes the "Summarize" chip finding: areMessagesLoaded is set on the first observeMessages emission, the chip stays hidden until then, and onSummarizeClick now returns early before the messages load. A new test covers that last part.

@sztomek
sztomek force-pushed the feat/episode-chat-player-overlay branch from 79fb072 to 0166eb5 Compare October 9, 2026 16:08
@sztomek
sztomek force-pushed the feat/episode-chat-conversation-redesign branch from 2adfb23 to 4155d6e Compare October 9, 2026 16:08
@claude

claude Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 43s —— View job


Nothing new blocks the merge, and no earlier findings are still open. This push rebases the PR onto the updated feat/episode-chat-player-overlay. The PR's own changes are the same as last time, including the areMessagesLoaded fix for the "Summarize" chip.

@wpmobilebot wpmobilebot modified the milestones: 8.23, 8.24 Oct 12, 2026
@wpmobilebot

Copy link
Copy Markdown
Collaborator

Version 8.23 has now entered code-freeze, so the milestone of this PR has been updated to 8.24.

@claude

claude Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 26s —— View job


Nothing new blocks the merge, and no earlier findings are still open. The new commit 8eb9727 changes the "Summarize" chip: it stays enabled after the conversation starts and is disabled only while offline or while a reply is on its way. The view model guards in onSummarizeClick still apply.

Non-blocking

  • modules/features/chat/src/main/kotlin/au/com/shiftyjelly/pocketcasts/chat/ui/ChatScreen.kt:157: After the first answer, the chip is now full opacity and can be tapped again, but the PR description and testing step 3 still say it dims and can't be tapped. Update the description if this is intended, or gate the chip on !isConversationStarted again if it isn't. [Episode Chat] Restyle the conversation #6124 (comment)

@sztomek
sztomek force-pushed the feat/episode-chat-player-overlay branch from 0166eb5 to 766404d Compare October 12, 2026 15:58
@sztomek
sztomek force-pushed the feat/episode-chat-conversation-redesign branch from 8eb9727 to 3a8a613 Compare October 12, 2026 15:58
@claude

claude Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 29s —— View job


Nothing new blocks the merge, and no earlier findings are still open. This push rebases the PR, and the chip change is the same as in 8eb9727, now 3a8a613. The PR description now says the "Summarize" chip can still be tapped after the conversation starts, which closes the earlier note about the description being out of date.

Base automatically changed from feat/episode-chat-player-overlay to main October 13, 2026 12:18
@sztomek
sztomek force-pushed the feat/episode-chat-conversation-redesign branch from 3a8a613 to 0f6e4ce Compare October 13, 2026 12:20
@claude

claude Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @sztomek's task in 35s —— View job


Nothing new blocks the merge, and no earlier findings are still open. This push rebases the PR onto main and its changes are the same as last time (+384/−303 across the same 25 files). The removed strings still have no references on the new base.

@sztomek
sztomek merged commit e9897a3 into main Oct 13, 2026
20 checks passed
@sztomek
sztomek deleted the feat/episode-chat-conversation-redesign branch October 13, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants