diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index b9c53e1..bfd8886 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -346,19 +346,34 @@ class WakeWordService { * Ohne: zurueck zu 'off'. */ async endConversation(): Promise { - if (this.state !== 'conversing') return; + if (this.state !== 'conversing') { + // Nicht in conversing — typ. nach App-Resume bevor Streaming endete. + // Trotzdem loggen damit wir's im Diagnostic sehen. + import('./logger').then(m => m.reportAppDebug('wake.end', + `endConversation called but state=${this.state} → noop`)).catch(()=>{}); + return; + } + import('./logger').then(m => m.reportAppDebug('wake.end', + `endConversation called, nativeReady=${this.nativeReady}, calling OpenWakeWord.start()`)).catch(()=>{}); if (this.nativeReady && OpenWakeWord) { try { await OpenWakeWord.start(); console.log('[WakeWord] Konversation zu Ende — zurueck zu armed'); + import('./logger').then(m => m.reportAppDebug('wake.end', + `OpenWakeWord.start() OK → state=armed, keyword=${this.keyword}`)).catch(()=>{}); ToastAndroid.show(`Lausche wieder auf "${KEYWORD_LABELS[this.keyword]}"`, ToastAndroid.SHORT); this.setState('armed'); return; - } catch (err) { + } catch (err: any) { console.warn('[WakeWord] re-arm fehlgeschlagen:', err); + import('./logger').then(m => m.reportAppDebug('wake.end', + `OpenWakeWord.start() FAIL: ${err?.message || err} → state=off`, + )).catch(()=>{}); } } console.log('[WakeWord] Konversation zu Ende — Ohr aus'); + import('./logger').then(m => m.reportAppDebug('wake.end', + `fallback: nativeReady=${this.nativeReady} → state=off`)).catch(()=>{}); ToastAndroid.show('Mikro aus', ToastAndroid.SHORT); this.setState('off'); }