Skip to content

fix(mobile): fit the Android splash icon to its circular mask - #10620

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/android-splash-icon
Sep 8, 2026
Merged

fix(mobile): fit the Android splash icon to its circular mask#10620
juliusmarminge merged 1 commit into
mainfrom
t3code/android-splash-icon

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 7, 2026

Copy link
Copy Markdown
Member

What Changed

The Android splash screen still used the iOS icon export. Android 12+ masks the splash icon to a circle covering the central two thirds of its 288dp canvas, so the full-bleed rounded square was cut off: the T's left arm was clipped and the artwork ran past the circle edge.

scripts/export-android-icons.ts now also composes the two Android adaptive layers into one 288dp splash image per variant, and the expo-splash-screen config gets an android block pointing at it with imageWidth: 288. Because the image fills the canvas, the system mask crops exactly the region the launcher icon crops, so the splash and the launcher frame the wordmark identically. iOS keeps its own full-bleed export and is untouched.

The layer renderers are parameterized by canvas size; the three launcher PNGs regenerate byte-for-byte.

Why

Follow-up to #10598, which fixed the launcher and notification icons but left the splash on the old asset.

UI Changes

Development variant, cold start on an Android 16 (API 36) emulator.

Android splash screen before and after

Recording of the cold start with the fix:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e144217c6b5fc96/splash-after.mp4

Verification

  • node scripts/export-android-icons.ts is deterministic and leaves the launcher PNGs unchanged
  • vp lint, vp fmt --check, and tsgo --noEmit for scripts on the changed files
  • expo prebuild --platform android emits a splashscreen_logo.png that fills the 1152px canvas (was 880px inside it)
  • debug APKs from main and this branch both installed on an API 36 emulator; splash captured by screen recording on cold start

Written by Claude Fable 5 via Claude Code.

Note

Add 288dp Android splash icons to fit circular mask

  • Generates 1152px (288dp) splash PNGs in export-android-icons.ts for dev, nightly, and prod variants by compositing variant backgrounds with the foreground wordmark.
  • Configures the expo-splash-screen plugin in app.config.ts to use the new splash assets with an Android imageWidth of 288 for light and dark modes.
  • Documents the Android 12+ splash canvas and masking behavior in README.md.
  • Behavioral Change: Android splash configuration in app.config.ts now uses imageWidth: 288 and variant-specific artwork instead of the default splash behavior.

Macroscope summarized 01a5860.

Summary by CodeRabbit

  • New Features

    • Added variant-specific Android splash artwork for development, preview, and production builds.
    • Added Android 12+ splash-screen support with correctly sized artwork and dark-mode compatibility.
    • Preserved the existing iOS splash-screen configuration.
  • Documentation

    • Expanded Android artwork guidance to cover launcher and splash images, including Android 12+ masking and layered composition.

Android 12+ masks the splash icon to a circle covering the central two
thirds of a 288dp canvas. The splash used the iOS export, a full-bleed
rounded square, so the mask cut its corners and clipped the wordmark.

Compose the two Android adaptive layers into one 288dp splash image per
variant and point the Android splash config at it, so the mask reproduces
the launcher icon's framing. iOS keeps its own full-bleed export.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 7, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This is a narrowly scoped Android splash-screen asset fix that changes only native startup artwork and leaves iOS behavior untouched. It also changes the automatically selected production Android splash default, so the default-selection change warrants human review.

You can add or adjust custom eligibility rules. Learn more.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.6 KiB 13.5 KiB −20 B (−0.1%) 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.0 KiB −4 B (−0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.5 KiB 6.5 KiB −16 B (−0.2%) 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 57.0 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 8 8 0 (0.0%) 21
Claude Total thread wire 13.6 KiB 13.5 KiB −75 B (−0.5%) 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.0 KiB −8 B (−0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.6 KiB 6.5 KiB −67 B (−1.0%) 7.8 KiB
Claude Live turn WebSocket decoded 57.9 KiB 57.8 KiB −88 B (−0.1%) 66.4 KiB
Claude Live turn messages 10 8 −2 (−20.0%) 21

Baseline: d64335b · PR result: 01a5860 · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 70c6e488-e1a0-4a07-b90a-6c3bfdd47ab0

📥 Commits

Reviewing files that changed from the base of the PR and between d64335b and 01a5860.

⛔ Files ignored due to path filters (3)
  • apps/mobile/assets/android-splash-icon-dev.png is excluded by !**/*.png
  • apps/mobile/assets/android-splash-icon-nightly.png is excluded by !**/*.png
  • apps/mobile/assets/android-splash-icon-prod.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • apps/mobile/app.config.ts
  • assets/README.md
  • scripts/export-android-icons.ts

Included review availability: 8 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour.


📝 Walkthrough

Walkthrough

The PR adds size-aware Android splash asset generation for development, preview, and production variants. Expo configuration selects the generated assets, and Android artwork documentation describes splash masking and composition.

Changes

Android splash artwork

Layer / File(s) Summary
Splash asset rendering
scripts/export-android-icons.ts, assets/README.md
The export script uses separate adaptive and splash canvases, renders variant-specific splash backgrounds, and exports Android splash icons. The documentation describes Android 12+ masking and asset composition.
Expo splash configuration
apps/mobile/app.config.ts
Each Android variant selects its splash icon. The Expo splash plugin uses a 288px Android image and the same asset for dark mode.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 01a58

This change supplies Android-specific, variant-aware splash artwork sized for Android 12+ masking while retaining the existing iOS export and launcher assets. No concrete current-head merge-blocking risk remains.

Sequence Diagram(s)

sequenceDiagram
  participant ExportScript as export-android-icons.ts
  participant SplashAssets as Android splash PNG assets
  participant AppConfig as apps/mobile/app.config.ts
  participant Expo as Expo splash-screen plugin
  ExportScript->>SplashAssets: Export variant splash icons
  AppConfig->>SplashAssets: Select the configured variant asset
  AppConfig->>Expo: Apply the 288px Android splash image and dark mode asset
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: fitting the Android splash icon to its circular mask.
Description check ✅ Passed The description explains what changed and why, includes UI evidence, and documents verification. The template checklist is omitted, but the required information is otherwise covered.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/android-splash-icon

Comment @coderabbitai help to get the list of available commands.

@juliusmarminge
juliusmarminge merged commit 892de47 into main Sep 8, 2026
22 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/android-splash-icon branch September 8, 2026 01:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant