fix(mobile): fit the Android splash icon to its circular mask - #10620
Conversation
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>
ApprovabilityVerdict: 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. |
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. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (3)
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. 📝 WalkthroughWalkthroughThe 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. ChangesAndroid splash artwork
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to 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
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
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.tsnow also composes the two Android adaptive layers into one 288dp splash image per variant, and theexpo-splash-screenconfig gets anandroidblock pointing at it withimageWidth: 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.
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.tsis deterministic and leaves the launcher PNGs unchangedvp lint,vp fmt --check, andtsgo --noEmitforscriptson the changed filesexpo prebuild --platform androidemits asplashscreen_logo.pngthat fills the 1152px canvas (was 880px inside it)mainand this branch both installed on an API 36 emulator; splash captured by screen recording on cold startWritten by Claude Fable 5 via Claude Code.
Note
Add 288dp Android splash icons to fit circular mask
expo-splash-screenplugin in app.config.ts to use the new splash assets with an AndroidimageWidthof 288 for light and dark modes.app.config.tsnow usesimageWidth: 288and variant-specific artwork instead of the default splash behavior.Macroscope summarized 01a5860.
Summary by CodeRabbit
New Features
Documentation