Repository navigation
Conversation
The markdown module's copy button passed SF Symbol names as plain strings,
which expo-symbols only resolves on iOS, so Android drew an empty button.
Give it the same { ios, android } names the app's CopyTextButton uses, for
both the copy and copied states.
Fixes pingdotgg#13376
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This one-file mobile fix only adds explicit Android icon names to an existing markdown copy button, preserving iOS symbols and copy behavior. Its scope is small and self-contained, with no default, schema, infrastructure, or static-analysis changes. You can add or adjust custom eligibility rules. Learn more. |
|
Important Review skippedReview was skipped as selected files did not have any reviewable changes. ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to The copy control uses supported platform-specific icons, and no issue blocking the documented behavior is established. The change is mergeable. 🚥 Pre-merge checks | ✅ 5
✨ Finishing Touches
Comment |
Problem
On Android, fenced code blocks in chat (and in markdown file previews) show their header copy button as an empty rounded square. Tapping it still copies, but neither the copy icon nor the "copied" checkmark is drawn. iOS is unaffected.
Reproduce: open any thread on the Android app whose assistant reply contains a fenced code block, and look at the top-right of the block header.
Change
Android renders markdown through the native module, so code fences use
NativeCodeBlock, which mounts the module's ownCopyTextButton(apps/mobile/modules/t3-markdown-text/src/CopyTextButton.tsx). That button passed SF Symbol names toexpo-symbolsas plain strings.expo-symbolsonly treats a string as an iOS SF Symbol, so on Android the name resolves tonulland nothing renders inside the button.The button now passes
{ ios, android }names for both states, the same names the app-levelapps/mobile/src/components/CopyTextButton.tsxuses:doc.on.doc/content_copyfor copy, andcheckmark/checkfor copied. iOS still receives the same SF Symbols.The module doesn't import the app's
AppSymbolwrapper. No module underapps/mobile/modulesimports app code, andAppSymboldepends on Uniwind and Tabler. Using the rawexpo-symbolsAndroid path adds no new cost: the module already imports it on Android, and itsSymbolViewloads the bundled Material Symbols font on mount even when the name is missing.Scope and approval
Fixes #13376. That issue is a triaged bug (
bug,accepted) with a maintainer diagnosis that identifies this exact file and cause.The same one-line approach was proposed in #13580. That PR was closed for missing device verification, not for the code. This PR adds the on-device before/after evidence it lacked.
One file changed: the module's copy button. No other behavior changes.
Verification
Checked on a Samsung Galaxy S22 (SM-S901B), Android 16, against a T3 Code server running
0.0.46-nightly.20261007. Both screenshots show the same code block in the same thread.Build for "after": the
T3 Code Dev(com.t3tools.t3code.dev) debug development client, built locally withexpo prebuild --clean --platform androidandexpo run:android(theandroid:devscript) from commit 82212f6, with JS served by Metro from this branch.Manual checks on that device:
Not checked: the clipboard contents after the tap (this change doesn't touch the copy call), the markdown file preview (it uses the same button), and iOS on a device. The iOS names are unchanged, and
SymbolView.iosreadsname.ios. No unit test added: the change is a static icon name, and a test would only mirror the implementation.Static checks:
tsc --noEmitinapps/mobilepasses.Agent-assisted: Claude Opus 5.5 (Claude Code, in T3 Code).