diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index b64402b..a6b5133 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -1802,9 +1802,20 @@ const ChatScreen: React.FC = () => { // dem STT-Text gefuellte Bubble NICHT loeschen, sonst verschwindet die // Sprachnachricht obwohl ARIA schon an der Antwort arbeitet. if (ev.audioRequestId) { - setMessages(prev => prev.filter(m => - !(m.audioRequestId === ev.audioRequestId - && m.text.includes('Spracheingabe wird verarbeitet')))); + // 'no-response' heisst: die Spracherkennung hat GAR NICHT geantwortet + // (Worker neu gestartet / nicht erreichbar) — die Aufnahme ist also + // wirklich verloren gegangen, Du hast nicht etwa nichts gesagt. Das + // zeigen wir an, statt die Bubble stillschweigend zu entfernen; sonst + // wirkt es, als waere die Nachricht nie gesendet worden. + const lost = String(ev.reason || '').includes('no-response'); + setMessages(prev => lost + ? prev.map(m => (m.audioRequestId === ev.audioRequestId + && m.text.includes('Spracheingabe wird verarbeitet')) + ? { ...m, text: '⚠️ Aufnahme ging verloren — die Spracherkennung war gerade nicht erreichbar. Bitte nochmal aufnehmen.' } + : m) + : prev.filter(m => + !(m.audioRequestId === ev.audioRequestId + && m.text.includes('Spracheingabe wird verarbeitet')))); } // Passiv-Lauschen: leeres Endpoint (no-speech / Silero-Musik / speaker_ // mismatch). NICHT sofort beenden — solange die Stille-Toleranz ab