Skip to content

[pull] main from expo:main - #1158

Merged
pull[bot] merged 6 commits into
code:mainfrom
expo:main
Aug 18, 2026
Merged

[pull] main from expo:main#1158
pull[bot] merged 6 commits into
code:mainfrom
expo:main

Conversation

@pull

@pull pull Bot commented Aug 18, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

aonan-brex and others added 6 commits August 18, 2026 03:56
## Why

`@expo/ui` converts Android VectorDrawable XML into Compose
`ImageVector` instances. `ImageLoader` currently drops
`android:fillType`, so paths authored with the even-odd fill rule render
using Compose's default non-zero rule instead.

This affects any Android icon or image path that relies on
`android:fillType="evenOdd"`; it is not specific to a particular
component or icon.

## How

Parse the VectorDrawable `fillType` attribute and pass the corresponding
`PathFillType` to `ImageVector.Builder.addPath`.

The parser accepts both the textual `evenOdd` value used by source XML
and the compiled enum value `1` returned by Android's
`XmlResourceParser`. Paths without the attribute continue to use
`PathFillType.NonZero`.

## Test Plan

- `pnpm et check-packages @expo/ui`
- `cd apps/bare-expo/android && ./gradlew :expo-ui:spotlessCheck`
- `cd apps/bare-expo/android && ./gradlew :expo-ui:testDebugUnitTest
--tests expo.modules.ui.graphics.ImageLoaderTest`
- Added regression coverage for textual `evenOdd`, compiled value `1`,
and the default non-zero fill rule. All 25 `ImageLoaderTest` tests pass.

## Checklist

- [x] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [x] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [x] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why

we recently added variable font support in #48129 for Android, and this
adds it for iOS. iOS already supported variable fonts via the config
plugin, this adds that feature to `Font.loadAsync` (and `useFonts` hook)
also.

# How

A variable font packs many fonts (=font faces, =postScript names) into
one file. So the main part is changing `fontFamilyAliases` to provide a
list of fonts (postScript names) for an alias, not just a single one.

Then, as we swizzle `UIFont.fontNames` we can inject these names when RN
core requests fonts given an alias. RN core then matches the names
against the requested style, and picks the right font to render.

This happens only for fonts with variation axes do this, so for static
fonts nothing changes.

docs in #48776


# Test Plan

bare expo font screen

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [x] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [ ] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)

---

<sub>Stack created with <a
href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a
href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub>
…essages

Changelog entries get exactly one link group (the PR; no links in verify mode, where the PR number does not exist yet), and work-mode commit bodies are capped at one short paragraph.
Changelog entries carry exactly one link group: the pull request and the author.
Two layers, from the #48747/#49055 duplicate-PR incident: the context step hands the agent a related.json of title-matched issues/PRs and the prompt makes duplicate judgment a first-class step (withdraw when an open PR already fixes the bug; critic enforces); the publisher intersects changed non-changelog paths with open PRs from any author before gh pr create — full coverage keeps the branch but opens no PR, partial overlap is listed in the PR body.
@pull pull Bot locked and limited conversation to collaborators Aug 18, 2026
@pull pull Bot added the ⤵️ pull label Aug 18, 2026
@pull
pull Bot merged commit b0c6d2e into code:main Aug 18, 2026
11 of 12 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants