package Ġpap yr us . alerts Ċ Ċ import Ġandroid . os .* Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġpap yr us . core . P ap yr us Ċ import Ġpap yr us . util . Animations Ċ import Ġpap yr us . util . P ap yr us Executor Ċ import Ġpap yr us . util . Touch Block er Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠDialog Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdialog Root Layout : ĠViewGroup Ġby Ġlazy Ġ{ ĠfindViewById < ViewGroup >( R . id . dialog _ root ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġdialog Content Layout : ĠViewGroup Ġby Ġlazy Ġ{ ĠfindViewById < ViewGroup >( R . id . dialog _ content ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġresult Receiver : ĠResult Receiver ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġview Binder : ĠView Binder ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġparse Extras ( extras : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Receiver Ġ= Ġextras . get Parcelable (" result Receiver ") ĊĠĠĠĠĠĠĠ Ġview Binder Ġ= Ġ( extras . get Serializable (" view Binder ") Ġas ĠClass < View Binder >). newInstance () ĊĠĠĠĠĠĠĠ Ġextras . get Parcelable < Result Receiver >(" handle ") ?. let Ġ{ Ġinstance Receiver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Receiver . send ( 0 , ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable (" handle ", ĠInternal Handle ( this @ Dialog Activity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġthis . intent . extras ?. also Ġ{ Ġextras Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Extras ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ContentView ( intent . getInt Extra (" parent Layout ID ", ĠR . layout . activity _ dialog )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Pending Transition ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dialog Root Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnim ations . fadeIn ( this . dialog Root Layout ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfinish () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binder ?. let Ġ{ Ġview Binder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . initialize View ( dialog Content Layout ) Ġ{ Ġcancel able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Block er . un Block ( dialog Root Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTouch Block er . block ( dialog Root Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġcontent View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binder . bind ( intent . get Bundle Extra (" configuration "), Ġsend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getInt Array Extra (" click Targets ") ?. forEach Ġ{ Ġbutton ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent View . findViewById < View >( button ID ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( button ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsend : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Back Press Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Receiver ?. send ( it , Ġview Binder ?. resolve Extras ( Bundle ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġintent ?. getInt Extra (" cancel ID ", Ġ- 1 )?. take If Ġ{ Ġit Ġ!= Ġ- 1 Ġ} ?. let Ġ{ Ġcancel ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( cancel ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Back Press ( after : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAnim ations . fadeOut ( dialog Root Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Pending Transition ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDialog Builder ( val Ġbundle : ĠBundle ) Ġ{ ĊĠĠĠ Ġval Ġdialog Callbacks : ĠDialog Callbacks Ġ= ĠDialog Callbacks () ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( Bundle ()) ĊĊĠĠĠ Ġfun Ġconfiguration ( configur ator : ĠBundle . () Ġ-> ĠUnit ): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . put Bundle (" configuration ", ĠBundle (). apply ( configur ator )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġview Binder ( view Binder : ĠK Class < out ĠView Binder >): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . put Serializable (" view Binder ", Ġview Binder . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhost Layout (@ Layout Res Ġlayout ID : ĠInt ): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . put Int (" parent Layout ID ", Ġlayout ID ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcallback ( id : ĠInt , Ġtype : ĠInt Ġ= ĠACTION _ GENERIC , Ġaction : Ġ( result : ĠBundle ) Ġ-> ĠUnit ): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . add Callback ( id , Ġtype , Ġaction ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcallback ( action : Ġ( button ID : ĠInt , Ġresult : ĠBundle ) Ġ-> ĠUnit ): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . add Fallback ( action ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle ( handle : ĠHandle ): ĠDialog Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable (" handle ", Ġhandle ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Callbacks . cancel ID ?. let Ġ{ Ġbundle . put Int (" cancel ID ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġbundle . put IntArray (" click Targets ", Ġdialog Callbacks . button IDs ) ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable (" result Receiver ", Ġobject Ġ: ĠResult Receiver ( P ap yr us Executor . ui Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Result ( result Code : ĠInt , Ġresult Data : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Callbacks . on Result ( result Code , Ġresult Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠP ap yr us . navigate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put All ( bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( Dialog Activity :: class ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠInternal Handle ( instance : ĠDialog Activity ) Ġ: ĠResult Receiver ( Handler ( Looper . get Main Looper ())) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinstance Ref : ĠWeak Reference < Dialog Activity > Ġ= ĠWeak Reference ( instance ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive Result ( result Code : ĠInt , Ġresult Data : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance Ref . get ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠACTION _ CANCEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠHandle Ġ: ĠResult Receiver ( Handler ()) Ġ{ ĊĠĠĠ Ġvar Ġhandle : ĠResult Receiver ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive Result ( result Code : ĠInt , Ġresult Data : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Ġ= Ġresult Data . get Parcelable < Parcelable >(" handle ") Ġas ĠResult Receiver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle ?. send ( ACTION _ CANCEL , ĠBundle ()) ĊĠĠĠ Ġ} Ċ }