Skip to content

WaEnhancer Community 0.0.25

Choose a tag to compare

@github-actions github-actions released this 22 Oct 19:01
9224205

WaEnhancer Community 0.0.25

SHA-256: 9e29e0f6fef31cb3b555bb8ae2222ef12636548dbf1da79dd5f4f8aa58b9ffb9

Changes since v0.0.24.

What's changed

  • #97 feat: import a user-selected emoji TTF for WhatsApp rendering

Full changelog

This section compiles the descriptions of the pull requests included in this release.

#97 — feat: import a user-selected emoji TTF for WhatsApp rendering

Merged by contribution from @igorcv88.

Why

On One UI 9, FlipFont can apply a user-selected iOS-style emoji font in most apps, while WhatsApp's own emoji spans continue to render another style. The existing Disable Default Emojis hook calls Canvas.drawText() using WhatsApp's original Paint; it never selects the user's custom typeface, and a checked switch does not prove that hooks were installed.

Changes

  • Adds Custom WhatsApp emoji font to standalone and embedded Conversation settings. The user selects any compatible color emoji TTF through Android's document picker; the companion app validates SFNT tables, limits size to 128 MB, checks Android Typeface loading, and atomically stores one private copy. Users can remove the copy at any time. No Apple/proprietary font is bundled or committed.
  • Adds a dedicated, UID-authenticated, read-only openEmojiFont() Binder capability with no user-controlled path. Existing private-file access restrictions remain intact.
  • Loads the selected font asynchronously once within the WhatsApp process, intercepts emoji-only span draws, clones Paint, applies the chosen Typeface, and preserves non-emoji spans and the original draw path on failures. Includes a fallback hook for inherited DynamicDrawableSpan.draw, even when DexKit fails to resolve WhatsApp's obfuscated spans.
  • Logs only hook counts, font readiness, and the first emoji draw for device diagnosis; never logs message text. Updates English/Portuguese strings, architecture and handoff.

Validation

  • Passed: 8 host-side JUnit tests (emoji-sequence classifier, SFNT validator, actual supplied 42 MB iOS18.4.ttf), all 4 repository IPC/runtime harness tests (authenticated, read-only font FD, symlink/missing-file rejection), 5 XML parser checks, embedded settings JSON check, git diff --check.
  • Not run: full Android Gradle test/build (no Android SDK installed in this container; JDK 21 and Gradle 8.14.5 work). No APK or physical One UI 9/WhatsApp test is claimed.
  • No systemless modules, Google Play Services changes, system_server hooks, workflow dispatch, merge, or phone changes.

Device verification after compiling

  1. Install the updated WaEnhancer APK and keep its LSPosed scope limited to WhatsApp.
  2. Conversation settings → Custom WhatsApp emoji font → import the user's own compatible TTF; keep Disable Default Emojis enabled.
  3. Force-stop/reopen WhatsApp; compare 😍 🫩 ❤️ 🇧🇷 🧑🏽‍⚕️ before sending and in bubbles/captions, and check typography/non-emoji spans.
  4. Read [WAEX][EmojiFont] logs. fontLoaded=true + a first intercepted draw proves font transport and hook execution; neither guarantees exact visual matching. No intercepted draw suggests a version-specific renderer not covered by these hooks.

This is a focused implementation for review; runtime compatibility remains pending a physical test.