Skip to content

[codex] Fix mobile device builds and Android UI#3575

Closed
bmdavis419 wants to merge 4 commits into
mainfrom
fix/mobile-device-builds-and-android-ui
Closed

[codex] Fix mobile device builds and Android UI#3575
bmdavis419 wants to merge 4 commits into
mainfrom
fix/mobile-device-builds-and-android-ui

Conversation

@bmdavis419

@bmdavis419 bmdavis419 commented Jun 26, 2026

Copy link
Copy Markdown

What Changed

  • add Android-compatible symbol rendering and a native Android home header/search experience
  • make home content and safe-area handling work predictably across Android and wider mobile layouts
  • add an opt-in iOS Personal Team build path that removes unsupported capabilities and supports self-contained Release installs
  • validate Personal Team bundle IDs, keep custom IDs scoped to that mode, and disable unavailable notification/Live Activity controls
  • align Expo mobile dependencies and document the local/EAS build workflows

Why

The existing mobile UI relies on iOS SF Symbols and iOS navigation-bar behavior, leaving Android controls and the home header incomplete. Local iOS builds also assume capabilities that Apple Personal Teams cannot sign. This change provides platform-specific fallbacks while keeping the default production capability set unchanged.

UI Changes

Android now gets a dedicated home header with search, filter/sort, settings, and new-task controls. Personal Team iOS builds show notification and Live Activity controls as unavailable because those builds intentionally omit the required capabilities.

Screenshots/video were not captured because this pass did not run a dev server or native build. UI behavior is covered here by source review, type checking, static analysis, tests, and release smoke CI.

Validation

  • pnpm install --frozen-lockfile
  • CI=1 pnpm --dir apps/mobile exec expo install --check
  • resolved Expo config checks for default, valid Personal Team, and malformed bundle-ID inputs
  • vp check
  • vp run typecheck
  • vp run lint:mobile
  • vp test — 536 files passed, 2 skipped; 4,099 tests passed, 7 skipped

vp check passed with existing lint warnings. The mobile native lint task passed its static checks and reported that optional local SwiftLint, ktlint, and detekt binaries are not installed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Summary by CodeRabbit

  • New Features

    • Added support for iOS development and release builds using a Personal Team account, with clearer setup guidance.
    • Improved the home screen search experience with synced search input and better Android/iOS header behavior.
    • Added broader icon support across platforms, including fallback handling on Android.
  • Bug Fixes

    • Adjusted home screen layout and scrolling for more consistent spacing on mobile.
    • Disabled unsupported notification and live activity options when Personal Team iOS builds are used.

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b3cdb3dc-146b-4c94-96a9-7e61dff976d6

📥 Commits

Reviewing files that changed from the base of the PR and between 03cebdf and 2e5b83f.

📒 Files selected for processing (4)
  • apps/mobile/src/app/settings/index.tsx
  • apps/mobile/src/features/agent-awareness/capabilities.ts
  • apps/mobile/src/features/agent-awareness/registrationPayload.ts
  • apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/mobile/src/features/agent-awareness/capabilities.ts

📝 Walkthrough

Walkthrough

The mobile app adds a personal-team iOS build path with bundle validation, conditional Expo plugin wiring, a release script, and updated build docs. It also introduces agent-awareness capability gating, a cross-platform symbol wrapper, platform-specific home header behavior, and updated home screen layout.

Changes

iOS personal-team build mode

Layer / File(s) Summary
Personal-team config path
apps/mobile/app.config.ts, apps/mobile/plugins/withoutIosPersonalTeamCapabilities.cjs
app.config.ts validates the personal-team bundle ID, derives the active iOS bundle identifier, applies it to iOS and Clerk settings, and conditionally includes widgets or an entitlement-removal plugin.
Release script and supporting updates
apps/mobile/package.json, apps/mobile/README.md
package.json adds ios:release and updates Expo/UI versions, and the README documents Personal Team iOS build commands and required bundle identifier variables.
Agent-awareness capability gating
apps/mobile/src/app/settings/index.tsx, apps/mobile/src/features/agent-awareness/capabilities.ts, apps/mobile/src/features/agent-awareness/registrationPayload.ts, apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts
The settings screen, capability helper, registration payload builder, and test all use the personal-team build flag to disable notification and live-activity support.

Home screen and header UI

Layer / File(s) Summary
Cross-platform symbol rendering
apps/mobile/src/components/AppSymbol.tsx, apps/mobile/src/components/ControlPill.tsx, apps/mobile/src/features/home/HomeScreen.tsx
AppSymbol.tsx maps Android SF Symbols to Tabler icons and exports shared symbol types; consumers switch to the local wrapper.
Platform-specific home header
apps/mobile/src/features/home/HomeHeader.tsx, apps/mobile/src/app/index.tsx
HomeHeader now accepts searchQuery, branches between Android and iOS implementations, and handles search and menu callbacks alongside the route state wiring.
Home screen layout updates
apps/mobile/src/features/home/HomeScreen.tsx
The home screen ScrollView now uses platform-specific inset handling and centered constrained content styling.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

A bunny hopped through code so bright,
with bundle IDs tucked up tight.
My carrot icons now bound in style,
and headers search with a rabbit smile.
Hoppity builds! 🐰

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main mobile build and Android UI changes.
Description check ✅ Passed The description follows the template with What Changed, Why, UI Changes, Validation, and Checklist sections, and is mostly complete.
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 fix/mobile-device-builds-and-android-ui

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

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Jun 26, 2026
@bmdavis419

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@macroscopeapp

macroscopeapp Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Android UI components and iOS Personal Team build support that changes push notification behavior. New platform features and configuration changes affecting runtime behavior warrant human review.

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

@bmdavis419

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread apps/mobile/src/components/AppSymbol.tsx
Comment thread apps/mobile/src/components/AppSymbol.tsx
Comment thread apps/mobile/app.config.ts
Comment thread apps/mobile/app.config.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/mobile/src/features/home/HomeHeader.tsx (1)

364-374: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Bind the iOS search bar to the current query state.

headerSearchBarOptions doesn’t expose a controlled text prop, so the iOS bar only reflects user input here. If searchQuery is cleared or prefills from route state, the native search text can stay stale unless it’s updated imperatively through the search bar ref.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/mobile/src/features/home/HomeHeader.tsx` around lines 364 - 374, The iOS
search bar is currently only updated from user input, so its native text can
drift from the current searchQuery state when the query is cleared or prefilled.
Update the HomeHeader search bar setup to sync the native value imperatively
through the existing search bar ref whenever searchQuery changes, using the
headerSearchBarOptions configuration and the onChangeText/onCancelButtonPress
handlers as the hook points.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/mobile/app.config.ts`:
- Around line 13-19: The Personal Team bundle identifier guard in app.config.ts
only checks for presence, so invalid values can still reach ios.bundleIdentifier
and fail later. Update the validation around personalTeamBundleIdentifier and
isIosPersonalTeamBuild to also reject non–reverse-DNS values such as single
labels, double dots, or whitespace, and throw an actionable error before the
config is used. Keep the check close to the existing
T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID validation so the failure happens in the same
place.

---

Outside diff comments:
In `@apps/mobile/src/features/home/HomeHeader.tsx`:
- Around line 364-374: The iOS search bar is currently only updated from user
input, so its native text can drift from the current searchQuery state when the
query is cleared or prefilled. Update the HomeHeader search bar setup to sync
the native value imperatively through the existing search bar ref whenever
searchQuery changes, using the headerSearchBarOptions configuration and the
onChangeText/onCancelButtonPress handlers as the hook points.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 3625b076-e6e6-41bb-9d02-58a6e7383c12

📥 Commits

Reviewing files that changed from the base of the PR and between 24abab7 and e61d590.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (10)
  • apps/mobile/README.md
  • apps/mobile/app.config.ts
  • apps/mobile/package.json
  • apps/mobile/plugins/withoutIosPersonalTeamCapabilities.cjs
  • apps/mobile/src/app/_layout.tsx
  • apps/mobile/src/app/index.tsx
  • apps/mobile/src/components/AppSymbol.tsx
  • apps/mobile/src/components/ControlPill.tsx
  • apps/mobile/src/features/home/HomeHeader.tsx
  • apps/mobile/src/features/home/HomeScreen.tsx

Comment thread apps/mobile/app.config.ts
@bmdavis419

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread apps/mobile/src/app/settings/index.tsx
@bmdavis419

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@juliusmarminge

Copy link
Copy Markdown
Member

#3579

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

Labels

size:XXL 1,000+ 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.

2 participants