/* Ċ Ġ* ĠCreated Ġby Ġel ie k Ġon Ġ 9 / 2 6 / 2 0 1 9 Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġel ie kar ou z . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcom . feedback tree . flow . ui . views . mod als Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Style Res Ċ import Ġcom . feedback tree . flow . ui . core . mod als . Modal Ċ import Ġcom . feedback tree . flow . ui . views . core . View Registry Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠDialog Registry Ġprivate Ġconstructor ( ĊĠĠĠ Ġvar Ġbindings : ĠMap < K Class < out ĠModal >, ĠDialog Binding < out ĠModal >> Ġ= Ġmap Of () Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor ( var arg Ġbindings : ĠDialog Binding <* >) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġbindings . map Ġ{ Ġit . type Ġto Ġit Ġ}. toMap (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( keys . size Ġ== Ġbindings . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ bindings . map Ġ{ Ġit . type Ġ}} Ġmust Ġnot Ġhave Ġduplicate Ġentries ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġconstructor ( var arg Ġregist ries : ĠDialog Registry ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġregist ries . map Ġ{ Ġit . bindings Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġleft , Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduplicate Keys Ġ= Ġleft . keys . intersect ( right . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( duplicate Keys . isEmpty ()) Ġ{ Ġ" Must Ġnot Ġhave Ġduplicate Ġentries : Ġ$ duplicate Keys ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+ Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Dialog Ref ] Ġ( aka Ġ[ Dialog ]) Ġto Ġdisplay Ġ[ initial Modal ], Ġwhich Ġcan Ġbe Ġupdated Ġvia Ġcalls ĊĠĠĠĠ Ġ* Ġto Ġ[ update Dialog ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< Modal T Ġ: ĠModal > Ġbuild Dialog ( ĊĠĠĠĠĠĠĠ Ġinitial Modal : ĠModal T , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġview Registry : ĠView Registry ĊĠĠĠ Ġ): ĠDialog Ref < Modal T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ( bindings [ initial Modal :: class ] Ġas ? ĠDialog Binding < Modal T >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build Dialog ( initial Modal , Ġthis , Ġview Registry , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġbinding Ġfor Ġ${ initial Modal :: class . java . name } Ġmust Ġbe Ġregistered Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġdisplay Ġ$ initial Modal ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Modal T Ġ: ĠModal > Ġupdate Dialog ( dialog Ref : ĠDialog Ref < Modal T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( bindings [ dialog Ref . modal :: class ] Ġas ? ĠDialog Binding < Modal T >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . update Dialog ( dialog Ref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Modal T Ġ: ĠModal > Ġclean Up ( dialog Ref : ĠDialog Ref < Modal T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( bindings [ dialog Ref . modal :: class ] Ġas ? ĠDialog Binding < Modal T >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . clean Up Dialog ( dialog Ref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġ< Modal T Ġ: ĠModal > Ġplus ( binding : ĠDialog Binding < Modal T >): ĠDialog Registry Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( binding . type Ġ! in Ġbindings . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Already Ġregistered Ġ${ bindings [ binding . type ]} Ġfor Ġ${ binding . type }, Ġcannot Ġaccept Ġ$ binding ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDialog Registry ( bindings Ġ+ Ġ( binding . type Ġto Ġbinding )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( registry : ĠDialog Registry ): ĠDialog Registry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDialog Registry ( this , Ġregistry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġregistry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Style Res Ġdialog Theme Res Id : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ): ĠDialog Registry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDialog Registry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog Binding ( dialog Theme Res Id Ġ= Ġdialog Theme Res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ+ ĠView Modal Dialog Binding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }