package Ġd angg ai . app . presentation . ui . main Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġd angg ai . app . presentation . R Ċ import Ġd angg ai . app . presentation . core . Binding Activity Ċ import Ġd angg ai . app . presentation . databinding . Activity Main Binding Ċ import Ġd angg ai . app . presentation . util . log Ċ import Ġd angg ai . domain . util . Constant Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġio . reactivex . subjects . Subject Ċ import Ġkotlin . system . exit Process Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠBinding Activity < Activity Main Binding , ĠMain ViewModel >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ PARAM _ COOKIE Ġ= Ġ" ARG _ PARAM _ COOKIE " ĊĊĠĠĠĠĠĠĠ Ġfun ĠstartActivity ( act : ĠActivity , Ġcookie : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġit n Ġ= ĠIntent ( act , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit n . putExtra ( ARG _ PARAM _ COOKIE , Ġcookie ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact . startActivity ( it n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrx Back Button Action : ĠSubject < Long > Ġ= ĠBehavior Subject . create Default ( 0 L ). to Serialized () ĊĊĠĠĠ Ġprivate Ġval Ġm VM : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġ@ Layout Res ĊĠĠĠ Ġoverride Ġfun Ġget Layout Res Id () Ġ= ĠR . layout . activity _ main ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . vm Ġ= Ġm VM ĊĊĠĠĠĠĠĠĠ Ġinit Fragment () ĊĠĠĠĠĠĠĠ Ġinit Rx () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . e () ĊĠĠĠĠĠĠĠ Ġif Ġ( intent . has Extra ( ARG _ PARAM _ COOKIE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Fragment Ġ= Ġsupport FragmentManager . fragments [ 0 ] Ġas ĠMain Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fragment . on New Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġrx Back Button Action . onNext ( System . currentTimeMillis ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment , ĠMain Fragment . newInstance (), ĠMain Fragment . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Rx () Ġ{ ĊĠĠĠĠĠĠĠ Ġrx Back Button Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( 2 , 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 1 ] Ġ- Ġit [ 0 ] Ġ< ĠConstant . BACK _ BUTTON _ INTERVAL Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠToast . makeText ( application Context , ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . msg _ toast _ back _ button ), ĠToast . LENGTH _ SHORT ). show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add Disposable Ext () ĊĠĠĠ Ġ} Ċ Ċ }