voiceos_flutter 0.1.10
voiceos_flutter: ^0.1.10 copied to clipboard
Production-grade Flutter SDK for AI voice calling powered by the VoiceOS Rust AI Voice Engine. Supports FCM, TelecomManager, ConnectionService, AudioRecord/AudioTrack (Android) and PushKit, CallKit, A [...]
Changelog #
0.1.10 — Smooth TTS playback & build fix #
Fixed #
- Choppy / sped-up TTS on Android: playback queue held only 100 chunks while long
announcements send 1,000+ chunks (~34 s of audio), causing most audio to be dropped.
Queue capacity is now 4,096 with blocking enqueue and
WRITE_BLOCKINGAudioTrack writes. - Playback drain timeout increased to 120 s so voice-blast calls finish before teardown.
- Larger AudioTrack buffer for smoother speech output.
VoiceNotificationManagerimport fix forVoiceCallReceiver(0.1.8 compile error).
0.1.9 — Lock-screen wake & incoming call alerts #
Fixed #
- Incoming call UI now wakes the display on a locked device (
setTurnScreenOnbeforesuper.onCreate(), ring wake lock, keyguard dismiss). - FCM / killed-app path launches the full-screen incoming Activity immediately, not only via notification tap.
- Incoming notification uses default ringtone, vibration pattern, and DND bypass.
Added #
VoiceCallLockScreenHelper— centralized lock-screen / wake / keyguard handling.- Android 14+ full-screen intent permission check with log guidance.
0.1.8 — Android native call UI #
Added #
- Native full-screen call UI on Android (CallKit-equivalent for self-managed VoIP):
VoiceIncomingCallActivity— lock-screen incoming screen with Answer / DeclineVoiceInCallActivity— auto-opens after Accept with mute, speaker, end, live status, transcript
VoiceOSConfig.enableNativeCallUi— opt out to use your own Flutter call screenVoiceOS.acceptIncomingCall()/rejectIncomingCall()Dart APIs
0.1.7 — Announcement playback drain #
Fixed #
- Welcome / voice-blast calls ending silently: the SDK now drains the TTS playback
queue before stopping
AudioTrack/AVAudioPlayerNodewhen the server sendscall_completed. - Server logs
Voice blast produced zero audio sampleswhen TTS returns no PCM, andVoice blast TTS streamed to clientwith duration when audio is sent. - Gateway allows up to 3 s for the WebSocket forwarder to flush remaining audio after the engine stops (was 500 ms).
0.1.6 — Graceful server call completion #
Fixed #
- Incoming calls failing with
AudioRecord failed to initialize(error -20) after tapping Answer on Android 14+ when the foreground service was still running withphoneCall-only type during ringing. - Active-call audio now starts only after
VoiceCallServiceis promoted tomicrophone | phoneCallforeground service types. - Mic permission is verified on every answer path (notification + Telecom) before capture.
AudioRecordinitialization retries briefly after TelecomsetActive()/ FGS promotion to handle device-specific audio routing races.call_completedhandling: announcement / one-shot agents no longer triggermax_reconnects_exceededor spurious WebSocket reconnects when the server closes the socket after a normal call end.- Added
CallCompletedEventon the Dart event stream.
0.1.5 — Android incoming-call foreground service crash fix #
Fixed #
- Crash on incoming FCM calls (
SecurityException) when starting foreground service withmicrophonetype beforeRECORD_AUDIOis granted (Android 14+ / targetSdk 34+). - Incoming-call notifications now use
FOREGROUND_SERVICE_TYPE_PHONE_CALLonly;microphonetype is used only after the user answers and mic permission is available.
0.1.4 — Android Kotlin compile fix #
Fixed #
- Missing
VoiceCallServiceimport inVoiceFCMService.kt(broke 0.1.3 Android builds). logger.warn→logger.warningto matchVoiceOSLoggerAPI.
0.1.3 — Android self-managed incoming call UI #
Fixed #
- Self-managed Telecom incoming calls now always show Answer/Decline notification UI (Android does not provide a system incoming-call screen for self-managed accounts).
- Tapping Answer on the notification now starts audio/WebSocket when Telecom is enabled (previously waited for a system answer UI that never appears).
- Telecom audio-route events during ringing no longer wake the mic before the call is answered.
0.1.2 — Android incoming call reliability #
Fixed #
- Android FCM tokens are now synced to the dashboard as
fcmToken(notpushkitToken). - Proactive FCM token fetch on SDK initialize.
- Duplicate FCM deliveries no longer reject the second message as "Busy".
- Emulator devices use notification-based incoming call UI (TelecomManager is unreliable on emulators).
VoiceCallServiceno longer re-dispatches incoming FCM toVoiceSessionManager(prevents double handling).
0.1.1 — Android Gradle dependency fix #
Fixed #
- Android build failures caused by conflicting
kotlin-stdlib-jdk8andandroidx.annotationversion constraints when consumed from host Flutter apps. - Plugin
android/build.gradleno longer pins Kotlin stdlib or AndroidX annotation versions; Flutter's embedding now resolves them consistently. - Example app Gradle files updated to current Flutter 3.44 conventions (removed
resolutionStrategy.forcehacks and manual dependency overrides).
0.1.0 — Initial Release (Phase 1 — iOS AI Agent Calling) #
Added #
VoiceOS.initialize()— SDK bootstrap withVoiceOSConfigVoiceOS.login()/VoiceOS.logout()— token-based authenticationVoiceOS.callAI()— outgoing AI agent calls withCallConfigVoiceOS.endCall()— graceful call terminationVoiceOS.mute()/VoiceOS.unmute()— microphone controlVoiceOS.enableSpeaker()/VoiceOS.disableSpeaker()— audio routingVoiceOS.registerForVoIPPush()— PushKit VoIP push token registrationVoiceOS.instance.events— typed broadcast event stream- Native iOS:
VoiceCallKitManager— CallKit incoming/outgoing call UI - Native iOS:
VoicePushKitManager— PushKit VoIP push reception - Native iOS:
VoiceAudioEngine— AVAudioEngine duplex audio (16 kHz capture / 22.05 kHz playback) - Native iOS:
VoiceAudioSessionManager— AVAudioSession VoiceChat mode + interruption handling - Native iOS:
VoiceSignalingClient— URLSession WebSocket with exponential back-off reconnection - Native iOS:
VoiceSessionManager— central coordinator orchestrating all native components - Native iOS:
VoiceSecureStorage— Keychain-backed credential storage - Android stub returning
PLATFORM_NOT_SUPPORTED(Phase 2) - Example app with home screen (call button) and active call screen