package Ġdev . apes . p aw m ance . ui . logs Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . dev force codes . p aw m ance . databinding . Log Item Binding Ċ import Ġdev . apes . p aw m ance . data . logs . Logs Ċ import Ġdev . apes . p aw m ance . ui . logs . Logs Adapter . Logs ViewHolder Ċ import Ġdev . apes . p aw m ance . utils . Time Utils Ċ Ċ class ĠLogs Adapter Ġ: ĊĠ ĠList Adapter < Logs , ĠLogs ViewHolder >( object Ġ: ĠDiff Util . Item Callback < Logs >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠLogs , Ġnew Item : ĠLogs ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠLogs , Ġnew Item : ĠLogs ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} ĊĠ Ġ}) Ġ{ ĊĊĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠ Ġprivate Ġlateinit Ġvar Ġlogs ListView : ĠRecyclerView ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġregister Adapter Data Observer ( object Ġ: ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Inserted ( position Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Item Range Inserted ( position Start , Ġitem Count ) ĊĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll To () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġscroll To () Ġ{ ĊĠĠĠ Ġlogs ListView . scrollTo Position ( item Count Ġ- Ġ 1 ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Attached To RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠ Ġsuper . on Attached To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġthis . logs ListView Ġ= Ġre cyclerView ĊĠ Ġ} ĊĊĠ Ġclass ĠLogs ViewHolder ( ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠLog Item Binding ĊĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠ Ġfun Ġbind Logs ( logs : ĠLogs ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdate Ġ= Ġformat Date ( logs . timestamp ) ĊĊĠĠĠĠĠ Ġval Ġstack Trace Ġ= Ġ"$ date Ġ[ ${ logs . tag }] Ġ${ logs . stack }" ĊĠĠĠĠĠ Ġbinding . log . text Ġ= Ġstack Trace ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Date ( timestamp : ĠLong ): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn ĠTime Utils . convert Date ( timestamp ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠLogs ViewHolder Ġ{ ĊĠĠĠ Ġreturn ĠLogs ViewHolder ( ĊĠĠĠĠĠ ĠLog Item Binding . inflate ( ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠLogs ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġholder . bind Logs ( getItem ( position )) ĊĠ Ġ} Ċ }