package Ġli . ru oshi . next day . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 4 . view . Pager Adapter Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġli . ru oshi . next day . R Ċ import Ġli . ru oshi . next day . models . Daily Info Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Array BlockingQueue Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġru osh ili Ġon Ġ 1 / 1 0 / 1 6 . Ċ Ġ*/ Ċ class ĠDays Adapter ( val Ġcontext : ĠContext ) Ġ: ĠP ager Adapter () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Days Adapter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Destroyed View Hold ers : ĠQueue < Weak Reference < Day ViewHolder >> Ġ= ĠArray BlockingQueue ( 8 ) ĊĊĠĠĠ Ġprivate Ġval Ġm View Hold ers Cache : ĠMutable List < Day ViewHolder > Ġ= ĠArrayList ( 8 ) ĊĊĠĠĠ Ġoverride Ġfun Ġis View From Object ( view : ĠView ?, Ġobj : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( obj Ġis ĠDay ViewHolder ) Ġ&& Ġview Ġ== Ġobj . view ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġdestroy Item ( container : ĠViewGroup ?, Ġposition : ĠInt , Ġobj : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" destroy Item , Ġpos : Ġ$ position , Ġobj : Ġ${ obj ?. java Class }") ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġis ĠDay ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer ?. remove View ( obj . view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Destroyed View Hold ers . offer ( Weak Reference ( obj )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" destroy Item , Ġend , Ġm Destroyed View Hold ers Ġsize : Ġ${ m Destroyed View Hold ers . size }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcreate View Times Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġfun Ġcreate ViewHolder ( container : ĠViewGroup ?): ĠDay ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" create ViewHolder , Ġtimes : Ġ${ ++ create View Times }") ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ); ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġinflater . inflate ( R . layout . day _ view , Ġcontainer , Ġfalse ); ĊĠĠĠĠĠĠĠ Ġreturn ĠDay ViewHolder ( context , Ġlayout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinstantiate Item ( container : ĠViewGroup ?, Ġposition : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" instantiate Item , Ġpos : Ġ$ position ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġ åĬłè½½ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠviewHolder : ĠDay ViewHolder ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! m Destroyed View Hold ers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġm Destroyed View Hold ers . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r . get () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" weak Ġref Ġhas Ġno Ġvalue ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= Ġr . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" m Destroyed View Hold ers Ġis Ġempty , Ġcreate Ġnew Ġview Ġholder ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= Ġcreate ViewHolder ( container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewHolder . setData ( list ! ![ position ]) ĊĊĠĠĠĠĠĠĠ Ġcontainer ?. addView ( view Holder . view ) ĊĊĠĠĠĠĠĠĠ Ġupdate Cache ( view Holder ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Cache ( view Holder : ĠDay ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m View Hold ers Cache . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( m View Hold ers Cache . size Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m View Hold ers Cache [ i ] Ġ== ĠviewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm View Hold ers Cache . add ( view Holder ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" added Ġa Ġnew Ġview Ġholder Ġto Ġcache , Ġcurrent Ġcache Ġsize : Ġ${ m View Hold ers Cache . size }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ViewHolder At ( pos : ĠInt ): ĠDay ViewHolder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ< Ġ 0 Ġ|| Ġpos Ġ>= Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġlist ! ![ pos ] ĊĊĠĠĠĠĠĠĠ Ġreturn Ġm View Hold ers Cache . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getData () Ġ== Ġdata ĊĠĠĠĠĠĠĠ Ġ}. first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist !!. count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlist : ĠList < Daily Info >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset Daily Info ( list : ĠList < Daily Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . list Ġ= Ġlist ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} Ċ }