package Ġcom . rav ik or adi ya . live adapter Ċ Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . databinding . Observable List Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ class ĠObservable List Callback < H Ġ: ĠRecyclerView . ViewHolder >( ĊĠĠĠ Ġadapter : ĠRecyclerView . Adapter < H >, ĊĠĠĠ Ġprivate Ġvar Ġno Data Callback : Ġ(( is Data Empty : ĠBoolean ) Ġ-> ĠUnit )? Ċ ) Ġ: ĠObservable List . On List Changed Callback < Observable List < Any >>() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġreference Ġ= ĠWeak Reference ( adapter ) ĊĠĠĠ Ġprivate Ġval Ġadapter : ĠRecyclerView . Adapter < H >? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Thread . currentThread () Ġ== ĠL ooper . get Main Looper (). thread ) Ġreturn Ġreference . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġthrow ĠIllegalStateException (" You Ġmust Ġmodify Ġthe ĠObservable List Ġon Ġthe Ġmain Ġthread ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset No Data Callback ( no Data Callback : Ġ(( is Data Empty : ĠBoolean ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . no Data Callback Ġ= Ġno Data Callback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChanged ( list : ĠObservable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġno Data Callback ?. invoke ( list . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Range Changed ( list : ĠObservable List < Any >, Ġfrom : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Changed ( from , Ġcount ) ĊĠĠĠĠĠĠĠ Ġno Data Callback ?. invoke ( list . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Range Inserted ( list : ĠObservable List < Any >, Ġfrom : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Inserted ( from , Ġcount ) ĊĠĠĠĠĠĠĠ Ġno Data Callback ?. invoke ( list . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Range Removed ( list : ĠObservable List < Any >, Ġfrom : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Removed ( from , Ġcount ) ĊĠĠĠĠĠĠĠ Ġno Data Callback ?. invoke ( list . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Range Moved ( list : ĠObservable List < Any >, Ġfrom : ĠInt , Ġto : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġit . notify Item Moved ( from Ġ+ Ġi , Ġto Ġ+ Ġi ) Ġ} ĊĠĠĠĠĠĠĠ Ġno Data Callback ?. invoke ( list . isEmpty ()) ĊĠĠĠ Ġ} Ċ } Ċ