What problem does it solve? Coordinating Android TextToSpeech playback is error-prone: callbacks arrive on background threads, utteranceIds get lost, and onDone may never fire after cancellation. This Skill provides tested patterns for wiring UtteranceProgressListener so you can reliably react when speech starts, finishes, or fails. ## Core Features & Use Cases - Typed per-utterance callbacks: Correlate onStart, onDone, and onError with specific speak() calls using unique utteranceIds and a callback map. - Coroutine and Flow integration: Wrap speech in suspendCancellableCoroutine for sequential speak-and-await flows, or expose events via SharedFlow for Compose/ViewModel state updates. - Error handling and cancellation: Map TTS error codes to readable messages, cancel individual utterances on API 33+, and clean up listeners to avoid memory leaks. - Use Case: Build a guided breathing exercise app where the engine speaks "inhale 4 counts", waits for completion, delays, then speaks the next phase, all sequenced with coroutines. ## Quick Start Ask the AI to implement an Android TTS engine with UtteranceProgressListener that exposes typed onStart, onDone, and onError callbacks per utteranceId and supports a suspend speakAndAwait function.