package Ġjp . co . cyber agent . lo unge Ċ Ċ import Ġandroidx . lean back . widget . Header Item Ċ import Ġandroidx . lean back . widget . List Row Ċ import Ġandroidx . lean back . widget . List Row Presenter Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠEither Ġ[ header Data ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* ĠYou Ġneed Ġto Ġmanually Ġinvoke Ġthe Ġ[ Lo unge Controller . request Model Build ] Ġof Ġthe Ġ[ controller ] Ċ Ġ* Ġfor Ġdisplaying Ġrow Ġitems . Ċ Ġ* Ċ Ġ* Ġ@ param Ġheader Data Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġdata Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġcontroller Ġset Ġthe Ġ[ List Row Model . controller ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ*/ Ċ suspend Ġfun ĠLo unge Build Model Scope . list Row ( ĊĠ Ġheader Data : ĠHeader Data ? Ġ= Ġnull , ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġcontroller : ĠLo unge Controller , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , Ċ ) Ġ{ ĊĠ Ġval Ġkey Long : ĠLong Ġ= Ġkey ?. to Lo unge Model Key () ĊĠĠĠ Ġ?: Ġheader Data ?. to Lo unge Model Key () ĊĠĠĠ Ġ?: Ġerror (" Require Ġkey Ġor Ġheader Data Ġto Ġbe Ġnon - null .") ĊĠ Ġif Ġ( controller . debug Log Enabled Ġ&& Ġcontroller . debug Name Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġcontroller . debug Name Ġ= Ġ" List Row Ġ${ key ?. toString () Ġ?: Ġheader Data ?. name }" ĊĠ Ġ} ĊĠ Ġ+ List Row Model ( key Long , Ġheader Data , Ġcontroller , Ġpresenter ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠModels Ġadded Ġin Ġ[ build Models ] Ġwill Ġbe Ġadd Ġto Ġthe Ġ[ List Row Model ]. Ċ Ġ* ĠEither Ġ[ header Data ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġheader Data Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġdata Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Models Ġmodels Ġadded Ġin Ġthis Ġscope Ġwill Ġbe Ġadd Ġto Ġthe Ġ[ List Row Model ]. Ċ Ġ*/ Ċ suspend Ġfun ĠLo unge Build Model Scope . list Row Of ( ĊĠ Ġheader Data : ĠHeader Data ? Ġ= Ġnull , ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Models : Ġsuspend ĠLo unge Build Model Scope . () Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠ Ġval Ġcontroller Key Ġ= Ġrequire NotNull ( key Ġ?: Ġheader Data ) Ġ{ ĊĠĠĠ Ġ" Require Ġkey Ġor Ġheader Data Ġto Ġbe Ġnon - null ." ĊĠ Ġ} ĊĠ Ġval Ġcontroller Ġ= Ġmem or ized Controller ( controller Key ) Ġ{ ĊĠĠĠ ĠLambda Lo unge Controller ( lifecycle , Ġmodel Building Dispatcher ) ĊĠ Ġ} ĊĠ Ġcontroller . build Models Ġ= Ġbuild Models ĊĠ Ġcontroller . request Model Build () ĊĠ Ġlist Row ( ĊĠĠĠ Ġheader Data Ġ= Ġheader Data , ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter , ĊĠĠĠ Ġcontroller Ġ= Ġcontroller ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠModels Ġadded Ġin Ġ[ build Models ] Ġwill Ġbe Ġadd Ġto Ġthe Ġ[ List Row Model ]. Ċ Ġ* ĠEither Ġ[ name ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġname Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġname Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Models Ġmodels Ġadded Ġin Ġthis Ġscope Ġwill Ġbe Ġadd Ġto Ġthe Ġ[ List Row Model ]. Ċ Ġ*/ Ċ suspend Ġfun ĠLo unge Build Model Scope . list Row Of ( ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Models : Ġsuspend ĠLo unge Build Model Scope . () Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠ Ġlist Row Of ( ĊĠĠĠ Ġheader Data Ġ= Ġname ?. let Ġ{ ĠHeader Data ( it ) Ġ}, ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter , ĊĠĠĠ Ġbuild Models Ġ= Ġbuild Models , ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠBuilds Ġthe Ġmodel Ġon Ġeach Ġitem Ġof Ġthe Ġ[ list ]. Ċ Ġ* ĠEither Ġ[ header Data ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġheader Data Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġdata Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġlist Ġitems Ġthat Ġwill Ġbe Ġbuild Ġinto Ġ[ Lo unge Model ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Item Model Ġbuilds Ġitem Ġto Ġ[ Lo unge Model ]. Ċ Ġ*/ Ċ suspend Ġfun Ġ< T Ġ: ĠAny > ĠLo unge Build Model Scope . list Row For ( ĊĠ Ġheader Data : ĠHeader Data ? Ġ= Ġnull , ĊĠ Ġlist : ĠList < T >, ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Item Model : Ġ( T ) Ġ-> ĠLo unge Model , Ċ ) Ġ{ ĊĠ Ġlist Row Of ( ĊĠĠĠ Ġheader Data Ġ= Ġheader Data , ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġ+ list . map ( build Item Model ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠBuilds Ġthe Ġmodel Ġon Ġeach Ġitem Ġof Ġthe Ġ[ list ]. Ċ Ġ* ĠEither Ġ[ name ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġname Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġname Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġlist Ġitems Ġthat Ġwill Ġbe Ġbuild Ġinto Ġ[ Lo unge Model ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Item Model Ġbuilds Ġitem Ġto Ġ[ Lo unge Model ]. Ċ Ġ*/ Ċ suspend Ġfun Ġ< T Ġ: ĠAny > ĠLo unge Build Model Scope . list Row For ( ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġlist : ĠList < T >, ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Item Model : Ġ( T ) Ġ-> ĠLo unge Model , Ċ ) Ġ{ ĊĠ Ġlist Row For ( ĊĠĠĠ Ġheader Data Ġ= Ġname ?. let Ġ{ ĠHeader Data ( it ) Ġ}, ĊĠĠĠ Ġlist Ġ= Ġlist , ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter , ĊĠĠĠ Ġbuild Item Model Ġ= Ġbuild Item Model , ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠBuilds Ġthe Ġmodel Ġon Ġeach Ġitem Ġof Ġthe Ġ[ list ], Ġproviding Ġsequential Ġindex Ġwith Ġthe Ġelement . Ċ Ġ* ĠEither Ġ[ header Data ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġheader Data Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġdata Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġlist Ġitems Ġthat Ġwill Ġbe Ġbuild Ġinto Ġ[ Lo unge Model ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Item Model Ġbuilds Ġitem Ġto Ġ[ Lo unge Model ]. Ċ Ġ*/ Ċ suspend Ġfun Ġ< T Ġ: ĠAny > ĠLo unge Build Model Scope . list Row For Indexed ( ĊĠ Ġheader Data : ĠHeader Data ? Ġ= Ġnull , ĊĠ Ġlist : ĠList < T >, ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Item Model : Ġ( Int , ĠT ) Ġ-> ĠLo unge Model , Ċ ) Ġ{ ĊĠ Ġlist Row Of ( ĊĠĠĠ Ġheader Data Ġ= Ġheader Data , ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġ+ list . map Indexed ( build Item Model ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġ[ List Row Model ] Ġto Ġthis Ġscope . Ċ Ġ* ĠBuilds Ġthe Ġmodel Ġon Ġeach Ġitem Ġof Ġthe Ġ[ list ], Ġproviding Ġsequential Ġindex Ġwith Ġthe Ġelement . Ċ Ġ* ĠEither Ġ[ name ] Ġor Ġ[ key ] Ġmust Ġbe Ġprovided Ġto Ġproperly Ġset Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġname Ġif Ġprovided , Ġset Ġa Ġ[ Header Item ] Ġwith Ġthe Ġname Ġto Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġlist Ġitems Ġthat Ġwill Ġbe Ġbuild Ġinto Ġ[ Lo unge Model ]. Ċ Ġ* Ġ@ param Ġkey Ġif Ġprovided , Ġset Ġit Ġas Ġthe Ġ[ List Row Model . key ]. Ċ Ġ* Ġ@ param Ġpresenter Ġthe Ġ[ List Row Presenter ] Ġfor Ġthe Ġ[ List Row ]. Ċ Ġ* Ġ@ param Ġbuild Item Model Ġbuilds Ġitem Ġto Ġ[ Lo unge Model ]. Ċ Ġ*/ Ċ suspend Ġfun Ġ< T Ġ: ĠAny > ĠLo unge Build Model Scope . list Row For Indexed ( ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġlist : ĠList < T >, ĊĠ Ġkey : ĠAny ? Ġ= Ġnull , ĊĠ Ġpresenter : ĠList Row Presenter Ġ= ĠList Row Model . Default List Row Presenter , ĊĠ Ġbuild Item Model : Ġ( Int , ĠT ) Ġ-> ĠLo unge Model , Ċ ) Ġ{ ĊĠ Ġlist Row For Indexed ( ĊĠĠĠ Ġheader Data Ġ= Ġname ?. let Ġ{ ĠHeader Data ( it ) Ġ}, ĊĠĠĠ Ġlist Ġ= Ġlist , ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġpresenter Ġ= Ġpresenter , ĊĠĠĠ Ġbuild Item Model Ġ= Ġbuild Item Model , ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġwrapper Ġaround Ġ[ List Row ] Ġwhich Ġimplement Ġthe Ġ[ Deferred Lo unge Model ]. Ċ Ġ*/ Ċ open Ġclass ĠList Row Model ( ĊĠ Ġfinal Ġoverride Ġval Ġkey : ĠLong , ĊĠ Ġval Ġheader Data : ĠHeader Data ? Ġ= Ġnull , ĊĠ Ġval Ġcontroller : ĠLo unge Controller , ĊĠ Ġoverride Ġval Ġpresenter : ĠList Row Presenter Ġ= ĠDefault List Row Presenter , Ċ ) Ġ: ĠList Row ( controller . adapter ), ĊĠ ĠDeferred Lo unge Model Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġid Ġ= Ġkey ĊĠĠĠ Ġif Ġ( header Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġheader Item Ġ= ĠHeader Item ( header Data . name ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġheader Data . description ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġheader Data . content Description ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAwait Ġthe Ġcompletion Ġof Ġthe Ġinitial Ġbuild Ġof Ġthe Ġ[ controller ]. ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġsuspend Ġfun Ġawait () Ġ= Ġcontroller . await Initial Build Complete () ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( other Ġ! is ĠList Row Model ) Ġreturn Ġfalse ĊĊĠĠĠ Ġif Ġ( key Ġ!= Ġother . key ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( header Data Ġ!= Ġother . header Data ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( controller Ġ!= Ġother . controller ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( presenter Ġ!= Ġother . presenter ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġkey . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( header Data ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcontroller . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpresenter . hashCode () ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġglobal Ġdefault Ġ[ List Row Presenter ] Ġused Ġfor Ġall Ġ[ List Row Model ] s . ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġset Ġa Ġanother Ġone Ġto Ġchange Ġthe Ġdefault Ġappearance Ġof Ġ[ List Row Model ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠDefault List Row Presenter Ġ= ĠList Row Presenter () ĊĠ Ġ} Ċ } Ċ