Skip to content

fix(mobile): scale compose buttons with text size - #26100

Open
none23 wants to merge 4 commits into
pingdotgg:mainfrom
none23:t3/scale-compose-button-font-size
Open

none23 wants to merge 4 commits into
pingdotgg:mainfrom
none23:t3/scale-compose-button-font-size

Conversation

@none23

@none23 none23 commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Problem

At smaller Android text sizes, the compose button stays at its native 56dp minimum while One UI's floating navigation shrinks to 48dp. The same ignored scale also leaves Material's expandable button, icon, and label oversized.

Change

Apply the existing scale to the React Native visual wrapper instead of Expo's ineffective graphicsLayer modifier. Both navigation styles retain the shared font-scaled size, top-right alignment, and separate touch target. Default and larger text sizes are unchanged.

Scope and approval

Small, focused fix for an existing visual defect in one shared Android component: five lines added and eight removed. It qualifies as an obvious bug fix without a prior issue. Both One UI and Material callers are covered.

Verification

  • Android 16 emulator: before/after at 11pt, 16pt, and 22pt in both navigation styles. One UI matches at 48dp, 56dp, and 77dp respectively; 22pt retains its existing stacked layout. The 16pt and 22pt navigation crops are pixel-identical before and after in both styles.
  • Tapping the collapsed One UI button and the expanded Material button opens the project picker.
  • vp run check:changed passes on the rebased head. Two pre-existing looping .env symlinks were temporarily excluded and restored for the check.
  • vp test run apps/mobile/src/features/workspace/floating-workspace-tabs.test.ts: 12 tests pass.
  • Claude Opus 5.5 reviewed the final diff and screenshots with no findings.

All images below are navigation crops from actual emulator captures at the same viewport and setting within each pair.

One UI

Text size Before After
11pt One UI, 11pt, before One UI, 11pt, after
16pt One UI, 16pt, before One UI, 16pt, after
22pt One UI, 22pt, before One UI, 22pt, after

Material

Text size Before After
11pt Material, 11pt, before Material, 11pt, after
16pt Material, 16pt, before Material, 16pt, after
22pt Material, 22pt, before Material, 22pt, after

Implemented with gpt-6-astra through Codex. Reviewed by Claude Opus 5.5 through T3 Code's Claude provider.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 27, 2026
@none23
none23 marked this pull request as ready for review October 27, 2026 19:35
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Walkthrough

ScrollComposeButton now scales its visual host through a React Native View. The transform origin depends on layout direction. The Compose graphicsLayer scaling modifier is removed, while button sizing and width measurement remain unchanged.

Changes: Android compose button scaling

Layer / File(s) Summary
Move scaling to the visual wrapper
apps/mobile/src/components/ScrollComposeButton.android.tsx
A non-interactive, accessibility-hidden View scales the visual host from the top-left in RTL and the top-right otherwise. The Compose graphicsLayer scaling modifier is removed. Button sizing and width measurement remain unchanged.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix

Possibly related PRs

  • pingdotgg/t3code#26080: Scales Android split-composer controls and aligns their height with scaled navigation controls.
  • pingdotgg/t3code#24925: Applies system font scaling to mobile text and control geometry.
  • pingdotgg/t3code#26231: Aligns Android dictation controls with the send button and applies text-scale sizing to composer buttons.

Suggested reviewers: macroscopeapp

Merge Risk: Minimal · up to 1f95b

No merge-blocking risk was identified in the Android compose button scaling change.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title names the mobile scope and the main fix: compose buttons on Android should scale with text size. The changeset replaces the Compose graphicsLayer scale with a React Native wrapper transform …
Description check Passed The description follows the template's main sections: Problem, Change, Scope and approval, and Verification. The Problem and Change sections clearly explain the defect and the fix. The Scope section g…
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.
Full details: Title check

Explanation

The title names the mobile scope and the main fix: compose buttons on Android should scale with text size. The changeset replaces the Compose graphicsLayer scale with a React Native wrapper transform in ScrollComposeButton.android.tsx, which matches the title's subject. The title is short, specific, and follows conventional commit style.

Full details: Description check

Explanation

The description follows the template's main sections: Problem, Change, Scope and approval, and Verification. The Problem and Change sections clearly explain the defect and the fix. The Scope section gives a justification for a small obvious bug fix without a prior issue, as the template allows. The Verification section gives specific before/after evidence at 11pt, 16pt, and 22pt, tap checks, a changed-file check, and a focused test run. The template's optional agent attribution line is present. Minor gaps: the Scope section does not link a triaged issue or discussion, and the template's required comment about the scope qualifying for the obvious-bug exemption is only partly covered. The image links are embedded in the author's text and are not visible in this review, so they cannot be checked here.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Usage-based review receipt

Note

This review was completed with usage-based billing: files reviewed beyond your plan's included limits are billed at $0.25/file. View usage-based billing.

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

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

thanks @none23. moving the existing scale to the react native visual wrapper is the focused fix this needs. i kept your commits and implementation, merged current main without rebasing, and added one correction: scale from the top-left in rtl, matching compose's mirrored alignment and the existing touch target. the final diff is one file, 9 additions and 9 deletions. no controls, actions, or accessibility behavior were repurposed.

verification at 1f95b794a3b6650cc8c21517159a8f2ad060b6d4:

  • blacksmith vp run check:changed passed format, lint, knip, affected typechecks, and react compiler checks.
  • blacksmith vp test run apps/mobile/src/features/workspace/floating-workspace-tabs.test.ts: 12 passed.
  • all 29 ci checks passed. coderabbit reported no merge-blocking findings. two independent code reviews approved this head after the rtl correction.
  • fresh native reproduction, taps, and screenshots on this merged head remain unverified: this vm has no adb device and t3 reports device access is disabled. chrome cannot exercise this native compose component. human approval is still outstanding.

these are your original 11 pt one ui captures, inspected and re-uploaded for review. they demonstrate the original ltr change, not a fresh run on this head or rtl coverage. your other captures remain in the pr description.

author's original one ui 11 pt before

author's original one ui 11 pt after

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

No changed behavior could be exercised on this Linux VM. This is an unverifiable run, not a runtime pass. I inspected the current diff, description, discussion, commit authors, and check status at 1f95b794a3b6650cc8c21517159a8f2ad060b6d4. The PR is open and its PR commits have no authors matching the two stop conditions. All 29 reported CI checks are successful, which does not prove native behavior.

The diff only changes ScrollComposeButton.android.tsx: it moves scale from Expo Compose graphicsLayer onto the React Native visual wrapper, with a mirrored transform origin in RTL. The affected user path is Android workspace navigation → New thread, in One UI and Material navigation. Chrome/Playwright cannot execute this native Jetpack Compose component.

Environment probe:

device_list: Agent device access is turned off for this environment.
adb devices -l: List of devices attached [empty]

Not verified

Main reproduction, PR native rendering, before/after captures, and real Codex gpt-6.1-sol turns through the Android client remain unverified. There was no usable Android device; the repository mobile verification skill requires stopping when device access is unavailable. I did not start a dev server, install dependencies, modify code, or substitute web output or the author's screenshots for fresh proof. No new evidence images or recordings were captured.

A follow-up needs an automation-enabled Android device with the real dev client: compare matching data at 11pt, 16pt, and 22pt for both navigation styles on main and this exact head; check LTR and RTL alignment, expanded/collapsed New thread taps, adjacent tab/list touch targets, and creation of a thread with a real Codex gpt-6.1-sol turn. iOS and desktop were not exercised and do not execute the changed Android component.

This branch has not been deployed

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

Labels

size:S 10-29 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.

2 participants