package Ġio . android al atan . component . view . compose Ċ Ċ import Ġio . android al atan . component . view . compose . api . Compose View Interaction Observer Ċ import Ġio . android al atan . component . view . compose . api . Compose View Interaction Trigger Ċ import Ġio . android al atan . component . view . compose . api . View Event Ċ import Ġio . android al atan . component . view . compose . api . compound button . On CheckedChanged Ċ import Ġio . android al atan . component . view . compose . api . holder . Hold able Ċ import Ġio . android al atan . component . view . compose . api . holder . View Event Holder Ċ import Ġio . android al atan . component . view . compose . api . tabs . On Tab Selected Ċ import Ġio . android al atan . component . view . compose . api . text field . On Focus Changed Ċ import Ġio . android al atan . component . view . compose . api . text field . On TextChanged Ċ import Ġio . android al atan . component . view . compose . model . View Event Callback Ċ Ċ class ĠCompose View Interaction Trigger Impl Ġ: ĠCompose View Interaction Trigger , ĠCompose View Interaction Observer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcache able Event Ġby Ġlazy Ġ{ Ġhash Map Of < Int , ĠView Event Holder >() Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcallbacks Ġ= Ġmutable ListOf < View Event Callback < View Event >>() ĊĊĠĠĠ Ġoverride Ġfun Ġtrigger Event ( id : ĠInt , Ġview Event : ĠView Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Event Ġis ĠHold able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache able Event [ id ] Ġ= ĠView Event Holder ( view Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Callback ( id , Ġview Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Callback ( id : ĠInt , Ġview Event : ĠView Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . filter Ġ{ Ġit . id Ġ== Ġid Ġ&& Ġit . event Ġ== Ġview Event . java Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . callback . on Event ( view Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠView Event > Ġregister Callback ( ĊĠĠĠĠĠĠĠ Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġevent : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġstart With Cached Item : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcallback : ĠCompose View Interaction Observer . Callback < T > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . add ( View Event Callback ( id , Ġevent , Ġcallback ) Ġas ĠView Event Callback < View Event >) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache able Event [ id ] Ġ== Ġnull Ġ&& ĠHold able :: class . java . isAssignableFrom ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache able Event [ id ] Ġ= ĠView Event Holder ( create Default Event ( event ) Ġas ĠHold able ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Event : ĠHold able ? Ġ= Ġcache able Event [ id ]?. view Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Event Ġ!= Ġnull Ġ&& Ġview Event . java Class Ġ== Ġevent Ġ&& Ġstart With Cached Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Event ( view Event Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠView Event > Ġcreate Default Event ( event : ĠClass < T >): ĠHold able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Focus Changed :: class . java Ġ-> ĠOn Focus Changed ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Tab Selected :: class . java Ġ-> ĠOn Tab Selected ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn CheckedChanged :: class . java Ġ-> ĠOn CheckedChanged ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn TextChanged :: class . java Ġ-> ĠOn TextChanged ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException ("${ event . name } Ġshould Ġbe Ġinherited Ġfrom ĠHold able ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠView Event > Ġunregister Callback ( id : ĠInt , Ġevent : ĠClass < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . filter Ġ{ Ġit . id Ġ== Ġid Ġ&& Ġit . event . java Class Ġ== Ġevent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }