/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ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 Ġim . vector . app . core . e po xy . profiles Ċ Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġcom . air bnb . e po xy . E po xy Controller Ċ import Ġim . vector . app . R Ċ import Ġim . vector . app . core . e po xy . ClickListener Ċ import Ġim . vector . app . core . e po xy . custom Height Divider Item Ċ import Ġim . vector . app . core . e po xy . divider Item Ċ import Ġim . vector . app . each chat . base . Base Module Ċ import Ġim . vector . app . each chat . contact . api . Contact Service V 2 Ċ import Ġim . vector . app . each chat . contact . data . Contacts Display Bean V 2 Ċ import Ġim . vector . app . each chat . database . App Database Ċ import Ġim . vector . app . features . home . Avatar Renderer Ċ import Ġim . vector . app . features . ro omp ro file . Room Profile Controller . Companion . END _ LOADING Ċ import Ġim . vector . app . features . ro omp ro file . Room Profile Controller . Companion . START _ LOADING Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . matrix . android . sdk . api . util . Matrix Item Ċ Ċ fun ĠE po xy Controller . build Profile Section ( title : ĠString ) Ġ{ ĊĠĠĠ Ġprofile Section Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" section _$ title ") ĊĠĠĠĠĠĠĠ Ġtitle ( title ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE po xy Controller . build Profile Action ( ĊĠĠĠĠĠĠĠ Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġsubtitle : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġeditable : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġicon : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġt int Icon : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġeditable Res : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdestruct ive : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġdivider : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġaction : ĠClick Listener ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġaccess ory : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġaccess ory Matrix Item : ĠMatrix Item ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġavatar Renderer : ĠAvatar Renderer ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġprofile Action Item Ġ{ ĊĠĠĠĠĠĠĠ Ġicon Res ( icon ) ĊĠĠĠĠĠĠĠ Ġt int Icon ( tint Icon ) ĊĠĠĠĠĠĠĠ Ġid (" action _$ id ") ĊĠĠĠĠĠĠĠ Ġsubtitle ( subtitle ) ĊĠĠĠĠĠĠĠ Ġeditable ( editable ) ĊĠĠĠĠĠĠĠ Ġeditable Res ?. let Ġ{ Ġeditable Res ( editable Res ) Ġ} ĊĠĠĠĠĠĠĠ Ġdestruct ive ( destruct ive ) ĊĠĠĠĠĠĠĠ Ġtitle ( title ) ĊĠĠĠĠĠĠĠ Ġaccess ory Res ( access ory ) ĊĠĠĠĠĠĠĠ Ġaccess ory Matrix Item ( access ory Matrix Item ) ĊĠĠĠĠĠĠĠ Ġavatar Renderer ( avatar Renderer ) ĊĠĠĠĠĠĠĠ Ġlistener ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( divider ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdivider Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" divider _$ title ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE po xy Controller . build Divider ( divider Name : ĠString , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġcustom Height Divider Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" divider _$ divider Name ") ĊĠĠĠĠĠĠĠ Ġcustom Height ( height ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ å±ķç¤º ä¸ĢäºĽ åŁºæľ¬ ä¿¡æģ¯ Ċ fun ĠE po xy Controller . build UserProfile Info Item ( key : ĠString ?, Ġvalue : ĠString ?, Ġshow Arrow : ĠBoolean Ġ= Ġfalse , Ġm ClickListener : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġuser Profile Info Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" user _ profile _$ key ") ĊĠĠĠĠĠĠĠ Ġkey ( key ) ĊĠĠĠĠĠĠĠ Ġvalue ( value ) ĊĠĠĠĠĠĠĠ Ġshow Arrow ( show Arrow ) ĊĠĠĠĠĠĠĠ Ġclick Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ClickListener ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE po xy Controller . build Multi UserProfile Info Item ( key : ĠString ?, Ġvalues : ĠArrayList < String >) Ġ{ ĊĠĠĠ Ġcustom Height Divider Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" item _ divider _ top _$ key ") ĊĠĠĠĠĠĠĠ Ġcustom Height ( 1 1 ) ĊĠĠĠĠĠĠĠ Ġcolor Resource ( R . color . white ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġuser Profile Multi Info Title Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" user _ profile _ title _$ key ") ĊĠĠĠĠĠĠĠ Ġkey ( key ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcustom Height Divider Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" item _ divider _ top _$ key ") ĊĠĠĠĠĠĠĠ Ġcustom Height ( 2 ) ĊĠĠĠĠĠĠĠ Ġcolor Resource ( R . color . white ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġvalues . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Profile Multi Info Content Item { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" user _ profile _ content _$ index ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġcustom Height Divider Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid (" item _ divider _ top _$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Height ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Resource ( R . color . white ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcustom Height Divider Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" item _ divider _ top _$ key ") ĊĠĠĠĠĠĠĠ Ġcustom Height ( 7 ) ĊĠĠĠĠĠĠĠ Ġcolor Resource ( R . color . white ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE po xy Controller . build Show More Info Info Item ( action : ĠClick Listener ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġshow More Info Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" user _ profile _ show _ more ") ĊĠĠĠĠĠĠĠ Ġlistener ( action ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Del icate Cor outines Api :: class ) Ċ fun ĠE po xy Controller . add Contact Switch Item ( title : ĠString , Ġmatrix Id : ĠString , Ġcontact : ĠContact s Display Bean V 2 , Ġcall Back : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġcontact Switch Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" add _ contact _ switch _ item ") ĊĠĠĠĠĠĠĠ Ġenabled ( true ) ĊĠĠĠĠĠĠĠ Ġtitle ( title ) ĊĠĠĠĠĠĠĠ Ġswitch Checked ( false ) ĊĠĠĠĠĠĠĠ Ġmatrix Id ( matrix Id ) ĊĠĠĠĠĠĠĠ Ġlistener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( START _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠContact Service V 2 . getInstance (). add ( contact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact . id Ġ= Ġresponse . obj ?. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database . getInstance ( Base Module . getContext ()). contact Dao V 2 (). insert Contact ( contact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( END _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( END _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Contact Ġ= ĠApp Database . getInstance ( Base Module . getContext ()). contact Dao V 2 (). get Contact By Matrix Id ( matrix Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġm Contact ?. id ?. let Ġ{ Ġit 1 Ġ-> ĠContact Service V 2 . getInstance (). delete ( it 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response ?. is Success Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Contact . del Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database . getInstance ( Base Module . getContext ()). contact Dao V 2 (). update ( m Contact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( END _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( END _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exception OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back . invoke ( END _ LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġdivider Item Ġ{ ĊĠĠĠĠĠĠĠ Ġid (" divider _ add _ contact ") ĊĠĠĠ Ġ} Ċ } Ċ