fix(mobile): restore brand artwork in the Android adaptive icon - #10598
Conversation
The Android launcher and notification icons previously either cropped the Icon Composer export inside Android's mask or fell back to a flat white mark on a solid color, losing the blueprint and nightly artwork. Render the adaptive layers from the Icon Composer SVG sources instead: a shared transparent wordmark sized to the safe zone, plus full-bleed per-variant background images for development and nightly. Production keeps its solid black background. A new scripts/export-android-icons.ts owns the generation so the layers stay in sync with the icon sources. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The PR changes the baked-in Android launcher and quick-action artwork, adds new variant-specific background assets, and modifies native build inputs. Although the scope is limited to branding and asset generation, these are user-visible product defaults with native-app impact. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
All clear
Posted via Macroscope — Effect Service Conventions
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (5)
📝 WalkthroughWalkthroughChangesAndroid adaptive icons
Estimated code review effort: 3 (Moderate) | ~30 minutes Sequence Diagram(s)sequenceDiagram
participant PackageScript
participant ExportScript
participant IconComposerSources
participant Sharp
participant AndroidAssets
participant MobileConfig
PackageScript->>ExportScript: invoke icons:export:android
ExportScript->>IconComposerSources: load SVG layers
ExportScript->>Sharp: rasterize and composite layers
Sharp->>AndroidAssets: write Android PNG assets
MobileConfig->>AndroidAssets: select variant background images
Suggested reviewers: ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
## What's Changed * fix(mobile): keep pending messages in the chat timeline by @juliusmarminge in pingdotgg/t3code#10449 * fix(mobile): show connection status in the floating pill instead of a second one by @juliusmarminge in pingdotgg/t3code#10440 * fix: use Pierre icons consistently for attachments by @juliusmarminge in pingdotgg/t3code#10475 * feat(mobile): open the thread screen as soon as a new task is submitted by @juliusmarminge in pingdotgg/t3code#10435 * fix(devcontainer): make repository setup work by @saphid in pingdotgg/t3code#7875 * fix(projects): prevent invalid script IDs from crashing threads by @saphid in pingdotgg/t3code#10019 * fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback by @lnieuwenhuis in pingdotgg/t3code#9828 * fix(ios): scroll short source files from blank space by @juliusmarminge in pingdotgg/t3code#10178 * feat(mobile): start a new thread on an existing branch by @StiensWout in pingdotgg/t3code#10359 * fix(mobile): improve font-size slider performance and prevent maximum update depth errors by @bbernag in pingdotgg/t3code#7138 * fix(web): keep composer toolbar controls anchored during transitions by @juliusmarminge in pingdotgg/t3code#10478 * fix(web): resize the floating preview from any edge by @juliusmarminge in pingdotgg/t3code#10467 * fix(mobile): prevent chat from disappearing when scrolling by @juliusmarminge in pingdotgg/t3code#10479 * fix(mobile): smooth composer status pill resizing by @juliusmarminge in pingdotgg/t3code#10484 * fix(mobile): release initial scroll target after dragging by @juliusmarminge in pingdotgg/t3code#10483 * fix(mobile): animate thread lifecycle transitions consistently by @juliusmarminge in pingdotgg/t3code#10487 * fix(mobile): restore assistant message bottom padding by @juliusmarminge in pingdotgg/t3code#10491 * fix(mobile): preserve chat rows when toggling commands by @juliusmarminge in pingdotgg/t3code#10492 * feat(web): group onboarding project import by repository by @t3dotgg in pingdotgg/t3code#10493 * fix(web): remove inserted citations on cancel by @extoci in pingdotgg/t3code#10518 * fix(mobile): match Working status color to desktop by @baptisteArno in pingdotgg/t3code#10515 * fix(mobile): wait for native thread scroll before reveal by @juliusmarminge in pingdotgg/t3code#10486 * fix(web): tolerate servers that predate git identity in project import by @juliusmarminge in pingdotgg/t3code#10547 * fix(web): restore settled PR colors on hover by @flamboh in pingdotgg/t3code#10023 * fix(web): keep popup triggers steady when pressed by @dominic-r in pingdotgg/t3code#10468 * fix(web): keep project favicon shape consistent across sizes by @sameerr03 in pingdotgg/t3code#10502 * fix(claude): report usage limits on retried turns by @StiensWout in pingdotgg/t3code#10549 * refactor(desktop): classify backend exports by @juliusmarminge in pingdotgg/t3code#10265 * refactor(desktop): classify electron exports by @juliusmarminge in pingdotgg/t3code#10266 * refactor(desktop): classify app exports by @juliusmarminge in pingdotgg/t3code#10267 * refactor(desktop): classify preview exports by @juliusmarminge in pingdotgg/t3code#10268 * ci(knip): enforce desktop exports by @juliusmarminge in pingdotgg/t3code#10269 * fix(web): remove excess sidebar thread spacing by @maria-rcks in pingdotgg/t3code#10569 * fix(web): make settings project scopes searchable and scrollable by @maria-rcks in pingdotgg/t3code#10570 * fix(web): use `tabular-nums` with the ui font for sidebar timer by @extoci in pingdotgg/t3code#10592 * fix(web): correct pending question attachment message by @dominic-r in pingdotgg/t3code#10599 * fix(mobile): restore brand artwork in the Android adaptive icon by @juliusmarminge in pingdotgg/t3code#10598 * fix(mobile): configure iOS Keychain access group by @VedankPurohit in pingdotgg/t3code#3665 * fix(web): remember Composer Fast mode across new chats by @aravhawk in pingdotgg/t3code#2981 * fix(server): disable executable capabilities in Claude metadata generation by @maxwellyoung in pingdotgg/t3code#4169 * Add stop thread keybinding command by @jakeleventhal in pingdotgg/t3code#4308 ## New Contributors * @bbernag made their first contribution in pingdotgg/t3code#7138 * @baptisteArno made their first contribution in pingdotgg/t3code#10515 * @aravhawk made their first contribution in pingdotgg/t3code#2981 **Full Changelog**: pingdotgg/t3code@v0.0.39...v0.0.40 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.40
## What's Changed * fix(mobile): wait for native thread scroll before reveal by @juliusmarminge in pingdotgg/t3code#10486 * fix(web): tolerate servers that predate git identity in project import by @juliusmarminge in pingdotgg/t3code#10547 * fix(web): restore settled PR colors on hover by @flamboh in pingdotgg/t3code#10023 * fix(web): keep popup triggers steady when pressed by @dominic-r in pingdotgg/t3code#10468 * fix(web): keep project favicon shape consistent across sizes by @sameerr03 in pingdotgg/t3code#10502 * fix(claude): report usage limits on retried turns by @StiensWout in pingdotgg/t3code#10549 * refactor(desktop): classify backend exports by @juliusmarminge in pingdotgg/t3code#10265 * refactor(desktop): classify electron exports by @juliusmarminge in pingdotgg/t3code#10266 * refactor(desktop): classify app exports by @juliusmarminge in pingdotgg/t3code#10267 * refactor(desktop): classify preview exports by @juliusmarminge in pingdotgg/t3code#10268 * ci(knip): enforce desktop exports by @juliusmarminge in pingdotgg/t3code#10269 * fix(web): remove excess sidebar thread spacing by @maria-rcks in pingdotgg/t3code#10569 * fix(web): make settings project scopes searchable and scrollable by @maria-rcks in pingdotgg/t3code#10570 * fix(web): use `tabular-nums` with the ui font for sidebar timer by @extoci in pingdotgg/t3code#10592 * fix(web): correct pending question attachment message by @dominic-r in pingdotgg/t3code#10599 * fix(mobile): restore brand artwork in the Android adaptive icon by @juliusmarminge in pingdotgg/t3code#10598 * fix(mobile): configure iOS Keychain access group by @VedankPurohit in pingdotgg/t3code#3665 * fix(web): remember Composer Fast mode across new chats by @aravhawk in pingdotgg/t3code#2981 * fix(server): disable executable capabilities in Claude metadata generation by @maxwellyoung in pingdotgg/t3code#4169 * Add stop thread keybinding command by @jakeleventhal in pingdotgg/t3code#4308 ## New Contributors * @aravhawk made their first contribution in pingdotgg/t3code#2981 **Full Changelog**: pingdotgg/t3code@v0.0.40-nightly.20260907.1359...v0.0.40-nightly.20260907.1372 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.40-nightly.20260907.1372
What Changed
The Android adaptive icon lost the brand artwork: #4332 fixed the cropped, double-framed launcher icon by swapping the foreground for a flat white mark on a solid color, which reads as a generic placeholder next to the iOS icon.
This renders the Android layers from the same Icon Composer SVG sources the other platforms use, via a new
scripts/export-android-icons.ts(vp run icons:export:android):app.config.tspasses the background image to both the launcheradaptiveIconand theexpo-quick-actionsshortcut icon so they matchsharpis added toscriptsfor the SVG rasterization. The hand-maintainedandroid-icon-foreground.svgand itsrsvg-convertinstructions are removed.Why
Android masks the central 72dp of a 108dp canvas and only guarantees 66dp is visible, so the Icon Composer exports (which already contain a rounded-square silhouette) cannot be used as an adaptive foreground. Splitting the artwork into a full-bleed background and a safe-zone wordmark gives the mask something to crop that is meant to be cropped.
UI Changes
Development variant on an Android 16 (API 36) emulator. Top: the old cropped icon. Middle: current main. Bottom: this PR.
Launcher, Pixel Launcher circular mask:
All three variants rendered through circle and squircle masks (offline preview from the generated layers):
Verification
node scripts/export-android-icons.tsregenerates the three PNGs byte-for-bytevp lint,vp fmt --check, andtsgo --noEmitforscriptson the changed filesexpo prebuild --clean --platform androidwithAPP_VARIANT=developmentemitsic_launcher_background.webpand the adaptive XML references itWritten by Claude Fable 5 via Claude Code.
Note
Restore brand artwork in Android adaptive icon for dev and nightly variants
scripts/export-android-icons.ts, a Node/Effect workflow that rasterizes Icon Composer SVG sources into the shared 432px foreground, dev background, and nightly background PNGs using Sharpapps/mobile/app.config.tsto conditionally setadaptiveIcon.backgroundImageand the expo-quick-actions shortcut icon background image from the selected variant; release builds keep the solid color and omit the imageicons:export:androidscript to rootpackage.json, addssharptoscripts/package.json, and replaces the standalone foreground SVG docs inassets/README.mdwith instructions to run the new export commandscripts/export-android-icons.tsuses hardcoded cloud scale/translate values and removes the named blur filter; drift between the Icon Composer nightly SVG and these constants can produce misaligned artworkMacroscope summarized 99745aa.
Summary by CodeRabbit
New Features
Documentation