diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index 7781445..b079bf0 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -1263,11 +1263,30 @@ const ChatScreen: React.FC = () => { return () => { unsubUpdate(); clearTimeout(timer); }; }, []); - // Gespraechsmodus: Nach TTS-Wiedergabe automatisch Aufnahme starten + // Gespraechsmodus: Nach TTS-Wiedergabe weiter im Multi-Turn (Conversation- + // Window) oder zurueck zu armed (Wake-Word lauscht wieder)? + // + // Foreground → resume() oeffnet das Mikro fuer N Sekunden Follow-Up + // (natuerlicher Dialog moeglich ohne erneutes "Computer") + // Background → endConversation() — Wake-Word direkt wieder armed. + // + // Grund: der setTimeout(800ms) in resume() wird im Doze stark verzoegert + // (siehe Wake-Detect-Bug von 0.1.7.0). Das hat zwei nervige Folgen: + // 1) Wake-Word ist solange "tot" — User kann ARIA nicht mehr triggern + // bis er die App vorholt + // 2) Wenn er die App dann vorholt, oeffnet der verspaetete Timer das + // Mikro — sieht aus wie ein Phantom-Wake-Word-Trigger + // Background = User nutzt das Handy anderweitig, das Multi-Turn-Konzept + // ist da eh nicht nuetzlich. Direkt re-armen ist robust und erwartungs- + // konform. useEffect(() => { const unsubPlayback = audioService.onPlaybackFinished(() => { - if (wakeWordService.isActive()) { + if (!wakeWordService.isActive()) return; + if (AppState.currentState === 'active') { wakeWordService.resume(); + } else { + console.log('[Chat] TTS fertig im Background → endConversation (kein Multi-Turn)'); + wakeWordService.endConversation().catch(() => {}); } }); return () => unsubPlayback();