/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 , Ġ 2 0 2 2 ĠZ UP ĠIT ĠSER V IC OS ĠEM ĠT EC NO LOG IA ĠE ĠIN OV AC AO ĠSA Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Too Many Functions ") Ċ Ċ package Ġbr . com . z up . be agle . android . utils Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġbr . com . z up . be agle . android . data . serializer . Be agle Serializer Ċ import Ġbr . com . z up . be agle . android . networking . Request Data Ċ import Ġbr . com . z up . be agle . android . view . View Factory Ċ import Ġbr . com . z up . be agle . android . view . custom . On Server StateChanged Ċ import Ġbr . com . z up . be agle . android . view . view model . Screen Context ViewModel Ċ import Ġbr . com . z up . be agle . android . widget . Activity Root View Ċ import Ġbr . com . z up . be agle . android . widget . Fragment Root View Ċ import Ġbr . com . z up . be agle . android . widget . Root View Ċ Ċ internal Ġvar Ġbe agle Serializer Factory Ġ= ĠBe agle Serializer () Ċ Ċ /** Ċ Ġ* ĠLoad Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ property Ġactivity Ġthat Ġis Ġparent Ġof Ġthis Ġview Ċ Ġ* Ġ@ property Ġrequest Data Ġto Ġcreate Ġyour Ġrequest Ġdata Ġto Ġfetch Ġthe Ġcomponent Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġactivity : ĠAppCompatActivity , ĊĠĠĠ Ġrequest Data : ĠRequest Data , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( ĊĠĠĠĠĠĠĠ Ġview Group Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġroot View Ġ= ĠActivity Root View ( activity , Ġthis . id , Ġrequest Data . url ), ĊĠĠĠĠĠĠĠ Ġrequest Data Ġ= Ġrequest Data , ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull , ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠLoad Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ property Ġfragment Ġthat Ġis Ġparent Ġof Ġthis Ġview Ċ Ġ* Ġ@ property Ġrequest Data Ġto Ġcreate Ġyour Ġrequest Ġdata Ġto Ġfetch Ġthe Ġcomponent Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠ Ġrequest Data : ĠRequest Data , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( ĊĠĠĠĠĠĠĠ Ġview Group Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġroot View Ġ= ĠFragment Root View ( fragment , Ġthis . id , Ġrequest Data . url ), ĊĠĠĠĠĠĠĠ Ġrequest Data Ġ= Ġrequest Data , ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull , ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠLoad Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ property Ġactivity Ġthat Ġis Ġparent Ġof Ġthis Ġview Ċ Ġ* Ġ@ property Ġrequest Data Ġto Ġcreate Ġyour Ġrequest Ġdata Ġto Ġfetch Ġthe Ġcomponent Ċ Ġ* Ġ@ property Ġlistener Ġis Ġcalled Ġwhen Ġthe Ġloading Ġis ĠStarted , ĠFinished Ġand ĠSuccess Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġactivity : ĠAppCompatActivity , ĊĠĠĠ Ġrequest Data : ĠRequest Data , ĊĠĠĠ Ġlistener : ĠOn Server StateChanged ? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( ĊĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠ ĠActivity Root View ( activity , Ġthis . id , Ġrequest Data . url ), ĊĠĠĠĠĠĠĠ Ġrequest Data , ĊĠĠĠĠĠĠĠ Ġlistener , ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠLoad Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ property Ġfragment Ġthat Ġis Ġparent Ġof Ġthis Ġview Ċ Ġ* Ġ@ property Ġrequest Data Ġto Ġcreate Ġyour Ġrequest Ġdata Ġto Ġfetch Ġthe Ġcomponent Ċ Ġ* Ġ@ property Ġlistener Ġis Ġcalled Ġwhen Ġthe Ġloading Ġis ĠStarted , ĠFinished Ġand ĠSuccess Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠ Ġrequest Data : ĠRequest Data , ĊĠĠĠ Ġlistener : ĠOn Server StateChanged ? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( ĊĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠ ĠFragment Root View ( fragment , Ġthis . id , Ġrequest Data . url ), ĊĠĠĠĠĠĠĠ Ġrequest Data , ĊĠĠĠĠĠĠĠ Ġlistener ĊĠĠĠ Ġ) Ċ } ĊĊ Ċ @ Suppress (" Long Parameter List ") Ċ private Ġfun Ġload View ( ĊĠĠĠ Ġview Group : ĠViewGroup , ĊĠĠĠ Ġroot View : ĠRoot View , ĊĠĠĠ Ġrequest Data : ĠRequest Data , ĊĠĠĠ Ġlistener : ĠOn Server StateChanged ?, ĊĠĠĠ Ġgenerate Id Manager : ĠGenerate Id Manager Ġ= ĠGenerate Id Manager ( root View ), Ċ ) Ġ{ ĊĠĠĠ Ġgenerate Id Manager . create Single Manager By Root View Id () ĊĠĠĠ Ġval Ġview Ġ= ĠView Factory . make Be agle View ( root View ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġserver StateChanged Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġload View ( request Data ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġview . load Completed Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġview Group . removeAll Views () ĊĠĠĠĠĠĠĠ Ġview Group . addView ( view ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġview . listener On View Detached From Window Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Id Manager . on View Detached From Window ( view ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRender Ġa ĠJson Ġin ĠString Ġformat Ġfrom Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ param Ġactivity Ġthat Ġis Ġparent Ġof Ġthis Ġview . Ċ Ġ* ĠMake Ġsure Ġto Ġuse Ġthis Ġmethod Ġif Ġyou Ġare Ġinside Ġa ĠActivity Ġbecause Ġof Ġthe Ġlifecycle . Ċ Ġ* Ġ@ param Ġscreen Json ĠJson Ġin ĠString Ġformat Ġthat Ġrepresents Ġyour Ġcomponent . Ċ Ġ* Ġ@ param Ġscreen Id Ġthat Ġrepresents Ġan Ġscreen Ġidentifier Ġto Ġcreate Ġthe Ġanalytics Ġwhen Ġthe Ġscreen Ġis Ġcreated . Ċ Ġ* Ġ@ param Ġshould Reset Context Ġwhen Ġtrue , Ġthis Ġclear Ġat Ġthe Ġtime Ġof Ġcalling Ġthis Ġfunction Ġall Ġde Ġcontext Ġdata Ċ Ġ* Ġlinked Ġto Ġthe Ġlifecycle Ġowner . Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġactivity : ĠAppCompatActivity , ĊĠĠĠ Ġscreen Json : ĠString , ĊĠĠĠ Ġscreen Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġshould Reset Context : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( Activity Root View ( activity , Ġthis . id , Ġscreen Id ), Ġscreen Json , Ġshould Reset Context ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRender Ġa ĠJson Ġin ĠString Ġformat Ġfrom Ġa ĠServer D riven Component Ġinto Ġthis ĠViewGroup Ċ Ġ* Ġ@ param Ġfragment Ġthat Ġis Ġparent Ġof Ġthis Ġview . Ċ Ġ* ĠMake Ġsure Ġto Ġuse Ġthis Ġmethod Ġif Ġyou Ġare Ġinside Ġa ĠFragment Ġbecause Ġof Ġthe Ġlifecycle . Ċ Ġ* Ġ@ param Ġscreen Json ĠJson Ġin ĠString Ġformat Ġthat Ġrepresents Ġyour Ġcomponent . Ċ Ġ* Ġ@ param Ġscreen Id Ġthat Ġrepresents Ġan Ġscreen Ġidentifier Ġto Ġcreate Ġthe Ġanalytics Ġwhen Ġthe Ġscreen Ġis Ġcreated . Ċ Ġ* Ġ@ param Ġshould Reset Context Ġwhen Ġtrue , Ġthis Ġclear Ġat Ġthe Ġtime Ġof Ġcalling Ġthis Ġfunction Ġall Ġde Ġcontext Ġdata Ċ Ġ* Ġlinked Ġto Ġthe Ġlifecycle Ġowner . Ċ Ġ*/ Ċ fun ĠViewGroup . load View ( ĊĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠ Ġscreen Json : ĠString , ĊĠĠĠ Ġscreen Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġshould Reset Context : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ{ ĊĠĠĠ Ġload View ( Fragment Root View ( fragment , Ġthis . id , Ġscreen Id ), Ġscreen Json , Ġshould Reset Context ) Ċ } Ċ Ċ internal Ġfun ĠViewGroup . load View ( ĊĠĠĠ Ġroot View : ĠRoot View , ĊĠĠĠ Ġscreen Json : ĠString , ĊĠĠĠ Ġshould Reset Context : ĠBoolean , ĊĠĠĠ Ġgenerate Id Manager : ĠGenerate Id Manager Ġ= ĠGenerate Id Manager ( root View ), Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( should Reset Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= Ġroot View . generate ViewModel Instance < Screen Context ViewModel >() ĊĠĠĠĠĠĠĠ ĠviewModel . clear Contexts () ĊĠĠĠ Ġ} ĊĠĠĠ Ġgenerate Id Manager . create Single Manager By Root View Id () ĊĠĠĠ Ġval Ġcomponent Ġ= Ġbe agle Serializer Factory . deserialize Component ( screen Json ) ĊĠĠĠ Ġval Ġview Ġ= ĠView Factory . make Be agle View ( root View ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Server D riven Component ( component ) ĊĠĠĠĠĠĠĠ Ġlistener On View Detached From Window Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Id Manager . on View Detached From Window ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġremove All Views () ĊĠĠĠ Ġadd View ( view ) Ċ }