package Ġcom . fr pc . android . ui Ċ Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . fr pc . android . R Ċ import Ġcom . fr pc . android . databinding . Activity Log cat Binding Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Emitter Ċ import Ġio . reactivex . Observable On Subscribe Ċ import Ġio . reactivex . Observer Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util .* Ċ Ċ class ĠLog cat Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Log cat Binding ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding = ĠActivity Log cat Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġinit Toolbar () ĊĠĠĠĠĠĠĠ Ġread Log ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Log ( flush : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlst : ĠHashSet < String > Ġ= ĠLinked HashSet () ĊĠĠĠĠĠĠĠ Ġlst . add (" log cat ") ĊĠĠĠĠĠĠĠ Ġlst . add ("- d ") ĊĠĠĠĠĠĠĠ Ġlst . add ("- v ") ĊĠĠĠĠĠĠĠ Ġlst . add (" time ") ĊĠĠĠĠĠĠĠ Ġlst . add ("- s ") ĊĠĠĠĠĠĠĠ Ġlst . add (" Go Log , com . car . fr pc _ android . Fr pc Service ") ĊĠĠĠĠĠĠĠ ĠObservable . create Ġ{ Ġemitter : ĠObservable Emitter < String ?> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flush ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlst 2 : ĠHashSet < String > Ġ= ĠLinked HashSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlst 2 . add (" log cat ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlst 2 . add ("- c ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec ( lst 2 . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec ( lst . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= ĠInputStreamReader ( process . inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader (` in `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( buffered Reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( line !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` in `. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Reader . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĠĠĠĠĠĠĠ Ġ}. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠObserver < String ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Log cat . append ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Log cat . append ("\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sv Log cat . full Scroll ( View . FOCUS _ DOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ Ġv : ĠView ? Ġ-> Ġfinish () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ log cat , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . copy Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Clipboard ( binding . tv Log cat . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . copy Success , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Log ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Log cat . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Clipboard ( content : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmb Ġ= Ġget System Service ( CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclip Data Ġ= ĠClip Data . new Plain Text (" log cat ", Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmb . set Primary Clip ( clip Data ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }