package Ġcom . pl uto . plugins . logger . internal . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . pl uto . plugin . utilities . extensions . hide Keyboard Ċ import Ġcom . pl uto . plugin . utilities . extensions . linear LayoutManager Ċ import Ġcom . pl uto . plugin . utilities . extensions . show More Options Ċ import Ġcom . pl uto . plugin . utilities . extensions . toast Ċ import Ġcom . pl uto . plugin . utilities . list . Base Adapter Ċ import Ġcom . pl uto . plugin . utilities . list . Custom Item Decorator Ċ import Ġcom . pl uto . plugin . utilities . list . Diff Aware Adapter Ċ import Ġcom . pl uto . plugin . utilities . list . Diff Aware Holder Ċ import Ġcom . pl uto . plugin . utilities . list . ListItem Ċ import Ġcom . pl uto . plugin . utilities . set De bounce ClickListener Ċ import Ġcom . pl uto . plugin . utilities . sharing . Share able Ċ import Ġcom . pl uto . plugin . utilities . sharing . lazy Content Sh arer Ċ import Ġcom . pl uto . plugin . utilities . view Binding Ċ import Ġcom . pl uto . plugins . logger . R Ċ import Ġcom . pl uto . plugins . logger . databinding . Pl uto Logger Fragment List Binding Ċ import Ġcom . pl uto . plugins . logger . internal . Log Data Ċ import Ġcom . pl uto . plugins . logger . internal . Logs Repo Ċ import Ġcom . pl uto . plugins . logger . internal . Logs ViewModel Ċ import Ġcom . pl uto . plugins . logger . internal . Session Ċ import Ġcom . pl uto . plugins . logger . internal . ui . list . Logs Adapter Ċ Ċ internal Ġclass ĠList Fragment Ġ: ĠFragment ( R . layout . pl uto _ logger ___ fragment _ list ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Pl uto Logger Fragment List Binding :: bind ) ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠLogs ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġlogs Adapter : ĠBase Adapter Ġby Ġlazy Ġ{ ĠLogs Adapter ( on ActionListener ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġcontent Sh arer Ġby Ġlazy Content Sh arer () ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . log List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġlogs Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Custom Item Decorator ( require Context ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . search . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ?. toString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession . logger Search Text Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogs Adapter . list Ġ= Ġfiltered Logs ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log List . linear LayoutManager ()?. scrollTo Position With Offset ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . search . setText ( Session . logger Search Text ) ĊĠĠĠĠĠĠĠ ĠviewModel . logs . remove Observer ( logs Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . logs . observe ( view Lifecycle Owner , Ġlogs Observer ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . serialized Logs . remove Observer ( serialized Logs Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . serialized Logs . observe ( view Lifecycle Owner , Ġserialized Logs Observer ) ĊĊĠĠĠĠĠĠĠ Ġbinding . close . set De bounce ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . options . set De bounce ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. show More Options ( it , ĠR . menu . pl uto _ logger ___ menu _ more _ options ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . clear Ġ-> ĠLogs Repo . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . share All Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . logs . value ?. size Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . serialize Logs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. toast (" No Ġlogs Ġto Ġshare ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfiltered Logs ( search : ĠString ): ĠList < Log Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= Ġempty List < Log Data >() ĊĠĠĠĠĠĠĠ ĠviewModel . logs . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġit . filter Ġ{ Ġlog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . tag . contains ( search , Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . message . contains ( search , Ġtrue ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . stack Trace Element . fileName . contains ( search , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . no Item Text . text Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . pl uto _ logger ___ no _ search _ result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . pl uto _ logger ___ no _ logs _ text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . no Item Text . visibility Ġ= Ġif Ġ( list . isEmpty ()) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlogs Observer Ġ= ĠObserver < List < Log Data >> Ġ{ ĊĠĠĠĠĠĠĠ Ġlogs Adapter . list Ġ= Ġfiltered Logs ( binding . search . text . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġserialized Logs Observer Ġ= ĠObserver < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Sh arer . share ( Share able ( title Ġ= Ġ" Share Ġall Ġlogs ", Ġcontent Ġ= Ġit , ĠfileName Ġ= Ġ" Log ĠTrace Ġfrom ĠPl uto ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġon ActionListener Ġ= Ġobject Ġ: ĠDiff Aware Adapter . On ActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action ( action : ĠString , Ġdata : ĠListItem , Ġholder : ĠDiff Aware Holder ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġis ĠLog Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . hide Keyboard ( view Lifecycle Owner . lifecycle Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Current Log ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . open Details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ