Skip to content

feat(mobile): pick a DeepSeekBot app icon in settings - #1877

Merged
DoodleBears merged 2 commits into
mainfrom
claude/alternate-app-icons-rknhw8
Oct 15, 2026
Merged

DoodleBears merged 2 commits into
mainfrom
claude/alternate-app-icons-rknhw8

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Vain · project thread

Why the change

The Human wants the phone's home screen icon to be a DeepSeekBot portrait, picking between two, with today's icon staying the default / 主屏幕图标可以换成两种 DeepSeekBot 头像,默认仍是现在的图标。

Special things to note

  • Merge risk: adds expo-alternate-app-icons@8.0.0 (native module + config plugin), so the installed dev build is stale; it needs a new development build. The primary icon is untouched (still the template placeholder, since app.json sets no icon). Revert = revert this PR and rebuild.
  • Icon source: the two portraits are packages/client/assets/bot/deepseekbot-{light,dark}.png and deepseekbot-simple-{light,dark}.png. The only copies in the repos are 128×128, so the 1024 icons are Lanczos upscales (soft at 1024, fine at home-screen sizes). Higher-resolution originals would be a drop-in replacement.
  • iOS: each alternate icon has light (white background), dark (#252525 background, from the -dark portrait) and tinted (grayscale) variants. iOS shows its own "You have changed the icon" alert.
  • Android: activity-alias per icon; the adaptive foreground pads the portrait into the 72/108 safe zone on white.
  • Follow-up conflict: Customize each computer from its row in the Host drawer, and rename it on the phone #1878 removes the Customize header row from Settings → Interface. Whichever lands second keeps the Interface section with the App icon row and drops Customize header.
  • Verification: pnpm --filter @botharness/mobile typecheck ✅; pnpm vitest run apps/mobile 263 passed / 8 skipped ✅ (new test/app-icon-settings.test.tsx: default selected, switch and back to default, refusal keeps the old icon with a notice, unsupported phone shows rows without actions; settings-sheet.test.tsx covers the new row); pnpm lint ✅; EXPO_OFFLINE=1 pnpm export ✅; expo prebuild --no-install generates DeepSeekBot.appiconset / DeepSeekBotSimple.appiconset with light/dark/tinted entries, ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES, and two Android activity-aliases ✅. Not run yet: native Simulator check and screenshots (in the combined Simulator batch with a dev-client rebuild).
  • CI test plan: affected. Added a scripts/ci-plan.mjs rule for apps/mobile/assets/** (and regenerated the table in docs/agents/development-scripts.md).
  • No CLI command: this is a phone-local setting with no Host bridge method, route or Bot tool.

Change outline

  • Settings sheet (avatar) → Interface → App icon pushes /app-icon: three rows (Default, DeepSeekBot, DeepSeekBot Chibi) with an icon preview, the current one checked; SettingsRow/SettingsSection, tokens only.
  • src/ui/app-icon-settings.tsx (component behind an AppIconPort), src/ui/native-app-icon.ts (expo module + preview images), strings in en/zh, DESIGN.md Settings note.
DeepSeekBot DeepSeekBot dark Chibi Chibi dark

Light and dark Simulator screenshots of the settings screen and the home screen come from the Simulator batch run as a comment on this PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RfAkkwkrmKJLy2rzGuTaZ1

Me gains an Interface section with App icon: keep the shipped default
icon or switch the home screen icon to one of two DeepSeekBot portraits
(full and chibi), with iOS dark and tinted variants and Android adaptive
icons, through expo-alternate-app-icons. Needs a new development build.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RfAkkwkrmKJLy2rzGuTaZ1
@DoodleBears DoodleBears self-assigned this Oct 15, 2026
@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 42 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 63a29529-0fa8-495d-b3bd-619032cf8ecf
📥 Commits

Reviewing files that changed from the base of the PR and between cfcf986 and 4bd3fd5.

⛔ Files ignored due to path filters: 13
  • apps/mobile/assets/app-icons/deepseekbot-android-foreground.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-dark-preview.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-dark.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-light-preview.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-light.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-android-foreground.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-dark-preview.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-dark.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-light-preview.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-light.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-simple-tinted.png is excluded by !**/*.png
  • apps/mobile/assets/app-icons/deepseekbot-tinted.png is excluded by !**/*.png
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing: 15
  • apps/mobile/DESIGN.md
  • apps/mobile/app.json
  • apps/mobile/app/_layout.tsx
  • apps/mobile/app/app-icon.tsx
  • apps/mobile/app/settings.tsx
  • apps/mobile/package.json
  • apps/mobile/src/ui/app-icon-settings.tsx
  • apps/mobile/src/ui/native-app-icon.ts
  • apps/mobile/src/ui/settings-view.tsx
  • apps/mobile/src/ui/strings.ts
  • apps/mobile/test/app-icon-settings.test.tsx
  • apps/mobile/test/react-native-shim.ts
  • apps/mobile/test/settings-sheet.test.tsx
  • docs/agents/development-scripts.md
  • scripts/ci-plan.mjs
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Move the App icon row from the removed Me tab into the Settings sheet's
Interface section, next to Customize header.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RfAkkwkrmKJLy2rzGuTaZ1
@DoodleBears
DoodleBears marked this pull request as ready for review October 15, 2026 08:58
@DoodleBears
DoodleBears merged commit 19b8436 into main Oct 15, 2026
11 checks passed
@DoodleBears

Copy link
Copy Markdown
Contributor Author

Batch QA — head 4bd3fd5 (native; Simulator dev client rebuilt with it)

iOS Simulator "PR1800 glass" (iOS 26.0, iPhone 17 Pro), dev client rebuilt from the batch, QA Host on DeepSeek. Screenshots are redacted (computer name, tailnet host and local paths blacked out). Chinese text renders as □ because the iOS 26.0 Simulator runtime ships without PingFang; that is an environment limit, not the app. Android: untested.

Step Result
Settings → Interface → App icon: Default, DeepSeekBot, Chibi with previews ✅ pass (Default preview is blank white — the dev build ships a blank default icon)
Tap DeepSeekBot → iOS "You have changed the icon…" ✅ pass
Home screen shows the new icon ✅ pass
Dark home screen shows the dark variant ⚠️ not observed — after simctl ui appearance dark the home icon stayed the light variant (may be SpringBoard on the Simulator not refreshing; check on a device)
Chibi, then back to Default ✅ pass

App icon screen iOS alert Home light Home dark Chibi Default

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants