!7 cmodule VoiceRecognitionStatus { transient S modeOff = "off", modeListenAllTheTime = "listen", modeListenOnNoise = "listen on noise"; transient LS userSelectedModes = ll( modeOff, modeListenAllTheTime, modeListenOnNoise); S userSelectedMode; transient long listeningUntil; // optional transient bool listening; start { dm_watchFieldAndNow userSelectedMode(r { if (eqic(userSelectedMode, modeOff)) { // turn off Listen On Noise & actual recognizer dm_call(dm_listenOnNoiseModuleOpt(), 'setEnabled, false); dm_stopListening(); } else if (eqic(userSelectedMode, modeListenOnNoise)) { dm_call(dm_listenOnNoiseModule(), 'setEnabled, true); dm_startGoogleSpeechRecognition(); } else if (eqic(userSelectedMode, modeListenAllTheTime)) { dm_call(dm_listenOnNoiseModuleOpt(), 'setEnabled, false); dm_startGoogleSpeechRecognition(); } }); } visualize { ButtonGroup buttons = jRadioButtons(userSelectedModes); selectRadioButton(buttons, indexOfIC(userSelectedModes, userSelectedMode)); onRadioButtonChange(buttons, voidfunc(int i) { setField(userSelectedMode := _get(userSelectedModes, i)); }); ret jfullcenter(vstackWithSpacing(buttonsInGroup(buttons))); } }