package Ġcom . air bnb . e po xy . preload Ċ Ċ import Ġandroid . view . View Ċ import Ġcom . air bnb . e po xy . E po xy Model Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġhow Ġview Ġcontent Ġfor Ġan ĠE po xy Model Ġshould Ġbe Ġpre loaded . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġtype Ġof ĠE po xy Model Ġthat Ġthis Ġpre loader Ġapplies Ġto Ċ Ġ* Ġ@ param ĠU ĠThe Ġtype Ġof Ġview Ġmetadata Ġto Ġprovide Ġto Ġthe Ġrequest Ġbuilder . Ċ Ġ* Ġ@ param ĠP ĠThe Ġtype Ġof Ġ[ Pre load Request Holder ] Ġthat Ġwill Ġexecute Ġthe Ġpreload Ġrequest Ċ Ġ*/ Ċ abstract Ġclass ĠE po xy Model Pre loader < T Ġ: ĠE po xy Model <* >, ĠU Ġ: ĠView Metadata ?, ĠP Ġ: ĠPre load Request Holder >( ĊĊĠĠĠ Ġval Ġmodel Type : ĠClass < T >, ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġlist Ġof Ġview Ġids , Ġone Ġfor Ġeach Ġview Ġthat Ġshould Ġbe Ġpre loaded . ĊĠĠĠĠ Ġ* ĠThis Ġshould Ġbe Ġleft Ġempty Ġif Ġthe ĠE po xy Model 's Ġtype Ġuses Ġthe Ġ[ Pre load able ] Ġinterface . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpreload ableView Ids : ĠList < Int > Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġoptional Ġsignature Ġto Ġdifferent iate Ġviews Ġwithin Ġthe Ġsame Ġmodel . ĠThis Ġis Ġuseful Ġif Ġyour ĠE po xy Model Ġcan Ġcontain Ġvarying Ġamounts Ġof Ġpreload able Ġviews , ĊĠĠĠĠ Ġ* Ġor Ġpreload able Ġviews Ġof Ġvarying Ġsizes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBy Ġdefault Ġthe Ġmodel 's Ġclass , Ġspan Ġsize , Ġand Ġlayout Ġresource , Ġare Ġused Ġto Ġdifferent iate Ġviews . ĠThis Ġsignature Ġallows Ġadditional Ġdifferent iation . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġif Ġyour ĠE po xy Model Ġshows Ġan Ġpreload able Ġview Ġthat Ġvar ies Ġbetween Ġpor trait Ġor Ġlandscape , Ġthis Ġorientation Ġwill Ġaffect Ġthe Ġview Ġdimensions . ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġcase Ġyou Ġcould Ġreturn Ġa Ġboolean Ġhere Ġto Ġdifferent iate Ġthe Ġtwo Ġcases Ġso Ġthat Ġthe Ġpre loaded Ġdata Ġhas Ġthe Ġcorrect Ġorientation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġobject Ġcan Ġbe Ġanything , Ġbut Ġit Ġmust Ġimplement Ġ[ Object . hashCode ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġview Signature ( e po xy Model : ĠT ): ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvide Ġoptional Ġmetadata Ġabout Ġa Ġview . ĠThis Ġcan Ġbe Ġused Ġin Ġ[ E po xy Model Pre loader . build Request ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġpreload Ġrequest Ġworks Ġbest Ġif Ġit Ġexactly Ġmatches Ġthe Ġactual Ġrequest Ġ( in Ġorder Ġto Ġmatch Ġcache Ġkeys Ġexactly ) ĊĠĠĠĠ Ġ* ĠThings Ġsuch Ġas Ġrequest Ġtransformations , Ġthumb nails , Ġor Ġcrop Ġtype Ġcan Ġaffect Ġthe Ġcache Ġkey . ĊĠĠĠĠ Ġ* ĠIf Ġyour Ġpreload able Ġview Ġis Ġconfigurable Ġyou Ġcan Ġcapture Ġthose Ġoptions Ġvia Ġthis Ġmetadata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbuild View Metadata ( view : ĠView ): ĠU ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġa Ġpreload Ġrequest Ġwith Ġthe Ġgiven Ġtarget . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġe po xy Model ĠThe ĠE po xy Model Ġwhose Ġcontent Ġis Ġbeing Ġpre loaded . ĊĠĠĠĠ Ġ* Ġ@ param Ġpreload Target ĠThe Ġtarget Ġto Ġ ues Ġto Ġcreate Ġand Ġstore Ġthe Ġrequest . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Data ĠInformation Ġabout Ġthe Ġview Ġthat Ġwill Ġhold Ġthe Ġpre loaded Ġcontent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġstart Pre load ( ĊĠĠĠĠĠĠĠ Ġe po xy Model : ĠT , ĊĠĠĠĠĠĠĠ Ġpreload Target : ĠP , ĊĠĠĠĠĠĠĠ Ġview Data : ĠView Data < U > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHelper Ġto Ġcreate Ġa Ġ[ E po xy Model Pre loader ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Signature Ġsee Ġ[ E po xy Model Pre loader . view Signature ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpreload ableView Ids Ġsee Ġ[ E po xy Model Pre loader . preload ableView Ids ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Metadata Ġsee Ġ[ E po xy Model Pre loader . build View Metadata ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdo Pre load Ġsee Ġ[ E po xy Model Pre loader . start Pre load ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠE po xy Model <* >, ĠP Ġ: ĠPre load Request Holder > Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids : ĠList < Int > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno inline Ġdo Pre load : Ġ( e po xy Model : ĠT , Ġpreload Target : ĠP , Ġview Data : ĠView Data < View Metadata ?> ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ): ĠE po xy Model Pre loader < T , ĠView Metadata ?, ĠP > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Metadata Ġ= Ġ{ ĠView Metadata . getDefault ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Signature Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Pre load Ġ= Ġdo Pre load ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHelper Ġto Ġcreate Ġa Ġ[ E po xy Model Pre loader ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Signature Ġsee Ġ[ E po xy Model Pre loader . view Signature ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpreload ableView Ids Ġsee Ġ[ E po xy Model Pre loader . preload ableView Ids ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Metadata Ġsee Ġ[ E po xy Model Pre loader . build View Metadata ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdo Pre load Ġsee Ġ[ E po xy Model Pre loader . start Pre load ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠE po xy Model <* >, ĠU Ġ: ĠView Metadata ?, ĠP Ġ: ĠPre load Request Holder > Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids : ĠList < Int > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno inline Ġview Metadata : Ġ( View ) Ġ-> ĠU , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno inline Ġview Signature : Ġ( T ) Ġ-> ĠAny ? Ġ= Ġ{ Ġ_ Ġ-> Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno inline Ġdo Pre load : Ġ( e po xy Model : ĠT , Ġpreload Target : ĠP , Ġview Data : ĠView Data < U >) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ): ĠE po xy Model Pre loader < T , ĠU , ĠP > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids Ġ= Ġpreload ableView Ids , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Model Class Ġ= ĠT :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Metadata Ġ= Ġview Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Signature Ġ= Ġview Signature , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Pre load Ġ= Ġdo Pre load ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHelper Ġto Ġcreate Ġa Ġ[ E po xy Model Pre loader ]. ĠThis Ġis Ġsimilar Ġto Ġthe Ġother Ġhelper Ġmethods Ġbut Ġnot Ġin lined Ġso Ġit Ġcan Ġbe Ġused Ġwith ĠJava . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġe po xy Model Class ĠThe Ġspecific Ġtype Ġof ĠE po xy Model Ġthat Ġthis Ġpre loader Ġis Ġfor . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Signature Ġsee Ġ[ E po xy Model Pre loader . view Signature ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpreload ableView Ids Ġsee Ġ[ E po xy Model Pre loader . preload ableView Ids ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Metadata Ġsee Ġ[ E po xy Model Pre loader . build View Metadata ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdo Pre load Ġsee Ġ[ E po xy Model Pre loader . start Pre load ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠE po xy Model <* >, ĠU Ġ: ĠView Metadata ?, ĠP Ġ: ĠPre load Request Holder > Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids : ĠList < Int > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Model Class : ĠClass < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Metadata : Ġ( View ) Ġ-> ĠU , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Signature : Ġ( T ) Ġ-> ĠAny ? Ġ= Ġ{ Ġ_ Ġ-> Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Pre load : Ġ( e po xy Model : ĠT , Ġpreload Target : ĠP , Ġview Data : ĠView Data < U >) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ): ĠE po xy Model Pre loader < T , ĠU , ĠP > Ġ= Ġobject Ġ: ĠE po xy Model Pre loader < T , ĠU , ĠP >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Type Ġ= Ġe po xy Model Class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreload ableView Ids Ġ= Ġpreload ableView Ids ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild View Metadata ( view : ĠView ) Ġ= Ġview Metadata ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġview Signature ( e po xy Model : ĠT ) Ġ= Ġview Signature ( e po xy Model ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Pre load ( e po xy Model : ĠT , Ġpreload Target : ĠP , Ġview Data : ĠView Data < U >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Pre load ( e po xy Model , Ġpreload Target , Ġview Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ