package Ġcom . t pt z . leo Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . L ru Cache Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġcom . t pt z . leo . Le o Adapter . On Refresh Listener Ċ Ċ var Ġleo Adapter : ĠLe o Adapter ? Ġ= Ġnull Ċ val Ġcached Views Ġ= ĠL ru Cache < String , ĠWeak Reference < View >>( 8 ) Ċ Ċ class ĠLe o Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġinit ( adapter : ĠLe o Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleo Adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġhandle Loading ( ĊĠĠĠ Ġview Group : ĠViewGroup Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= Ġ" loading _ view " ĊĠĠĠ Ġvar Ġloading View Ġ= Ġcached Views [ key ]?. get () ĊĠĠĠ Ġif Ġ( loading View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading View Ġ= Ġleo Adapter ?. loading View () ĊĠĠĠĠĠĠĠ Ġcached Views . put ( key , ĠWeak Reference ( loading View )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġloading View ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Le o ( view Group , Ġit ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġhandle Empty ( ĊĠĠĠ Ġview Group : ĠViewGroup , ĊĠĠĠ Ġtips : ĠString ? Ġ= Ġ"", ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġres Id : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġlistener : ĠOn Refresh Listener ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠStringBuilder (" empty _ view "). run Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! tips . isNull Or Blank ()) Ġappend ("_ $ tips ") ĊĠĠĠĠĠĠĠ Ġif Ġ( res Id Ġ!= Ġ- 1 ) Ġappend ("_ $ res Id ") ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull ) Ġappend ("_ ${ listener . hashCode () }") ĊĠĠĠĠĠĠĠ ĠtoString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġempty View Ġ= Ġcached Views [ key ]?. get () ĊĠĠĠ Ġif Ġ( empty View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty View Ġ= Ġleo Adapter ?. empty View ( tips , Ġres Id , Ġlistener ) ĊĠĠĠĠĠĠĠ Ġcached Views . put ( key , ĠWeak Reference ( empty View )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġempty View ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Le o ( view Group , Ġit ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġhandle Offline ( ĊĠĠĠ Ġview Group : ĠViewGroup , ĊĠĠĠ Ġlistener : ĠOn Refresh Listener ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠStringBuilder (" offline _ view "). run Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull ) Ġappend ("_ ${ listener . hashCode () }") ĊĠĠĠĠĠĠĠ ĠtoString () ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġoffline View Ġ= Ġcached Views [ key ]?. get () ĊĠĠĠ Ġif Ġ( offline View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoffline View Ġ= Ġleo Adapter ?. offline View ( listener ) ĊĠĠĠĠĠĠĠ Ġcached Views . put ( key , ĠWeak Reference ( offline View )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoffline View ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Le o ( view Group , Ġit ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġhandle Le o ( view Group : ĠViewGroup , Ġview : ĠView ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġview Group . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview Group . parent Ġas ĠViewGroup ĊĠĠĠĠĠĠĠ Ġcached Views . snapshot (). values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get ()?. let Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparent . addView ( view , Ġview Group . layout Params ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" Le o ", Ġ" Unable Ġto Ġadd Ġthe Ġab normal Ġlayout Ġto Ġview Ġhierarchy .", Ġe ) ĊĠĠĠ Ġ} Ċ }