/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 7 , ĠInstitute Ġof ĠCy ber net ics Ġat ĠT all inn ĠUniversity Ġof ĠTechnology Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġee . ioc . phon . android . speak . demo Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . speech . Recognizer Intent Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . Toast Ċ import Ġee . ioc . phon . android . speak . R Ċ import Ġee . ioc . phon . android . speak . adapter . RecyclerView Adapter Ċ import Ġee . ioc . phon . android . speak . model . Caller Info Ċ import Ġee . ioc . phon . android . speak . utils . Utils Ċ import Ġee . ioc . phon . android . speak . view . Abstract Speech Input View Listener Ċ import Ġee . ioc . phon . android . speak . view . Speech Input View Ċ import Ġee . ioc . phon . android . speech utils . editor . Ut ter ance Rew riter Ċ import Ġee . ioc . phon . android . speech utils . utils . Intent Utils Ċ import Ġee . ioc . phon . android . speech utils . utils . Json Utils Ċ import Ġorg . json . JSONException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠSimple Ġchat Ġstyle Ġinterface , Ġwhich Ġdemonstrates Ġhow Ġto Ġuse ĠSpeech Input View . Ċ Ġ* Ċ Ġ* ĠTODO : Ġeach Ġlist Ġitem Ġshould Ġhave Ġat Ġleast Ġ 3 Ġcomponents : Ġspo ken Ġinput , Ċ Ġ* Ġpretty - print ed Ġoutput Ġ( JSON , Ġor Ġparts Ġof Ġit ), Ġformal Ġoutput Ġ( JSON Ġthat Ġcan Ġbe Ġexecuted ) Ċ Ġ*/ Ċ class ĠChat Demo Activity Ġ: ĠActivity (), ĠRecyclerView Adapter . ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Matches Ġ= ĠArrayList < String >() ĊĠĠĠ Ġprivate Ġval Ġcontext Ph rases Map Ġ= ĠHashMap < String , ĠList < String >>() ĊĠĠĠ Ġprivate Ġval Ġcontext Suggest ed Responses Map Ġ= ĠHashMap < String , ĠList < String >>() ĊĊĠĠĠ Ġprivate Ġvar Ġm Prefs : ĠSharedPreferences ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Res : ĠResources ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsuggested RecyclerView Adapter : ĠRecyclerView Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġspeech Input View Listener : ĠSpeech Input View . Speech Input View Listener ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġobject Ġ: ĠAbstract Speech Input View Listener () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Rew rit ers : ĠIterable < Ut ter ance Rew riter >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Combo Change ( language : ĠString , Ġservice : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew rit ers Ġ= ĠUtils . gen Rew rit ers ( m Prefs , Ġm Res , ĠarrayOf (" Base ", Ġ" Commands "), Ġlanguage , Ġservice , Ġcomponent Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Final Result ( results : ĠList < String >, Ġbundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresults [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// String Ġresult Pp Ġ= Ġ" voice Ġcommand Ġ( the Ġraw Ġutter ance )\ n \ n " Ġ+ Ġresult ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Matches . add ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ListView ( m Matches ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġstore Ġthe ĠJSON Ġalso Ġin Ġthe Ġlist , Ġso Ġthat Ġit Ġcan Ġbe Ġre executed Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Utils . launch If Intent ( this @ Chat Demo Activity , Ġm Rew rit ers , Ġresult ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġlist Ġof Ġsuggested Ġresponses Ġbased Ġon Ġthe Ġspo ken Ġtext , Ġand Ġshows Ġthe Ġlist Ġto Ġthe Ġuser Ġif Ġresponses Ġwere Ġreturned . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCurrently Ġdoes Ġnot Ġsupport Ġthe Ġability Ġto Ġadd Ġresponses Ġfrom Ġusers Ġthat Ġdon 't Ġexist Ġin Ġthe Ġcollections Ġyet . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggested Responses Ġ= Ġget Suggest ed Responses ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! suggest ed Responses . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpresent Ġlist Ġof Ġsuggested Ġresponses Ġto Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate RecyclerView ( suggest ed Responses ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Matches . add ("* ĠERROR : Ġ$ errorCode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ListView ( m Matches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Listening () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstop T ts (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLook Ġup Ġthe Ġappropriate Ġsuggested Ġresponse Ġbased Ġon Ġthe Ġphrase Ġtext Ġprovided . ĠWill Ġreturn Ġan Ġempty Ġarray Ġlist Ġif Ġno Ġresponses Ġcould Ġbe Ġfound . ĊĠĠĠĠ Ġ* ĠCurrently Ġdoes Ġnot Ġadd Ġphrases Ġand Ġresponses Ġentered Ġby Ġusers Ġif Ġthe Ġphrases Ġdon 't Ġexist Ġin Ġthe Ġcollections Ġyet , Ġsince Ġadditional Ġprocessing ĊĠĠĠĠ Ġ* Ġwould Ġbe Ġrequired Ġto Ġdetermine Ġwhat Ġcontext Ġthe Ġunknown Ġphrase Ġis Ġand Ġmap Ġthe Ġuser 's Ġlast Ġresponse Ġto Ġthe Ġlast Ġphrase Ġtext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Suggest ed Responses ( phrase Text : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsuggested Responses : ĠList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġcontext Ph rases Map . iterator () ĊĠĠĠĠĠĠĠ Ġvar Ġspeaker Context Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( phrase Text . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value . contains ( phrase Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeaker Context Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( speaker Context . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuggested Responses Ġ= Ġcontext Suggest ed Responses Map [ speaker Context ] Ġ?: ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuggested Responses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ chat _ demo ) ĊĊĠĠĠĠĠĠĠ Ġm Prefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġm Res Ġ= Ġresources ĊĊĠĠĠĠĠĠĠ Ġval Ġs iv Ġ= ĠfindViewById < Speech Input View >( R . id . v Speech Input View ) ĊĠĠĠĠĠĠĠ Ġval Ġcaller Info Ġ= ĠCall er Info ( create Extras (), Ġcalling Activity ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġreview Ġthis ĊĠĠĠĠĠĠĠ Ġs iv . init ( R . array . keys Activity , Ġcaller Info , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġs iv . set Listener ( speech Input View Listener , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġinitialize Context Ph rases And Responses () ĊĊĠĠĠĠĠĠĠ Ġ( findViewById ( R . id . list _ matches ) Ġas ĠListView ). on ItemClickListener Ġ= ĠAdapter View . On ItemClickListener Ġ{ Ġparent , Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġparent . adapter . getItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( entry . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠfindViewById < RecyclerView >( R . id . suggest ed Re ponse s ). layout Manager Ġ= ĠLinearLayoutManager ( this , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsuggested RecyclerView Adapter Ġ= ĠRecyclerView Adapter ( ArrayList < String >()) ĊĠĠĠĠĠĠĠ Ġsuggested RecyclerView Adapter !!. set ClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġupdate RecyclerView ( ArrayList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġa Ġsuggested Ġresponse Ġis Ġclicked , Ġadd Ġit Ġto Ġthe Ġlist Ġof Ġother Ġspo ken Ġwords Ġand Ġprevious Ġresponses . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( view : ĠView , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuggested RecyclerView Adapter . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggested Text Response Clicked Ġ= Ġit ?. getItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( suggest ed Text Response Clicked Ġis ĠString Ġ&& Ġsuggested Text Response Clicked . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġsuggested Ġresponse Ġthat Ġwas Ġselected Ġto Ġthe Ġlist Ġof Ġspo ken Ġwords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Matches . add ( suggest ed Text Response Clicked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ListView ( m Matches ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġlist Ġof Ġsuggested Ġresponses Ġonce Ġa Ġresponse Ġhas Ġbeen Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate RecyclerView ( ArrayList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠstartActivity ( intent As Json : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Utils . startActivity If Available ( this , ĠJson Utils . create Intent ( intent As Json )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( e . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ListView ( list : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ ĠfindViewById < ListView >( R . id . list _ matches ). adapter Ġ= ĠArray Adapter ( this , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġlist ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate RecyclerView ( list : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUpdating Ġthe Ġlist Ġin Ġthe ĠRecyclerView Adapter Ġinstead Ġof Ġre creating Ġthe Ġadapter Ġfrom Ġscratch . ĠThis Ġavoids Ġhaving Ġto Ġre - add Ġthings Ġto Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġadapter , Ġlike Ġthe Ġclick Ġlistener ĊĠĠĠĠĠĠĠ Ġsuggested RecyclerView Adapter ?. set M Dataset ( list ) ĊĠĠĠĠĠĠĠ ĠfindViewById < RecyclerView >( R . id . suggest ed Re ponse s ). adapter Ġ= Ġsuggested RecyclerView Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoast ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Extras (): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( Recognizer Intent . EXTRA _ MAX _ RESULTS , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġphrases Ġand Ġsuggested Ġresponses Ġbased Ġon Ġcertain Ġcontexts . Ġcontext Ph rases Map Ġcontains Ġphrases Ġthat Ġmap Ġto Ġcertain Ġcontexts , Ġand ĊĠĠĠĠ Ġ* Ġcontext Suggest ed Responses Map Ġcontains Ġsuggested Ġresponses Ġto Ġthe Ġstatements Ġfor Ġthe Ġparticular Ġcontexts Ġthat Ġthe Ġprior Ġphrases Ġwere Ġfor . ĊĠĠĠĠ Ġ* ĠIde ally , Ġthis Ġinitialization Ġwould Ġbe Ġlocated Ġin Ġa Ġservice Ġthat Ġcan Ġbe Ġre - used Ġby Ġother Ġcomponents , Ġand Ġeven Ġbe Ġlocated Ġin Ġan ĠAPI Ġthat ĊĠĠĠĠ Ġ* Ġdifferent Ġkinds Ġof Ġapplications Ġor Ġsoftware Ġprograms Ġcould Ġaccess . ĠIn Ġaddition , Ġlarger Ġsets Ġof Ġdata , Ġlike Ġdictionaries , Ġwould Ġbe Ġused Ġto Ġmap ĊĠĠĠĠ Ġ* Ġcontexts Ġwith Ġphrases Ġand Ġsuggested Ġresponses . ĠAlso , Ġother Ġlanguages Ġbes ides ĠEnglish Ġwould Ġbe Ġsupported . ĠFurthermore , Ġthe Ġfunctionality Ġshould ĊĠĠĠĠ Ġ* Ġadapt Ġto Ġthe Ġongoing Ġuse Ġof Ġphrases Ġand Ġsuggested Ġresponses Ġthat Ġhaven 't Ġbeen Ġused Ġyet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinitialize Context Ph rases And Responses () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ph rases Map [" gre et ings "] Ġ= ĠArrays . asList (" hello ", Ġ" hi ") ĊĠĠĠĠĠĠĠ Ġcontext Ph rases Map [" introduction s "] Ġ= ĠArrays . asList (" how Ġare Ġyou ", Ġ" how 's Ġit Ġgoing ", Ġ" what 's Ġup ") ĊĠĠĠĠĠĠĠ Ġcontext Ph rases Map [" food Ġservice "] Ġ= ĠArrays . asList (" what Ġwould Ġyou Ġlike Ġto Ġorder ") ĊĊĠĠĠĠĠĠĠ Ġcontext Suggest ed Responses Map [" gre et ings "] Ġ= ĠArrays . asList (" hello ", Ġ" hi ") ĊĠĠĠĠĠĠĠ Ġcontext Suggest ed Responses Map [" introduction s "] Ġ= ĠArrays . asList (" good , Ġyou ", Ġ" bad ", Ġ" ok ay ", Ġ" do ing Ġgood , Ġyou ", Ġ" i 'm Ġokay ", Ġ" i 'm Ġdoing Ġwell , Ġhow Ġabout Ġyou ") ĊĠĠĠĠĠĠĠ Ġcontext Suggest ed Responses Map [" food Ġservice "] Ġ= ĠArrays . asList (" can Ġi Ġplease Ġget ") ĊĠĠĠ Ġ} Ċ }