package Ġbr . com . cri st iano . mar vel hero es . ui Ċ Ċ import Ġandroid . app . Search Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġbr . com . cri st iano . mar vel hero es . adapters . Characters Adapter Ċ import Ġbr . com . cri st iano . mar vel hero es . http . apim odel . Error API Ċ import Ġbr . com . cri st iano . mar vel hero es . http . apim odel . Response API Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . I Listener Result Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . to aster Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 4 . view . MenuItem Compat Ċ import Ġandroid . support . v 7 . widget . Search View Ċ import Ġandroid . view . View Ċ import Ġbr . com . cri st iano . mar vel hero es . R Ċ import Ġbr . com . cri st iano . mar vel hero es . control . App Control Ċ import Ġbr . com . cri st iano . mar vel hero es . http . apim odel . Character Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . Pagination Scroll Listener Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . Wait Dialog Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . Wait Dialog . close Wait Dialog Ċ import Ġbr . com . cri st iano . mar vel hero es . utils . Wait Dialog . show Wait Dialog Ċ import Ġkotlinx . android . synt hetic . main . activity _ characters .* ĊĊ Ċ class ĠChar acters Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp : ĠApp Control ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcharacters Adapter : ĠChar acters Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlinear LayoutManager : ĠLinearLayoutManager ĊĊĠĠĠ Ġprivate Ġval ĠP _ TAG Ġ= Ġ" Characters Activity " ĊĠĠĠ Ġprivate Ġvar Ġlist Ġ= ĠArrayList < Character >() ĊĠĠĠ Ġprivate Ġvar Ġinitial Page : Int Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġword : String Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Last Page Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtotal It ens Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ characters ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Home As Up Indicator ( R . drawable . ic _ mar vel ) ĊĊĠĠĠĠĠĠĠ Ġapp Ġ= ĠApp Control ( this ) ĊĠĠĠĠĠĠĠ Ġvoid _ state . visibility Ġ= ĠView . VISIBLE ĊĊĊĠĠĠĠĠĠĠ Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( this @ Characters Activity ) ĊĠĠĠĠĠĠĠ Ġre cycler _ view . setLayout Manager ( linear LayoutManager ) ĊĠĠĠĠĠĠĠ Ġcharacters Adapter Ġ= ĠChar acters Adapter ( this @ Characters Activity , list Ġ) ĊĠĠĠĠĠĠĠ Ġre cycler _ view . adapter Ġ= Ġcharacters Adapter ĊĠĠĠĠĠĠĠ Ġre cycler _ view . add On Scroll Listener ( object : Pagination Scroll Listener ( linear LayoutManager ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload More Items () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Characters Activity . isLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ+= Ġ 1 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentPage Ġ< Ġtotal It ens ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetList ( word , currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetTotal Page Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Characters Activity . list . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Last Page (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Characters Activity . is Last Page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisLoading (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Characters Activity . isLoading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetList ( word : String , star Page : Int ){ ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . word Ġ= Ġword ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . isLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġshow Wait Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġapp . get Characters ( word , star Page , object : I Listener Result < Response API > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( ref Id : ĠInt , Ġresult : ĠResponse API ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Wait Dialog ( object : Wait Dialog . I Listener Execute < Boolean >{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Executed ( result : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Characters Activity . isLoading Ġ= Ġ! result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Characters Activity . list . addAll ( result . data . results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Characters Activity . total It ens Ġ= Ġresult . data . total ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoid _ state . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoid _ state . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( ref Id : ĠInt , Ġerror : ĠError API ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( P _ TAG , error . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto aster ( error . getMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoid _ state . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main _ menu , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Item Ġ= Ġmenu . find Item ( R . id . mn _ bar _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= ĠMenuItem Compat . getAction View ( search Item ) Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object : Search View . On Query Text Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Search ( query ? :" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Close Listener ( object Ġ: Search View . On Close Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClose (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Search ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Manager Ġ= Ġget System Service ( Context . SEARCH _ SERVICE ) Ġas ĠSearch Manager ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( this @ Characters Activity , ĠChar acters Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġsearch View . set Search able Info ( search Manager . get Search able Info ( component Name )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Search ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist . clear () ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . isLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . is Last Page Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . total It ens Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis @ Characters Activity . currentPage Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ ĠgetList ( query , 0 ) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ