package Ġcom . github . ste ph env in ou ze . kont inu ous speech re cognizer . activities Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . speech . Speech Recognizer Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġcom . github . ste ph env in ou ze . core . interfaces . Recognition Callback Ċ import Ġcom . github . ste ph env in ou ze . core . managers . Kont inu ous Recognition Manager Ċ import Ġcom . github . ste ph env in ou ze . core . models . Recognition Status Ċ import Ġcom . github . ste ph env in ou ze . kont inu ous speech re cognizer . R Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠRecognition Callback Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPut Ġany Ġkeyword Ġthat Ġwill Ġtrigger Ġthe Ġspeech Ġrecognition ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACT IV ATION _ KEYWORD Ġ= Ġ" OK Ġtest " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREC ORD _ AUDIO _ REQUEST _ CODE Ġ= Ġ 1 0 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrecognition Manager : ĠKont inu ous Recognition Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠKont inu ous Recognition Manager ( this , Ġactivation Keyword Ġ= ĠACT IV ATION _ KEYWORD , Ġshould Mute Ġ= Ġtrue , Ġcallback Ġ= Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ ĠprogressBar . max Ġ= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġrecognition Manager . create Recognizer () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . RECORD _ AUDIO ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Manifest . permission . RECORD _ AUDIO ), ĠREC ORD _ AUDIO _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecognition Manager . destroy Recognizer ( false ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . RECORD _ AUDIO ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Recognition () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Recognition () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Recognition () Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar . isIn determinate Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġrecognition Manager . start Recognition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Recognition () Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar . isIn determinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġrecognition Manager . stop Recognition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Error Text ( errorCode : ĠInt ): ĠString Ġ= Ġwhen Ġ( errorCode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ AUDIO Ġ-> Ġ" Audio Ġrecording Ġerror " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ CLIENT Ġ-> Ġ" Client Ġside Ġerror " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ IN SUFF IC IENT _ PERMISSION S Ġ-> Ġ" Ins ufficient Ġpermissions " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ NETWORK Ġ-> Ġ" Network Ġerror " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ NETWORK _ TIMEOUT Ġ-> Ġ" Network Ġtimeout " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ NO _ MATCH Ġ-> Ġ" No Ġmatch " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ RE CO GN IZER _ BUSY Ġ-> Ġ" Recognition Service Ġbusy " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ SERVER Ġ-> Ġ" Error Ġfrom Ġserver " ĊĠĠĠĠĠĠĠ ĠSpeech Recognizer . ERROR _ SPE E CH _ TIMEOUT Ġ-> Ġ" No Ġspeech Ġinput " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Did n 't Ġunderstand , Ġplease Ġtry Ġagain ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Beginning Of Speech () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on Beginning Of Speech ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Buffer Received ( buffer : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition ", Ġ" on Buffer Received : Ġ$ buffer ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon EndOf Speech () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on EndOf Speech ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġget Error Text ( errorCode ) ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," onError : Ġ$ errorMessage ") ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠerrorMessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Event ( eventType : ĠInt , Ġparams : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on Event ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Ready For Speech ( params : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on Ready For Speech ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon R ms Changed ( rms dB : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġr ms dB . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( status : ĠRecognition Status ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecognition Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on Prepared : ĠSuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" Recognition Ġready " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecognition Status . UN AVAILABLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Recognition ", Ġ" on Prepared : ĠFailure Ġor Ġunavailable ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Speech ĠRe cognizer Ġunavailable ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Your Ġdevice Ġdoes Ġnot Ġsupport ĠSpeech ĠRecognition . ĠSorry !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Keyword Detected () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," keyword Ġdetected Ġ!!! ") ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" Keyword Ġdetected " Ċĉ ĉ recognition Manager . destroy Recognizer ( false ); Ċĉ ĉ recognition Manager . create Recognizer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Partial Results ( results : ĠList < String >) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Results ( results : ĠList < String >, Ġscores : ĠFloat Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġresults . join ToString ( separator Ġ= Ġ"\ n ") ĊĠĠĠĠĠĠĠ ĠLog . i (" Recognition "," on Results Ġ: Ġ$ text ") ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREC ORD _ AUDIO _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Recognition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ