Android Chatbot UI Kit — Release Notes
Version history for dialogs_ChatbotAV_Android, the official pre-built chat and
video-calling UI Kit for Android. Releases are shown in reverse chronological order — latest
first.
This is the first published release of the Android Chatbot UI Kit.
Download: dialogs_ChatbotAV_Android-1.0.0.zip
This document consolidates the SDK team's own release-notes review, cross-checked directly against the current source tree (reviewed 2026-07-16). The original v1.0.0 notes only described EnxChatClient; the code review found substantially more already-shipped functionality (Level 2/3 APIs, both call paths, rich attachment previews, and more) which is documented below as part of this same v1.0.0 release, since SDK_VERSION in gradle.properties was still 1.0.0 at the time of review.
What's Included
Public API
| Addition | Notes |
|---|---|
EnxChatConfig | botId, host (required), plus optional path/isCallView/enableHistory. |
EnxChatClient | start(config, listener?), bindToLifecycle(owner), disconnect(), release(). |
EnxChatBotListener | onBotConnected(botInfo), onClose(). |
EnxChatSession (Level 3) | Headless lifecycle/session API — create(...), initialize(), connect(), sendMessage(text, attachments), disconnect(), resetConversation(), release(), getWebView(), saveState()/restoreState(), state: StateFlow<EnxChatState>. |
EnxChatFragment (Level 2) | Fragment-first wrapper — newInstance(...), bindToHostLifecycle(...), start()/connect()/disconnect()/release(). |
EnxChatSessionListener / EnxChatSessionListenerAdapter | Richer event contract than EnxChatBotListener: onStateChanged, onChatReady, onConnected, onConversationReady, onMessageSent, onBotResponse, onBotMessage, onTyping, onDisconnected, onBotInfo, onClear, onConversationReset, onAudioCallClick, onVideoCallClick, onError, onVideoCallRequested, onNativeUIKitCallRequested, onVideoCallEnded. |
EnxChatState enum | CREATED, INITIALIZING, INITIALIZED, CONNECTING, CONNECTED, DISCONNECTED, ERROR, RELEASED — exposed via getState()/getCurrentState()/state: StateFlow. |
EnxChat composable + EnxChatController | Compose-native advanced entry point; EnxChatController.resetConversation() for imperative resets from outside the composable. |
EnxCallView composable | Reusable audio/video call icon buttons for custom app-owned chat headers. |
ChatMessage model (+ ChatAttachment, QuickReply, MessageType, AttachmentType) | Full structured message model: text, quick replies, buttons, image/video/audio/file/card/carousel/system messages, multi-select support (allowMultiple). |
BotInfo model (+ BotDetails, ChatTheme, StartupForm, Security, AgentHuntingStatusMessage) | Full bot metadata — theme colors, contact/legal links, startup form config, agent-hunting status copy, security flags (escapeHTML), maxMessageLength, click-to-call mode. |
EnxChatClient.setBotIdAndHost(...) | Present but @Deprecated in favor of startWithBot(...)/start(config, listener). |
EnxChatClient.setProfilePictureUrl(...) / setHeaderColor(...) | Header customization hooks. |
EnxChatClient config-change survival | onSaveInstanceState/onRestoreInstanceState persist WebView state across rotation. |
EnxChatClient.unbindFromLifecycle() | Explicit teardown of a previous bindToLifecycle(...) binding. |
Chat Features (UI Layer)
- Full chat screen (
EnxChatScreen) with: date separators, typing indicator, WhatsApp-style attachment sheet (camera/gallery/document/emoji), quick-reply single- and multi-choice selection, calendar/date-picker quick replies, and rich in-message attachment previews — image/video fullscreen viewers, and a document viewer supporting PDF (with page rendering), JSON (pretty-printed + syntax highlighting), CSV (table view), HTML, Markdown, and plain/code text, with an “open externally” fallback for unsupported types. - Markdown rendering in bot message bubbles via Markwon (tables + strikethrough extensions).
- Message de-duplication safeguards in the JS bridge to avoid duplicate bubbles from history replay.
- Conversation reset detection from free-text bot copy (e.g. “reset conversation”), in addition to explicit quick-reply/button reset actions.
- A 30-second response timeout that injects a friendly “having trouble responding” system message if the bot doesn't answer in time.
- Message queuing while disconnected — messages sent before
CONNECTEDare queued and flushed automatically on connect.
Calling Features
- Two independent call paths, both launched via the internal
EnxVideoCallActivity:- Browser/iFrame-based calls (
onVideoCallRequested) — rendered in a dedicated WebView. - Native calls via the EnableX UIKit Android SDK (
onNativeUIKitCallRequested) — rendered usingEnxVideoView/EnxSetting/EnxAudioViewConfigfromEnx_UIKit_Android-2.2.3.aar, backed byEnx-Rtc-Android(WebRTC signaling, Bluetooth audio routing, foreground service) andlibwebrtc.aar(native WebRTC media engine).
- Browser/iFrame-based calls (
- Picture-in-Picture support during native calls (9:16 aspect ratio), triggered on back-press or
onUserLeaveHint. - Automatic return-to-chat navigation when a call ends (
closeAndReturnToChat()brings the host chat Activity back to the foreground). EnxCallViewcomposable +EnxChatConfig.isCallViewflag to surface call-initiation icons in a custom header.
File & Attachment Sending
EnxChatSession.sendMessage(text, attachments)/ file-send helpers — acceptsUri,File,ByteArray, or a raw base64String; automatically detects file name/MIME type; base64-encodes off the main thread and delivers via the JS bridge.
Known Limitations
- Chat WebView always loads a fixed EnableX-hosted URL; the bundled offline assets are currently unused.
- SSL error handling differs between the chat WebView (blocks) and the call WebView (bypasses).
- Audio-only native calls (
EnxAudioViewConfig) are wired but not currently reachable —isAudioOnlyis hardcodedfalse. EnxChatBot.setEnxChatListener(...)does not re-register the JS bridge if called after initialization.
Required Permissions
Always required: INTERNET, ACCESS_NETWORK_STATE. Required for call features: CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS, WAKE_LOCK, FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PROJECTION, SYSTEM_ALERT_WINDOW, BLUETOOTH_CONNECT/BLUETOOTH_SCAN/BLUETOOTH_ADVERTISE.
These come from three sources merged automatically by Gradle: the SDK module's own manifest, Enx_UIKit_Android-2.2.3.aar's manifest, and Enx-Rtc-Android-release.aar's manifest.
Dependency Versions in This Build
| Dependency | Version |
|---|---|
| Enx_UIKit_Android (vendored AAR) | 2.2.3 |
| Enx-Rtc-Android (vendored AAR) | release (unversioned filename) |
| libwebrtc (vendored AAR) | unversioned filename |
| Kotlin | 2.0.21 |
| AGP | 9.0.1 |
| Compose BOM | 2024.09.00 |
| ExoPlayer | 2.19.1 |
| Gson | 2.10.1 |
| socket.io-client | 2.1.2 |
| Markwon | 4.6.2 |
| Coil-Compose | 2.5.0 |
| sdp-android | 1.1.1 |
| minSdk / compileSdk / targetSdk | 24 / 36 / 36 |