package Ġapps . j iz zu . simp let odo . activity Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġapps . j iz zu . simp let odo . R Ċ import Ġapps . j iz zu . simp let odo . data . Message Ċ import Ġapps . j iz zu . simp let odo . utils . Bot Response Ċ import Ġapps . j iz zu . simp let odo . utils . Constants . OPEN _ GOOGLE Ċ import Ġapps . j iz zu . simp let odo . utils . Constants . OPEN _ SEARCH Ċ import Ġapps . j iz zu . simp let odo . utils . Constants . RECEIVE _ ID Ċ import Ġapps . j iz zu . simp let odo . utils . Constants . SEND _ ID Ċ import Ġapps . j iz zu . simp let odo . utils . Time Ċ import Ġkotlinx . android . synt hetic . main . activity _ chat bot .* Ċ import Ġkotlinx . coroutines .* ĊĊ Ċ class ĠMainActivity Chat bot : ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" MainActivity Chat bot " ĊĊĠĠĠ Ġ// You Ġcan Ġignore Ġthis Ġmessage List Ġif Ġyou 're Ġcoming Ġfrom Ġthe Ġtutorial , ĊĠĠĠ Ġ// Ġit Ġwas Ġused Ġonly Ġfor Ġmy Ġpersonal Ġdebugging ĊĠĠĠ Ġvar Ġmessages List Ġ= Ġmutable ListOf < Message >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠMessaging Adapter ĊĠĠĠ Ġprivate Ġval Ġbot List Ġ= ĠlistOf (" Ka iz ad ", Ġ" N ae em ") ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ chat bot ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView () ĊĊĠĠĠĠĠĠĠ Ġclick Events () ĊĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= Ġ( 0 .. 1 ). random () ĊĠĠĠĠĠĠĠ Ġcustom Bot Message (" Hello ! ĠToday Ġyou 're Ġspeaking Ġwith Ġ${ bot List [ random ]}, Ġhow Ġmay ĠI Ġhelp ?") ĊĠĠĠĠĠĠĠ Ġcustom Bot Message (" Write Ġ' Add ', Ġ' Update ',' Delete ',' Extra Ġfeatures ' Ġto Ġknow Ġmore Ġabout Ġthis Ġapp ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġclick Events () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Send Ġa Ġmessage ĊĠĠĠĠĠĠĠ Ġbtn _ send . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Scroll Ġback Ġto Ġcorrect Ġposition Ġwhen Ġuser Ġclicks Ġon Ġtext Ġview ĊĠĠĠĠĠĠĠ Ġet _ message . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ messages . scrollTo Position ( adapter . item Count Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre cyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMessaging Adapter () ĊĠĠĠĠĠĠĠ Ġrv _ messages . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġrv _ messages . layout Manager Ġ= ĠLinearLayoutManager ( application Context ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// In Ġcase Ġthere Ġare Ġmessages , Ġscroll Ġto Ġbottom Ġwhen Ġre - opening Ġapp ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ messages . scrollTo Position ( adapter . item Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsendMessage () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġet _ message . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠTime . time Stamp () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( message . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Adds Ġit Ġto Ġour Ġlocal Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages List . add ( Message ( message , ĠS END _ ID , Ġtime Stamp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ message . setText ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . insert Message ( Message ( message , ĠS END _ ID , Ġtime Stamp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ messages . scrollTo Position ( adapter . item Count Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Response ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbot Response ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠTime . time Stamp () ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Fake Ġresponse Ġdelay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Gets Ġthe Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠBot Response . basic Responses ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Adds Ġit Ġto Ġour Ġlocal Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages List . add ( Message ( response , ĠRE CE IVE _ ID , Ġtime Stamp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Inser ts Ġour Ġmessage Ġinto Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . insert Message ( Message ( response , ĠRE CE IVE _ ID , Ġtime Stamp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Scroll s Ġus Ġto Ġthe Ġposition Ġof Ġthe Ġlatest Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ messages . scrollTo Position ( adapter . item Count Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Starts ĠGoogle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOPEN _ GOOGLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite . data Ġ= ĠUri . parse (" https :// www . google . com /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( site ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOPEN _ SEARCH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Term : ĠString ? Ġ= Ġmessage . substring After Last (" search ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite . data Ġ= ĠUri . parse (" https :// www . google . com / search ?& q =$ search Term ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( site ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcustom Bot Message ( message : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠTime . time Stamp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages List . add ( Message ( message , ĠRE CE IVE _ ID , Ġtime Stamp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . insert Message ( Message ( message , ĠRE CE IVE _ ID , Ġtime Stamp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ messages . scrollTo Position ( adapter . item Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }