Changelog

Release notes and version history for the Kallo SDK.

Stable releases

v0.1.7

Android
  • Fixes DTMF: pressing a key sent a never-ending tone that cut the call audio — each key now sends one short, properly-terminated tone.
  • Adds a self-recovery safeguard so incoming audio resumes if the decode path briefly stalls mid-call.
  • Recommended upgrade for anyone using DTMF or on 0.1.4–0.1.6.

v0.1.6

Android
  • Fixes downlink audio failing on alternating calls — a leaked audio stream from the previous call no longer carries into the next, so every call now has working incoming audio.
  • Fixes incoming audio not recovering after the remote party puts the call on hold and resumes it.
  • DTMF now sent as RFC2833 telephone-events so IVRs/PBXs (e.g. 3CX) recognize key presses.
  • Recommended upgrade for anyone on 0.1.4/0.1.5.

v0.1.5

Android
  • Fixes intermittent/silent incoming audio introduced in 0.1.4 — the receive jitter buffer now uses adaptive mode and no longer drops or stalls audio on clock skew.
  • Recommended upgrade for anyone on 0.1.4.
  • Adds optional KalloConfig jitter-buffer tuning (jitterBufferMode + min/max delay); defaults are the new adaptive values, fully backward-compatible.

v0.1.4

Android
  • Fixes inbound (downlink) audio dropping out about 10 seconds into a call while the call stayed connected.
  • Root cause was the receive jitter buffer’s clock-drift compensation dropping the steady incoming RTP stream; the SDK now configures the audio/RTP jitter buffer explicitly and no longer abandons a continuous inbound stream.
  • No public Dart API changes; fully backward-compatible. Internal/native fix only.

v0.1.3

Android
  • Adds an optional authUsername on KalloConfig — the SIP digest Authorization username (auth ID), separate from the AOR/extension username.
  • Fixes 403 Invalid credentials on PBXs (e.g. 3CX) where the auth ID differs from the extension; set authUsername to your auth ID and leave username as the extension.
  • Fully backward-compatible: omit authUsername and behavior is identical to 0.1.2 (it defaults to username).

v0.1.2

Android
  • Android DNS fix: SIP registration to a registrar hostname (not just a literal IP) now works on Android.
  • The SDK discovers the active network’s DNS servers automatically, falling back to public resolvers when none are reported.
  • Distributed as a closed-binary Flutter plugin package (Dart API + prebuilt .aar) — add it as a path or private-git dependency.
  • No public Dart API changes; adds the install-time ACCESS_NETWORK_STATE permission (no runtime prompt).

Dev / test builds

Latest first — scroll for older builds

These builds are under active development — for testing & feedback only. They may be unstable; please report any issues you run into.

  • v0.1.15-dev.4

    dev / testingAndroidiOS
    • Test build of audio output device selection (Android + iOS) — for testing & feedback, NOT for production use.
    • Android: the current-output change stream now emits when the OS auto-routes a new call to a connected Bluetooth headset (previously only the polled list reflected it), and selecting the earpiece while Bluetooth is connected now moves audio to the receiver instead of doing nothing.
    • iOS: a connected Bluetooth headset now stays listed after switching to the earpiece, so Bluetooth → Earpiece → Bluetooth works (previously Bluetooth disappeared from the list once the earpiece was selected).
    • Please re-test on a physical Android phone and iPhone with a Bluetooth headset connected: (1) the current-route indicator updates to Bluetooth on its own at call start, (2) tapping Earpiece moves audio to the receiver, and (3) you can switch back to the Bluetooth headset afterward.
  • v0.1.15-dev.3

    dev / testingAndroidiOS
    • Test build of audio output device selection (Android + iOS) — for testing & feedback, NOT for production use.
    • Android: the reported current output now self-corrects to a connected Bluetooth device at call start. Previously it briefly showed the earpiece as current (a display-only issue) until the route settled; the SDK now re-reads and re-emits the real route once the OS finishes auto-routing, no manual selection needed.
    • iOS: selecting the earpiece now forces the built-in receiver even while a Bluetooth headset (e.g. AirPods) is connected, instead of being a no-op. Re-selecting Bluetooth returns audio to the headset.
    • Please re-test, with a Bluetooth headset connected on a physical Android phone and iPhone: (1) the current-route indicator shows Bluetooth from call start, and (2) tapping Earpiece moves audio to the receiver.
  • v0.1.15-dev.2

    dev / testingAndroidiOS
    • Test build of audio output device selection (Android + iOS) — for testing & feedback, NOT for production use.
    • Fixes current-route accuracy: the SDK now reports the actual active output from call start (including when the OS auto-routes to a connected Bluetooth device) and re-syncs to the real route on every new call instead of carrying over the previous selection.
    • iOS: selecting the earpiece now works even while a Bluetooth device is connected. Please re-test route switching and the current-route indicator on a physical Android phone and iPhone with a Bluetooth headset connected.
  • v0.1.15-dev.1

    dev / testingAndroidiOS
    • Test build of audio output device selection (Android + iOS) — for testing & feedback, NOT for production use.
    • Adds an API to list, select, and observe the call audio output — earpiece, speakerphone, wired headset, and Bluetooth — with live device/route-change events. The existing speaker toggle keeps working.
    • Please test on a physical Android phone and iPhone with a Bluetooth headset and a wired headset connected, and confirm each route works by ear. (On iOS, choosing between multiple Bluetooth devices uses the system route picker.)
  • v0.1.14-dev.2

    dev / testingAndroidiOS
    • Combined Android + iOS test build — one package for both platforms, for testing & feedback, NOT for production use.
    • Android: the production-confirmed 0.1.13 build (the incoming-audio fix). iOS: integrates, builds, and connects (registration + call setup/teardown); two-way audio is not yet confirmed on a physical iPhone.
    • Add it as a single dependency — Flutter builds the right half per target. Please run it on a physical iPhone against your SIP/PBX and share the audio result.
  • v0.1.14-dev.1

    dev / testingiOS
    • First iOS (Apple / iPhone) test build — for testing & feedback, NOT for production use.
    • Brings iOS up to the Android line: native iOS audio backend (AudioUnit) + Opus, DTMF, hold/resume, and the incoming-audio (downlink) fixes that shipped through 0.1.13.
    • iOS only for now — please run it on an iPhone against your SIP/PBX and share the result. The Android build of this version ships with the stable 0.1.14 release.
  • v0.1.13-dev.2

    dev / testingAndroid
    • Test build of the incoming-audio (downlink) silence fix — for testing & feedback, NOT for production use.
    • Fixes the remaining silent-incoming-audio on affected devices (e.g. some 3CX setups): the receive audio buffer was being initialised with a corrupted internal threshold, so it filled up but never started playing. Incoming audio now plays from call start.
    • Still includes the `aubuf: GATE` diagnostic logging so you can confirm the fix on-device — please run it on an affected device and share the logs (look for incoming audio working throughout the call, including after hold/resume).
  • v0.1.13-dev.1

    dev / testingAndroid
    • Diagnostics / test build — for testing & feedback, NOT for production use.
    • Adds the `aubuf: GATE` downlink-silence instrumentation: extra logging around the receive audio buffer to help pin down the remaining incoming-audio silence on affected devices.
    • No behavior change to calling versus 0.1.11 — this build only adds diagnostic logging. Please run it on an affected device and share the logs.