/* Ċ Ġ* ĠProject : Ġmy Budget - mobile - android Ċ Ġ* ĠFile : ĠSearch Mov ements Fragment . kt Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġfat ta zz o Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 8 ĠG ian luc a ĠF att ar si . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġit . ital ian coders . my budget . fragment . movement . search Ċ Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . so three . sl iding up panel . Sl iding Up Panel Layout Ċ import Ġit . ital ian coders . my budget . Config Ċ import Ġit . ital ian coders . my budget . R Ċ import Ġit . ital ian coders . my budget . adapter . base . recycler . End less RecyclerView Scroll Listener Ċ import Ġit . ital ian coders . my budget . adapter . movement . Day Movement Ċ import Ġit . ital ian coders . my budget . adapter . movement . Movement Adapter Ċ import Ġit . ital ian coders . my budget . fragment . Base Fragment Ċ import Ġit . ital ian coders . my budget . fragment . main . Main Fragment _ Ċ import Ġit . ital ian coders . my budget . fragment . movement . search . params . Search Mov ements Params Ċ import Ġit . ital ian coders . my budget . fragment . movement . search . params . Search Mov ements Params View Ċ import Ġit . ital ian coders . my budget . rest . RestClient Ċ import Ġit . ital ian coders . my budget . rest . model . Movement Ċ import Ġit . ital ian coders . my budget . rest . model . Page Ċ import Ġit . ital ian coders . my budget . utils . Data Utils Ċ import Ġit . ital ian coders . my budget . utils . Fragment Utils Ċ import Ġit . ital ian coders . my budget . utils . Utils Ċ import Ġorg . android annotations . annotations .* Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġfat ta zz o Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ< p /> Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġdate : Ġ 0 6 / 0 4 / 1 8 Ċ Ġ*/ Ċ @ E Fragment ( R . layout . fragment _ search _ mov ements ) Ċ open Ġclass ĠSearch Mov ements Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Fragment Arg ĊĠĠĠ Ġ@ InstanceState ĊĠĠĠ Ġvar Ġparams : ĠSearch Mov ements Params ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ ViewById ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġsl iding Layout : ĠSl iding Up Panel Layout ĊĊĠĠĠ Ġ@ ViewById ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġresult Mov ements RecyclerView : ĠRecyclerView ĊĊĠĠĠ Ġ@ ViewById ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġsearch Mov ements Params View : ĠSearch Mov ements Params View ĊĊĠĠĠ Ġ@ ViewById ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġno Result TV : ĠTextView ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ InstanceState ĊĠĠĠ Ġinternal Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ InstanceState ĊĠĠĠ Ġinternal Ġvar Ġtotal Items Ġ= Ġ- 1 ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ InstanceState ĊĠĠĠ Ġinternal Ġvar Ġall Mov ements Ġ= Ġarray ListOf < Movement >() ĊĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠMovement Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġend less RecyclerView Scroll Listener : ĠEnd less RecyclerView Scroll Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ After Views ĊĠĠĠ Ġinternal Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Mov ements Params View . search Mov ements Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Config . current Account Need Reload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMovement Adapter ( all Mov ements ) ĊĠĠĠĠĠĠĠ Ġadapter ?. server List Size Ġ= Ġtotal Items ĊĠĠĠĠĠĠĠ Ġresult Mov ements RecyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġresult Mov ements RecyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĊĠĠĠĠĠĠĠ Ġend less RecyclerView Scroll Listener Ġ= Ġobject Ġ: ĠEnd less RecyclerView Scroll Listener ( linear LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( page : ĠInt , Ġtotal Items Count : ĠInt , Ġview : ĠRecyclerView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Mov ements () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Mov ements RecyclerView . add On Scroll Listener ( end less RecyclerView Scroll Listener ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġnull Ġ&& Ġall Mov ements . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Mov ements () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsl iding Layout . panel State Ġ= ĠSl iding Up Panel Layout . Panel State . EXP AN DED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Mov ements () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Search Ġ= Ġif Ġ( params !!. user Ġ== Ġnull ) Ġnull Ġelse Ġparams !!. user !!. username ĊĠĠĠĠĠĠĠ ĠRest Client . movement Service . search ( Config . current Account ?. id . or Empty (), Ġparams !!. anno , Ġparams !!. me se , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams !!. g ior no , Ġuser Search , Ġparams !!. category ?. id , ĠcurrentPage ). enqueue ( object Ġ: ĠCallback < Page < Movement >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Page < Movement >>, Ġresponse : ĠResponse < Page < Movement >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Items Ġ= Ġresponse . body ()?. total Elements ?. toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. server List Size Ġ= Ġtotal Items ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Size Ġ= Ġadapter ?. item Count Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Day Ġ= Ġif Ġ( all Mov ements . isEmpty ()) Ġ"" Ġelse ĠData Utils . format LocalDate ( all Mov ements . last (). executed At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Mov ements . addAll ( build Movement ( current Day , Ġresponse . body ()?. content . or Empty ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. post ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Inserted ( cur Size , Ġall Mov ements . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Result TV . visibility Ġ= Ġif Ġ( all Mov ements . isEmpty ()) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġresources . getString ( R . string . error _ try _ later ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Page < Movement >> ?, Ġt : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġresources . getString ( R . string . error _ try _ later ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Movement ( current Day Param : ĠString , Ġoriginal Movement : ĠList < Movement >): ĠList < Movement > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Day Ġ= Ġcurrent Day Param ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmov ements Ġ= Ġmutable ListOf < Movement >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Movement . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmov Day Ġ= ĠData Utils . format LocalDate ( it . executed At Ġ?: Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Day Ġ!= Ġmov Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day Ġ= Ġmov Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Movement Ġ= ĠDay Movement ( it . executed At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmov ements . add ( day Movement ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmov ements . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmov ements . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Click ĊĠĠĠ Ġinternal Ġfun Ġsearch Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( search Mov ements Params View . search Mov ements Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . hide Soft Keyboard ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġsearch Mov ements Params View . search Mov ements Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsl iding Layout . panel State Ġ= ĠSl iding Up Panel Layout . Panel State . COLL AP SED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend less RecyclerView Scroll Listener ?. reset State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. server List Size Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Mov ements () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġall Mov ements . clear () ĊĠĠĠĠĠĠĠ Ġtotal Items Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġback Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠFragment Utils . replace ( activity , ĠMain Fragment _. builder (). build (), Ġanimation Type Ġ= ĠFragment Utils . Animation Type . SL IDE ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ActionBar Title Res Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . string . fragment _ title _ search _ mov ements ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Fragment Option Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. clear () ĊĠĠĠ Ġ} Ċ }