diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index 18ee4e2..17ed71e 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -242,13 +242,20 @@ class WakeWordService { `keyword=${this.keyword} state=${this.state} barge=${this.bargeListening}`)).catch(()=>{}); this.lastTriggerAt = now; if (this.nativeReady && OpenWakeWord) { - try { await OpenWakeWord.stop(); } catch {} + try { + await OpenWakeWord.stop(); + import('./logger').then(m => m.reportAppDebug('wake.detect', 'native stop ok')).catch(()=>{}); + } catch (e: any) { + import('./logger').then(m => m.reportAppDebug('wake.detect', `native stop FAIL ${e?.message}`)).catch(()=>{}); + } } this.bargeListening = false; // Wenn wir bereits in 'conversing' sind und der Trigger waehrend ARIAs TTS // kam (Barge-In via Wake-Word), feuern wir einen separaten Callback damit // ChatScreen das TTS abbrechen + neue Aufnahme starten kann. Sonst normal. if (this.state === 'conversing') { + import('./logger').then(m => m.reportAppDebug('wake.detect', + `barge path: cbs=${this.bargeCallbacks.length}`)).catch(()=>{}); this.bargeCallbacks.forEach(cb => { try { cb(); } catch (e) { console.warn('[WakeWord] barge cb err:', e); } }); @@ -256,7 +263,11 @@ class WakeWordService { return; } this.setState('conversing'); + import('./logger').then(m => m.reportAppDebug('wake.detect', + `state→conversing, wakeCallbacks.length=${this.wakeCallbacks.length}, scheduling 200ms timeout`)).catch(()=>{}); setTimeout(() => { + import('./logger').then(m => m.reportAppDebug('wake.detect', + `timeout fired, state=${this.state}, cbs=${this.wakeCallbacks.length}`)).catch(()=>{}); if (this.state === 'conversing') { this.wakeCallbacks.forEach(cb => cb()); }