diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index 01b6308..463814f 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -1537,9 +1537,15 @@ const ChatScreen: React.FC = () => { } else { // Kein Speech im Window → Konversation beenden console.log('[Chat] STT-Endpoint ohne Text (reason=%s) — endConversation', ev.reason); - // Placeholder-Bubble wieder weg + // NUR den noch UNAUFGELOESTEN Platzhalter entfernen. Nach manuellem Stop + // klappt oft ein zweites, LEERES stream_end-Endpoint nach (das Audio war + // schon vom echten Endpoint transkribiert) — das darf die bereits mit + // 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)); + setMessages(prev => prev.filter(m => + !(m.audioRequestId === ev.audioRequestId + && m.text.includes('Spracheingabe wird verarbeitet')))); } // Bei Passive-Listen + speaker_mismatch oder no-speech: erneut passiv // lauschen (Timer im wakeword-service laeuft weiter, regelt das Ende).