package Ġcom . nik ola . jak sh ic . d agger . search Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . nik ola . jak sh ic . d agger . D agger App Ċ import Ġcom . nik ola . jak sh ic . d agger . R Ċ import Ġcom . nik ola . jak sh ic . d agger . bookmark . Player Adapter Ċ import Ġcom . nik ola . jak sh ic . d agger . common . D agger ViewModel Factory Ċ import Ġcom . nik ola . jak sh ic . d agger . common . Status Ċ import Ġcom . nik ola . jak sh ic . d agger . common . has Network Connection Ċ import Ġcom . nik ola . jak sh ic . d agger . common . toast Ċ import Ġcom . nik ola . jak sh ic . d agger . profile . Profile Activity Ċ import Ġkotlinx . android . synt hetic . main . activity _ search .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġfactory : ĠD agger ViewModel Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠSearch ViewModel ĊĠĠĠ Ġprivate Ġvar Ġhas Focus Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġquery : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch View : ĠSearch View ĊĠĠĠ Ġprivate Ġval ĠSTATE _ QUERY Ġ= Ġ" query " ĊĠĠĠ Ġprivate Ġval ĠSTATE _ FOCUS Ġ= Ġ" focus " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( application Ġas ĠD agger App ). app Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( R . anim . fade _ in , ĠR . anim . fade _ out ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ search ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , Ġfactory )[ Search ViewModel :: class . java ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Focus Ġ= ĠsavedInstanceState . getBoolean ( STATE _ FOCUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= ĠsavedInstanceState . getString ( STATE _ QUERY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġsearch Ġhistory Ġwhen Ġactivity Ġstarts ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll Queries () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer Adapter Ġ= ĠPlayer Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠProfile Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" account _ id ", Ġit . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhistory Adapter Ġ= ĠHistory Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ( it , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrec View Players . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġrec View Players . addItem Decoration ( Divider Item Decoration ( this , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġrec View Players . adapter Ġ= Ġplayer Adapter ĊĠĠĠĠĠĠĠ Ġrec View Players . set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠ Ġrec View History . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġrec View History . adapter Ġ= Ġhistory Adapter ĊĠĠĠĠĠĠĠ Ġrec View History . set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . player List . observe ( this , ĠObserver ( player Adapter :: addData )) ĊĠĠĠĠĠĠĠ ĠviewModel . history List . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec View History . visibility Ġ= Ġif Ġ( has Focus ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Adapter . addData ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . status . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . LOADING Ġ-> ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ search , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Item Ġ= Ġmenu ?. find Item ( R . id . menu _ search _ search ) ĊĠĠĠĠĠĠĠ Ġsearch Item ?. expand Action View () ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= Ġsearch Item ?. action View Ġas ĠSearch View ĊĊĠĠĠĠĠĠĠ Ġsearch View . query Hint Ġ= ĠgetString ( R . string . search _ players ) ĊĠĠĠĠĠĠĠ Ġsearch View . set Query ( query , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ// ĠFix Ġfor Ġlandscape Ġmode , Ġedit Text Ġis Ġnot Ġset Ġto Ġmatch _ parent ĊĠĠĠĠĠĠĠ Ġsearch View . maxWidth Ġ= ĠInt . MAX _ VALUE ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġsearch View . request Focus () Ġelse Ġsearch View . clear Focus () ĊĊĠĠĠĠĠĠĠ Ġsearch Item . setOn Action Expand Listener ( object Ġ: ĠMenuItem . On Action Expand Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon MenuItem Action Expand ( item : ĠMenuItem ?) Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon MenuItem Action Collapse ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Pending Transition ( R . anim . fade _ in , ĠR . anim . fade _ out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . has Focus Ġ= Ġhas Focus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec View History . visibility Ġ= Ġif Ġ( has Focus ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Network Connection ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Players ( query !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . error _ network _ connection )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Query ( Search History ( query !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . clear Focus () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Queries ( new Text !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . putString ( STATE _ QUERY , Ġsearch View . query . toString ()) ĊĠĠĠĠĠĠĠ Ġout State . put Boolean ( STATE _ FOCUS , Ġsearch View . has Focus ()) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} Ċ }