fix(mobile): render assigned project icons in chat list - #7
Closed
devin-ai-integration[bot] wants to merge 1 commit into
Closed
devin-ai-integration[bot] wants to merge 1 commit into
devin-ai-integration[bot] wants to merge 1 commit into
Conversation
Author
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
devin-ai-integration
Bot
force-pushed
the
devin/1789945788-mobile-project-icon
branch
from
September 21, 2026 00:01
28c07d2 to
17fe9ff
Compare
Author
|
Superseded by upstream PR pingdotgg#12810 |
Author
|
Image hosting for pingdotgg#12810. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes pingdotgg#12801
What Changed
Mobile
ProjectFaviconnow takes the project'sprojectIconoverride and renders it before falling back to the favicon image or folder glyph:emojioverrides render the emoji.monogramoverrides render the assigned text in a colored tile.lucideoverrides render a colored monogram derived from the project name (same derivation as web's automatic fallback), using the assigned color.projectIconis passed through every mobile call site: thread-list headers and rows (v1 and v2), archived threads, the settings project overview, and the new-task project picker. Projects without an override keep the existing favicon/folder behavior. A smalllib/projectIcon.tshelper resolves the override to a glyph, with unit tests.Why
Web and desktop persist
projectIconon the project record, but the mobile component only acceptedfaviconPath, so every assigned icon showed as the folder glyph on Android and iOS.Lucide trade-off. Rendering the exact Lucide icon needs
lucide-react-native, which is a new dependency that registers the full icon set (roughly 1 MB of JS before Hermes bytecode).AppSymbol.tsxexplicitly avoids eagerly registering whole icon sets. This PR takes the no-dependency route: a Lucide override becomes a colored monogram so the project is still distinguishable and keeps its chosen color. It is not pixel-identical to web, and exact Lucide rendering can be a follow-up if the dependency is acceptable.Reproduction
rocket, violet), an emoji (🍎), and a monogram (M7, orange).Expected: the assigned icons appear next to each project name. Actual: every project shows the folder glyph.
UI Changes
Android emulator, chat list:
New-task project picker (larger size) after the fix:
Verification
From
apps/mobile:vp test run src/lib/projectIcon.test.ts— 8 tests passnpx tsc --noEmit— cleanvp linton changed files — cleanemulator-5554, chat list, project picker, and settings overview checked manually (screenshots above). iOS not verified (no macOS host).Checklist
Written with Devin.
Link to Devin session: https://app.devin.ai/sessions/cdc0cb5425d24898becc0a7a5ecba969
Open in Devin Desktop: https://app.devin.ai/desktop/session/cdc0cb5425d24898becc0a7a5ecba969?variant=devin
Requested by: @SunkenInTime