/* Ċ Ġ* Ġ ĠBlock V ĠAG . ĠCopyright Ġ( c ) Ġ 2 0 1 8 , Ġall Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠBlock V ĠSDK ĠLicense Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġor Ġthe ĠBlock V ĠSDK Ġexcept Ġin Ċ Ġ* Ġ Ġcompliance Ġwith Ġthe ĠLicense Ġaccompanying Ġit . ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġthe ĠBlock V Ċ Ġ* Ġ ĠSDK Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF Ċ Ġ* Ġ ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġ Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġio . block v . face . client Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġio . block v . common . model . Face Ċ import Ġio . block v . common . model . V atom Ċ import Ġio . block v . face . client . Face Manager . Embedded Procedure .* Ċ import Ġio . block v . face . client . manager . Message Manager Ċ import Ġio . block v . face . client . manager . ResourceManager Ċ import Ġio . reactivex . Single Ċ import Ġorg . json . JSONObject Ċ Ċ interface ĠFace Manager Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠEmbedded Procedure Ġenum Ġcontains Ġa Ġset Ġof Ġdefault Ġface Ġselection Ġprocedures . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠBy Ġdefault Ġthese Ġprocedures Ġwill Ġonly Ġconsider Ġnative Ġfaces Ġthat Ġhave Ġa Ġplatform Ġvalue Ġ' Generic ' ĊĠĠ Ġ* Ġor Ġ' Android '. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠF aces Ġwith Ġa Ġplatform Ġvalue Ġof Ġ' Android ' Ġwill Ġbe Ġselected Ġover Ġ' Generic ' Ġin Ġthe Ġcase Ġwhere Ġthere Ġare ĊĠĠ Ġ* Ġmultiple Ġfaces Ġper Ġview Ġmode . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠICON Ġ- ĠSelect s Ġa ĠFace Ġmodel Ġin Ġicon Ġmode , Ġreturns Ġnull Ġif Ġnone Ġare Ġavailable . ĊĠĠ Ġ* Ġ@ see ĠEN G AG ED Ġ- ĠSelect s Ġa ĠFace Ġmodel Ġin Ġeng aged Ġmode , Ġfalls Ġback Ġon Ġthe ĠICON Ġprocedure Ġif Ġnone Ġare Ġavailable . ĊĠĠ Ġ* Ġ@ see ĠFULL SCREEN Ġ- ĠSelect s Ġa ĠFace Ġmodel Ġin Ġfullscreen Ġmode , Ġreturns Ġnull Ġif Ġnone Ġare Ġavailable . ĊĠĠ Ġ* Ġ@ see ĠC ARD Ġ- ĠSelect s Ġa ĠFace Ġmodel Ġin Ġcard Ġmode , Ġreturns Ġnull Ġif Ġnone Ġare Ġavailable . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠFace Selection Procedure ĊĠĠ Ġ*/ ĊĠ Ġenum Ġclass ĠEmbedded Procedure ( val Ġview Mode : ĠString , Ġval Ġfallback : ĠEmbedded Procedure ?) Ġ{ ĊĊĠĠĠ ĠICON (" icon ", Ġnull ), ĊĠĠĠ ĠEN G AG ED (" eng aged ", ĠICON ), ĊĠĠĠ ĠFULL SCREEN (" fullscreen ", Ġnull ), ĊĠĠĠ ĠC ARD (" card ", Ġnull ); ĊĊĠĠĠ Ġval Ġprocedure : ĠFace Selection Procedure ĊĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocedure Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠFace Manager . Face Selection Procedure Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv atom : ĠV atom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Urls : ĠSet < String > ĊĠĠĠĠĠĠĠĠĠ Ġ): ĠFace ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontext : ĠEmbedded Procedure ? Ġ= Ġprocedure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface Ġ= Ġdefault Routine ( v atom . faces , Ġdisplay Urls , Ġcontext !!. view Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext . fallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( context Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġval Ġdefault Routine : Ġ( faces : ĠList < Face >, Ġface Registry : ĠSet < String >, Ġview Mode : ĠString ) Ġ-> ĠFace ? Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġfaces , Ġface Registry , Ġview Mode Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Face : ĠFace ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġrating Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( face Ġin Ġfaces ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face . property . view Mode Ġ!= Ġview Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// possibly Ġturn Ġinto Ġhelper Ġfunction Ġis Android , Ġis Generic , Ġis Supported ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrate Ġ= Ġwhen Ġ( face . property . platform . toLowerCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" generic " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ== Ġ- 1 ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face . is Native ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġthat Ġthe Ġface Ġis Ġregistered ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face Registry . indexOf ( face . property . display Url ) Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġif Ġa Ġweb Ġface Ġis Ġregistered ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( face Registry . indexOf (" https :// * ") Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ> Ġrating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrating Ġ= Ġrate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Face Ġ= Ġface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġselected Face ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdds Ġa ĠFace View Ġfactory Ġto Ġthe Ġro ster . ĠIf Ġa Ġfactory Ġwith Ġthe Ġsame Ġdisplay Ġurl Ġexists Ġit ĊĠĠ Ġ* Ġwill Ġbe Ġoverwritten . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġfactory Ġis Ġresponsible Ġfor Ġemit ting Ġa ĠFace View Ġfor Ġa Ġspecific Ġdisplay Ġurl . ĊĠĠ Ġ* Ġ@ see ĠFace View ĊĠĠ Ġ* Ġ@ see ĠView Factory ĊĠĠ Ġ*/ ĊĠ Ġfun Ġregister Face ( factory : ĠView Factory ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠA Ġmap Ġof Ġall Ġavailable ĠFace View Ġfactories . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠView Factory ĊĠĠ Ġ*/ ĊĠ Ġval Ġface R oster : ĠMap < String , ĠView Factory > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġdefault Ġloading Ġview Ġto Ġbe Ġused Ġby Ġthe ĠV atom View . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠView Emitter ĊĠĠ Ġ*/ ĊĠ Ġvar Ġdefault Loader : ĠView Emitter ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġdefault Ġerror Ġview Ġto Ġbe Ġused Ġby Ġthe ĠV atom View . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠView Emitter ĊĠĠ Ġ*/ ĊĠ Ġvar Ġdefault Error : ĠView Emitter ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠFace Selection Procedure Ġis Ġused Ġto Ġselect Ġa ĠFace Ġfor Ġa Ġv Atom . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠEmbedded Procedure ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠFace Selection Procedure Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġa ĠFace Ġmodel Ġfor Ġa Ġv Atom Ġbase Ġon Ġsome Ġcustom Ġlogic . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv atom Ġcontains Ġthe Ġlist Ġof ĠFace Ġmodels Ġthat Ġshould Ġbe Ġused Ġby Ġthe Ġprocedure . ĊĠĠĠĠ Ġ* Ġ@ param Ġdisplay Urls Ġis Ġa Ġset Ġof Ġall Ġavailable ĠFace View Ġfactories . ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġoptional ĠFace Ġmodel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠV atom ĊĠĠĠĠ Ġ* Ġ@ see ĠV atom . faces ĊĠĠĠĠ Ġ* Ġ@ see ĠFace ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġselect ( v atom : ĠV atom , Ġdisplay Urls : ĠSet < String >): ĠFace ? ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCreates Ġa Ġbuilder Ġto Ġload Ġa ĠV atom View Ġfor Ġthe Ġspecified Ġv Atom . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġv atom Ġis Ġthe Ġv Atom Ġyou Ġwant Ġa ĠV atom View Ġto Ġdisplay . ĊĠĠ Ġ* Ġ@ return Ġa Ġnew ĠBuilder . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ see ĠBuilder ĊĠĠ Ġ*/ ĊĠ Ġfun Ġload ( v atom : ĠV atom ): ĠBuilder ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠBuilder Ġused Ġto Ġcreate Ġa ĠCallable Ġto Ġload Ġa ĠV atom View . ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠBuilder Ġ{ ĊĊĠĠĠ Ġval Ġerror View : ĠView ? ĊĠĠĠ Ġval Ġloader View : ĠView ? ĊĠĠĠ Ġval Ġloader Delay : ĠLong ĊĠĠĠ Ġval Ġface Procedure : ĠFace Selection Procedure ĊĠĠĠ Ġval Ġmessage Handler : Ġ(( name : ĠString , Ġpayload : ĠJSONObject , Ġhandler : ĠMessage Handler ) Ġ-> ĠUnit )? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa ĠCallable Ġto Ġload Ġa ĠFace View Ġinto Ġthe Ġprovided ĠV atom View . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv atom View Ġto Ġload Ġa ĠFace View Ġfor . ĊĠĠĠĠ Ġ* Ġ@ return Ġnew ĠSingle < Face View >, Ġsub scri bing Ġto Ġthis Ġwill Ġbegin Ġthe Ġloading Ġchain . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠFace View ĊĠĠĠĠ Ġ* Ġ@ see ĠV atom View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinto ( v atom View : ĠV atom View ): ĠSingle < Face View > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġan Ġembedded Ġprocedure Ġto Ġbe Ġused Ġto Ġselected Ġa ĠFace Ġmodel Ġfor Ġthe Ġv Atom . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġembedded Procedure Ġto Ġbe Ġused Ġto Ġselect Ġa Ġface . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis ĠBuilder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠEmbedded Procedure ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Embedded Procedure ( embedded Procedure : ĠEmbedded Procedure ): ĠBuilder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġcustom Ġprocedure Ġto Ġbe Ġused Ġto Ġselect Ġa ĠFace Ġmodel Ġfor Ġthe Ġv Atom . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġprocedure Ġto Ġbe Ġused Ġto Ġselect Ġthe ĠFace Ġmodel . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis ĠBuilder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠFace Selection Procedure ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Face Selection Procedure ( procedure : ĠFace Selection Procedure ): ĠBuilder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġerror Ġview Ġto Ġbe Ġused Ġby Ġthe ĠV atom View . ĠIf Ġthis Ġis Ġnot Ġset ĊĠĠĠĠ Ġ* Ġthe Ġdefault Ġerror Ġview Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġto Ġbe Ġused Ġas Ġthe Ġerror Ġview . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis ĠBuilder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠV atom View ĊĠĠĠĠ Ġ* Ġ@ see Ġdefault Error ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetError View ( view : ĠView ?): ĠBuilder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġloader Ġview Ġto Ġbe Ġused Ġby Ġthe ĠV atom View . ĠIf Ġthis Ġis Ġnot Ġset ĊĠĠĠĠ Ġ* Ġthe Ġdefault Ġloader Ġview Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġto Ġbe Ġused Ġas Ġa Ġloader Ġview . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis ĠBuilder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠV atom View ĊĠĠĠĠ Ġ* Ġ@ see Ġdefault Loader ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Loader View ( view : ĠView ?): ĠBuilder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġdelay Ġbefore Ġthe Ġloader Ġbe Ġwill Ġshown . ĠIf Ġthe ĠV atom View Ġfinishes Ġloading Ġbefore ĊĠĠĠĠ Ġ* Ġthe Ġtimeout , Ġthe Ġloader Ġview Ġwill Ġnot Ġbe Ġshown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Ġis Ġthe Ġdelay Ġin Ġmilliseconds . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis ĠBuilder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Loader Delay ( time : ĠLong ): ĠBuilder ĊĊĠĠĠ Ġfun Ġset MessageHandler ( handler : Ġ(( name : ĠString , Ġpayload : ĠJSONObject , Ġhandler : ĠMessage Handler ) Ġ-> ĠUnit )? ): ĠBuilder ĊĊĠĠĠ Ġenum Ġclass ĠError ( val Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠ ĠF ACT ORY _ NOT _ FOUND (" The Ġface 's Ġdisplay Ġurl Ġis Ġnot Ġa Ġregistered Ġnative Ġface "), ĊĠĠĠĠĠ ĠFACE _ MODEL _ IS _ NULL (" The Ġface Ġselection Ġprocedure Ġhas Ġreturned Ġnull "), ĊĠĠĠĠĠ ĠFACE _ VIEW _ CHANGED (" The Ġface Ġview Ġbeing Ġdisplayed Ġhas Ġbeen Ġchanged "), ĊĠĠĠĠĠ ĠMESSAGE _ HANDLER _ IS _ NULL (" The Ġviewer Ġhas Ġnot Ġassigned Ġa Ġmessage Ġhandler "); ĊĊĠĠĠĠĠ Ġval Ġexception : ĠException ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠV atom View Exception ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠV atom View Exception ( val Ġerror : ĠError ) Ġ: ĠException ( error . message ) ĊĠ Ġ} ĊĊĠ Ġinterface ĠMessage Handler Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġcalled Ġonce Ġthe Ġthe Ġviewer Ġhas Ġcompleted Ġprocessing Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġbut Ġhas Ġno Ġresponse Ġto Ġsend Ġback Ġto Ġthe Ġface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonComplete () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġcalled Ġonce Ġthe Ġthe Ġviewer Ġhas Ġcompleted Ġprocessing Ġthe Ġmessage ĊĠĠĠĠ Ġ* Ġand Ġhas Ġa Ġresponse Ġto Ġsend Ġback Ġto Ġthe Ġface . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġis Ġthe Ġmessage Ġname . ĊĠĠĠĠ Ġ* Ġ@ param Ġpayload Ġcontains Ġadditional Ġinformation Ġfor Ġthe Ġface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonComplete With Response ( name : ĠString , Ġpayload : ĠJSONObject ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġcalled Ġif Ġan Ġerror Ġhas Ġoccurred Ġduring Ġprocessing Ġof Ġthe Ġmessage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġerror Ġis Ġthe Ġthrowable Ġto Ġbe Ġreturned . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonError ( error : ĠMessage Manager . Message Exception ) ĊĊĠ Ġ} ĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠView ĠEmit ter Ġis Ġused Ġto Ġcreate Ġcustom Ġloader Ġand Ġerror Ġviews . ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠView Emitter Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġview Ġto Ġbe Ġused Ġby ĠV atom View . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDo Ġnot Ġattach Ġthe Ġview Ġto Ġthe Ġparent , Ġthis Ġis Ġdone Ġduring ĠV atom View Ġloading Ġprocess . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġusing Ġthe ĠLayoutInflater Ġset Ġ' attached To Root ' Ġfalse , Ġinflater . inflate (< your - resource - id >, Ġparent , Ġfalse ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġemit ( in flater : ĠLayoutInflater , Ġparent : ĠViewGroup , Ġv atom : ĠV atom , Ġresource Manager : ĠResourceManager ): ĠView ĊĠ Ġ} Ċ Ċ }