package Ġfeature a . android . simulator Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġfeature a . android .* Ċ import Ġfeature a . runtime . import Ċ import Ġfeature a . android . Feature a Fragment Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ class ĠLogs Fragment Ġ: ĠFeature a Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfile Watcher Thread : ĠFile Watcher Thread Ġby Ġlazy Ġ{ Ġimport () Ġ} ĊĠĠĠ Ġprivate Ġval Ġmain Activity : ĠFeature a Activity Ġby Ġlazy Ġ{ Ġimport ( MainActivity Proxy ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Logs Layout ĊĠĠĠ Ġprivate Ġval Ġlog Files Ġ= Ġmutable ListOf < File >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġfile Watcher Thread . init ( require Activity (). logs Dir , Ġ" log ") Ġ{ Ġnew Files Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Files . contains All ( new Files ) Ġ&& Ġnew Files . contains All ( log Files )) Ġreturn @ init ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Files . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Files . addAll ( new Files ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . sort ( log Files , Ġlast Modified File Comparator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . logs ListView . adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġinflater . inflate < Fragment Logs Layout >( R . layout . fragment _ logs , Ġcontainer ) ĊĠĠĠĠĠĠĠ Ġbinding . logs ListView . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġbinding . logs ListView . adapter Ġ= ĠFiles Adapter ( log Files ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener Ġ= Ġobject Ġ: ĠItem ClickListener < File > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick Item ( log File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen LogFile ( log File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Adapter Data Observer ( object Ġ: ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Removed ( index : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog File Ġ= Ġlog Files [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . logs ListView . adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . logs ListView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġsetup Item Touch Helper ( require Activity (), Ġbinding . logs ListView ) ĊĠĠĠĠĠĠĠ ĠsetUp Animation Decorator Helper ( binding . logs ListView ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmain Activity . support ActionBar ?. title Ġ= Ġ" Logs " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* internals */ ĊĊĠĠĠ Ġprivate Ġfun ĠFiles Adapter . update Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . logs ListView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Message . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . logs ListView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen LogFile ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ logs Fragment _ to _ view Log Fragment , Ġbundle Of (" filePath " Ġto Ġfile . absolute Path )) ĊĠĠĠ Ġ} Ċ Ċ } Ċ