From 617dddf3d874750a5378ac4b2c8c5090c6d0a007 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 16 Aug 2026 21:06:40 +0200 Subject: [PATCH] fix(app): Konversationsmodus auch im Hintergrund, wenn Background-Wake an MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diagnose aus dem App-State-Trail (Bridge-Log): nach jeder gesprochenen Antwort rief die App endConversation(bg || !converse) — der bg-Term (AppState != active) erzwang "zurueck aufs Wake-Word", sobald die App im Hintergrund war. Das war vor dem Background-Wake-Feature Absicht (kein Multi-Turn im Hintergrund). Jetzt, mit aktivem Background-Wake, killt genau das den Konversationsmodus im Hintergrund — im Vordergrund lief er weiter (daher "kommt beim Vorholen wieder"). converse kam korrekt als true vom Brain (keine Marker, Default true); die App warf es im Hintergrund weg. Fix: bg erzwingt "armed" nur noch, wenn Background-Wake AUS ist (isBgWakeEnabled()). Bei aktivem Background-Wake bleibt der Konversationsmodus auch im Hintergrund offen — der User hat das Zuhoeren ja bewusst eingeschaltet. Vordergrund-Verhalten unveraendert. Co-Authored-By: Claude Opus 4.8 --- android/src/screens/ChatScreen.tsx | 6 +++++- android/src/services/wakeword.ts | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index 26ed250..a51e6c1 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -1690,8 +1690,12 @@ const ChatScreen: React.FC = () => { // Im Hintergrund gibt's kein Multi-Turn → direkt re-armen (skipPassive). // converse=false (Skill-/Einzelantwort, z.B. 'was laeuft gerade') → auch // ohne 30s: vorlesen + direkt zurueck aufs Wake-Word. + // Im Hintergrund normalerweise direkt re-armen (kein Multi-Turn) — ABER + // wenn Hintergrund-Wake bewusst AN ist, will der User auch im Hintergrund + // ein Gespraech fuehren, also den Konversationsmodus offen halten. const bg = AppState.currentState !== 'active'; - wakeWordService.endConversation(bg || !converseRef.current).catch(() => {}); + const bgForcesArmed = bg && !wakeWordService.isBgWakeEnabled(); + wakeWordService.endConversation(bgForcesArmed || !converseRef.current).catch(() => {}); }); return () => unsubPlayback(); }, []); diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index 6e924c4..6961d1f 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -348,6 +348,12 @@ class WakeWordService { console.log('[WakeWord] Hintergrund-Wake = %s', enabled); } + /** Ist Hintergrund-Wake an? Steuert u.a. ob der Konversationsmodus auch im + * Hintergrund weiterlaeuft (sonst: im Hintergrund direkt zurueck aufs Wake-Word). */ + isBgWakeEnabled(): boolean { + return this.bgWakeEnabled; + } + /** App im Vordergrund: Detections wieder freigeben, plus kurzer Cooldown * als Schutz gegen den AudioFocus-/AudioTrack-Spike direkt nach dem Resume. * 1s statt 3s — 3s hat sich "traege" angefuehlt (Trigger direkt nach dem