package Ġeu . ke vin . accounts . account session Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġeu . ke vin . accounts . K evin Accounts Plugin Ċ import Ġeu . ke vin . accounts . R Ċ import Ġeu . ke vin . accounts . account session . entities . Account Session Configuration Ċ import Ġeu . ke vin . accounts . databinding . Activity Account Link ing Binding Ċ import Ġeu . ke vin . common . architecture . Base Fragment Activity Ċ import Ġeu . ke vin . common . architecture . routing . Global Router Ċ import Ġeu . ke vin . common . extensions . set Fragment Result Ċ import Ġeu . ke vin . core . entities . Session Result Ċ import Ġeu . ke vin . core . plugin . K evin Ċ import Ġeu . ke vin . core . plugin . K evin Exception Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠAccount Session Activity Ġ: ĠBase Fragment Activity (), ĠAccount Session Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġaccount Session Configuration : ĠAccount Session Configuration ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaccount Link ing Session : ĠAccount Session ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Account Link ing Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! K evin Accounts Plugin . is Configured ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠKevin Exception (" Accounts Ġplugin Ġis Ġnot Ġconfigured !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Theme ( K evin . get Theme ()) ĊĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Account Link ing Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġaccount Session Configuration Ġ= Ġintent ?. extras ?. get Parcelable ( Account Session Contract . CONFIGURATION _ KEY ) ĊĊĠĠĠĠĠĠĠ Ġaccount Link ing Session Ġ= ĠAccount Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Session Configuration !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstart Listening For Route Requests () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġaccount Link ing Session . begin Flow ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( support FragmentManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( back Stack Entry Count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Exit Confirmation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Exit Confirmation () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . dialog _ exit _ confirmation _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . dialog _ exit _ confirmation _ accounts _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . yes ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Activity Result ( Session Result . Canceled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . no ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreturn Activity Result ( result : ĠSession Result <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , ĠIntent (). putExtra ( Account Session Contract . RESULT _ KEY , Ġresult )) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Listening For Route Requests () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Router . add On Push Fragment Listener ( this ) Ġ{ Ġfragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Fragment ( R . id . main _ router _ container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Router . add On Push Modal Fragment Listener ( this ) Ġ{ Ġmodal Fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodal Fragment . show ( support FragmentManager , Ġmodal Fragment :: class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Router . add On Pop Current Fragment Listener ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Router . add On Return Fragment Result Listener ( this ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . set Fragment Result ( result . contract , Ġresult . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAccount Link ing Session Listener ĊĊĠĠĠ Ġoverride Ġfun Ġon Session Finished ( session Result : ĠSession Result < Account Session Result >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Activity Result ( session Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loading ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loading View . visibility Ġ= Ġif Ġ( show ) ĠVIS IBLE Ġelse ĠG ONE ĊĠĠĠ Ġ} Ċ }