Skip to content

feat(react-native): true native Android chat UI (fallback if WebView UX isn't sufficient) #30

Description

@AimTune

Goal

Provide a truly native Android chat experience (Jetpack Compose/native Views) as an alternative rendering backend for @chativa/rn-webview, for apps where the WebView-based widget doesn't meet the UX bar.

Background

@chativa/rn-webview (#6) currently ships a react-native-webview-based implementation: it embeds the existing web widget (@chativa/ui + @chativa/genui, loaded via the packages' existing CDN/global builds) inside a WebView and bridges events/config over postMessage. This reuses the web UI as-is and required no native re-implementation. Android's WebView is generally more consistent than iOS's, but the same class of issues (keyboard resize/adjustResize quirks, scroll/momentum feel, animation smoothness, back-button handling) can still fall short of a truly native screen, especially on lower-end devices.

This issue tracks the conditional fallback: only pursue this if the WebView approach proves insufficient in a real app.

Scope (to be refined when/if this is picked up)

  • Evaluate the shipped WebView widget in a real Android app first — keyboard behavior (adjustResize/adjustPan), scroll performance, animation smoothness, accessibility (TalkBack), back-button/predictive-back handling — and document concrete shortfalls before scoping native work.
  • Decide the integration shape: a native Fabric component exposing a Compose/native View chat view to @chativa/rn-webview, vs. a fully separate native Android SDK usable outside RN entirely.
  • Reuse @chativa/core's wire protocol / connector behavior conceptually (same ChativaSettings shape, same message/event model) even though the UI layer would be genuinely native Kotlin, not shared JS.
  • GenUI: native equivalents of the built-in components, scoped down to whatever's actually needed once real usage data exists.

Acceptance

  • Not scheduled — this issue exists to hold the decision and scope once/if the WebView approach is found insufficient. No acceptance criteria until scoped.

Out of scope (for now)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions