Skip to content

fix(mobile): Android home UI fixes — favicons, wordmark, collapse state#3774

Open
PixPMusic wants to merge 10 commits into
pingdotgg:android-dev-pr-3514from
PixPMusic:android-home-ui-fixes
Open

fix(mobile): Android home UI fixes — favicons, wordmark, collapse state#3774
PixPMusic wants to merge 10 commits into
pingdotgg:android-dev-pr-3514from
PixPMusic:android-home-ui-fixes

Conversation

@PixPMusic

@PixPMusic PixPMusic commented Jul 7, 2026

Copy link
Copy Markdown

Summary

Four home-screen fixes for the Android app, stacked on #3579:

  • Project favicons: swap ProjectFavicon from RN Image to expo-image so SVG and ICO decode on Android. RN's Fresco decoder handles neither, and the server's favicon resolver prefers favicon.svg, so project logos fell back to the folder glyph.
  • Font-load race: hold first render (behind the splash screen) until DM Sans loads. Text measured with the fallback font kept its stale width when the custom font swapped in, intermittently clipping trailing glyphs in the header wordmark and stage badge on cold starts.
  • Wordmark: match the desktop SidebarBrand — the T3 SVG mark plus a muted "Code" label, instead of a single white text.
  • Collapse state: persist home-screen project group collapse in the preferences blob (expo-secure-store) and hydrate on mount, so it survives restarts.

Validation

  • vp check, pnpm exec tsc --noEmit, mobile tests pass
  • Release build (assembleRelease, production variant) installed and verified on a Pixel 7 Pro: favicons render (t3code logo instead of folder glyph), wordmark matches desktop, collapse state survives restart

Note

Low Risk
Mobile UI and local preference persistence only; no auth, networking, or shared backend changes.

Overview
Android home-screen fixes: project favicons now use expo-image instead of RN Image so SVG/ICO decode (Fresco couldn’t, so logos fell back to the folder glyph). Cold-start text clipping is addressed by keeping the native splash up and returning null until DM Sans loads or fails, avoiding stale layout from the fallback font.

Branding on the home header matches desktop: new T3Wordmark SVG plus muted “Code” label instead of bold “T3 Code”. Collapsed project groups are stored in preferences (collapsedProjectGroups) and hydrated on mount, with guards so early toggles aren’t overwritten by async load or partial writes.

Reviewed by Cursor Bugbot for commit 3f6a479. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix Android home UI with favicon rendering, T3 wordmark header, and persistent group collapse state

  • Replaces React Native's Image with expo-image in ProjectFaviconImage for correct favicon rendering using contentFit="contain"
  • Adds a T3Wordmark SVG component and updates AndroidHomeHeader to display it alongside a muted "Code" label, matching the desktop sidebar brand
  • Persists collapsed project group state across sessions in HomeScreen, loading saved preferences on mount and writing changes after user toggles
  • Delays initial app rendering behind the splash screen until fonts load or fail, using system fonts as a fallback on error

Macroscope summarized 3f6a479.

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 94d4e800-7824-4acc-8501-da11ca402f03

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 7, 2026
Comment thread apps/mobile/src/features/home/HomeScreen.tsx Outdated
Comment thread apps/mobile/src/App.tsx
Comment thread apps/mobile/src/features/home/HomeScreen.tsx
Comment thread apps/mobile/src/App.tsx
@macroscopeapp

macroscopeapp Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces new collapse state persistence logic with complex hydration handling. An open review comment identifies a potential race condition bug where persisted collapsed state could be lost if the user interacts before preferences load. The new functionality and unresolved bug concern warrant human review.

You can customize Macroscope's approvability policy. Learn more.

Comment thread apps/mobile/src/features/home/HomeScreen.tsx
@PixPMusic PixPMusic force-pushed the android-home-ui-fixes branch from ae4873a to 7c4ed3a Compare July 7, 2026 18:54
@PixPMusic

Copy link
Copy Markdown
Author

Force-pushed to fix my git identity, sorry! My Github isn't linked to my work email :)

@PixPMusic PixPMusic force-pushed the android-home-ui-fixes branch from 7c4ed3a to e9e9825 Compare July 7, 2026 22:46
@PixPMusic

Copy link
Copy Markdown
Author
image I love when my agent follows my exact instructions to the letter and does nothing more than what I told it to do

PixPMusic added 8 commits July 8, 2026 04:09
RN's built-in Image (Fresco) cannot decode SVG on Android, and the server's
favicon resolver prefers favicon.svg, so project logos fell back to the
folder glyph. expo-image decodes both SVG and ICO on Android and iOS.
Text measured with the fallback font kept its stale width when DM Sans
swapped in, intermittently clipping trailing glyphs in the home header
wordmark and stage badge on Android cold starts.
Render the T3 SVG mark with a muted "Code" label, mirroring
SidebarBrand in the web app instead of a single white text.
Collapse state lived in component state only. Store the collapsed group
keys in the preferences blob and hydrate them on mount, skipping keys
the user already toggled this session.
The render gate keyed off fontsLoaded alone, so a font load error left
the app stuck behind the splash screen forever.
Rapid toggles fired unawaited full-list writes that could complete out
of order, resurrecting a stale collapsed-group list. Chain writes on a
queue so the newest state always lands last.
preventAutoHideAsync was never called, so Expo auto-hid the splash on
first render and slow font loads showed a blank screen instead.
savePreferencesPatch read-modify-writes the whole blob, so concurrent
patches from different screens could drop each other's fields. Queue
writes module-wide, and move the collapse persistence out of the state
updater into a post-commit effect so it runs once per change.
Comment thread apps/mobile/src/features/home/HomeScreen.tsx

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e2aa122. Configure here.

Comment thread apps/mobile/src/features/home/HomeScreen.tsx
A toggle made before the async preference read finished persisted a
partial collapsed-group list, silently dropping groups saved in earlier
sessions. Persistence now waits for hydration; the hydration state
update re-runs the effect so a pending toggle flushes with the merged
list.
Comment thread apps/mobile/src/features/home/HomeScreen.tsx
Hydration skipped any group already present in the map, so a
pre-hydration "show more" on a group that should start collapsed
discarded the stored preference for the session. Only groups the user
explicitly collapse-toggled now win over the stored flag; other
existing entries keep their visibleCount and gain the stored collapse.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant