package Ġcom . air bnb . lott ie . compose Ċ Ċ import Ġandroidx . compose . runtime .* Ċ import Ġcom . air bnb . lott ie . Image Asset Delegate Ċ import Ġcom . air bnb . lott ie . Lot tie Drawable Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Lot tie Animation State ] Ġand Ġremember Ġit Ċ Ġ* Ċ Ġ* Ġ@ param Ġauto Play ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . is Playing ] Ċ Ġ* Ġ@ param Ġrepeat Count ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . repeat Count ] Ċ Ġ* Ġ@ param Ġinitial Progress ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . progress ] Ċ Ġ* Ġ@ param Ġenable Merge Paths ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . enable Merge Paths ] Ċ Ġ* Ġ@ param Ġimage Assets Folder ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . image Assets Folder ] Ċ Ġ* Ġ@ param Ġimage Asset Delegate ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . image Asset Delegate ] Ċ Ġ*/ Ċ @ Composable Ċ fun Ġremember Lot tie Animation State ( ĊĠĠĠ Ġauto Play : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġrepeat Count : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġinitial Progress : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠ Ġenable Merge Paths : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġimage Assets Folder : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġimage Asset Delegate : ĠImage Asset Delegate ? Ġ= Ġnull , Ċ Ċ ): ĠL ot tie Animation State Ġ{ ĊĠĠĠ Ġ// ĠUse Ġremember Saved InstanceState Ġso Ġyou Ġcan Ġpause / resume Ġanimations ĊĠĠĠ Ġreturn Ġremember ( repeat Count , Ġauto Play ) Ġ{ ĊĠĠĠĠĠĠĠ ĠL ot tie Animation State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġauto Play , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġrepeat Count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Progress Ġ= Ġinitial Progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Merge Paths Ġ= Ġenable Merge Paths , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Assets Folder Ġ= Ġimage Assets Folder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Asset Delegate Ġ= Ġimage Asset Delegate , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠState Ġof Ġthe Ġ[ Lot tie Animation ] Ġcomp osable Ċ Ġ* Ċ Ġ* Ġ@ param Ġis Playing ĠInitial Ġvalue Ġfor Ġ[ is Playing ] Ċ Ġ* Ġ@ param Ġrepeat Count ĠInitial Ġvalue Ġfor Ġ[ repeat Count ] Ċ Ġ* Ġ@ param Ġinitial Progress ĠInitial Ġvalue Ġfor Ġ[ progress ] Ċ Ġ* Ġ@ param Ġenable Merge Paths ĠInitial Ġvalue Ġfor Ġ[ enable Merge Paths ] Ċ Ġ* Ġ@ param Ġimage Assets Folder ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . image Assets Folder ] Ċ Ġ* Ġ@ param Ġimage Asset Delegate ĠInitial Ġvalue Ġfor Ġ[ Lot tie Animation State . image Asset Delegate ] Ċ Ġ* Ċ Ġ* Ġ@ see Ġremember Lot tie Animation State Ċ Ġ*/ Ċ class ĠL ot tie Animation State ( ĊĠĠĠ Ġis Playing : ĠBoolean , ĊĠĠĠ Ġrepeat Count : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġinitial Progress : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠ Ġenable Merge Paths : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġimage Assets Folder : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġimage Asset Delegate : ĠImage Asset Delegate ? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġprogress Ġby Ġmutable State Of ( initial Progress ) ĊĊĠĠĠ Ġ// ĠTODO : Ġmake Ġthis Ġpublic ĊĠĠĠ Ġprivate Ġvar Ġ_ frame Ġ= Ġmutable State Of ( 0 ) ĊĠĠĠ Ġval Ġframe : ĠInt Ġby Ġ_ frame ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġthe Ġanimation Ġis Ġcurrently Ġplaying . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Playing Ġby Ġmutable State Of ( is Playing ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHow Ġmany Ġtimes Ġthe Ġanimation Ġwill Ġbe Ġplayed . ĠUse Ġ[ Int . MAX _ VALUE ] Ġfor ĊĠĠĠĠ Ġ* Ġinfinite Ġrepet itions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrepeat Count Ġby Ġmutable State Of ( repeat Count ) ĊĊĠĠĠ Ġvar Ġspeed Ġby Ġmutable State Of ( 1 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġthis Ġto Ġdebug Ġslow Ġanimations Ġby Ġout lining Ġmasks Ġand Ġmat tes . ĠThe Ġperformance Ġoverhead Ġof Ġthe Ġmasks Ġand Ġmat tes Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġpro portional Ġto Ġthe Ġsurface Ġarea Ġof Ġall Ġof Ġthe Ġmasks / mat tes Ġcombined . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠDO ĠNOT Ġleave Ġthis Ġenabled Ġin Ġproduction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġoutline Masks And Mat tes Ġby Ġmutable State Of ( false ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġwhether Ġto Ġapply Ġopacity Ġto Ġthe Ġeach Ġlayer Ġinstead Ġof Ġshape . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠOp acity Ġis Ġnormally Ġapplied Ġdirectly Ġto Ġa Ġshape . ĠIn Ġcases Ġwhere Ġtrans luc ent Ġshapes Ġoverlap , Ġapplying Ġopacity Ġto Ġa Ġlayer Ġwill Ġbe Ġmore Ġaccurate ĊĠĠĠĠ Ġ* Ġat Ġthe Ġexpense Ġof Ġperformance . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠThe Ġdefault Ġvalue Ġis Ġfalse . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠNote : ĠThis Ġprocess Ġis Ġvery Ġexpensive Ġand Ġwill Ġin cur Ġadditional Ġperformance Ġoverhead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġapply Opacity To Layers Ġby Ġmutable State Of ( false ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġthis Ġto Ġget Ġmerge Ġpath Ġsupport . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠMerge Ġpaths Ġcurrently Ġdon 't Ġwork Ġif Ġthe Ġthe Ġoperand Ġshape Ġis Ġentirely Ġcontained Ġwithin Ġthe ĊĠĠĠĠ Ġ* Ġfirst Ġshape . ĠIf Ġyou Ġneed Ġto Ġcut Ġout Ġone Ġshape Ġfrom Ġanother Ġshape , Ġuse Ġan Ġeven - odd Ġfill Ġtype ĊĠĠĠĠ Ġ* Ġinstead Ġof Ġusing Ġmerge Ġpaths . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠIf Ġyour Ġanimation Ġcontains Ġmerge Ġpaths Ġand Ġyou Ġare Ġencounter ing Ġrendering Ġissues , Ġdisabling ĊĠĠĠĠ Ġ* Ġmerge Ġpaths Ġmight Ġhelp . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġenable Merge Paths Ġby Ġmutable State Of ( enable Merge Paths ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġuse Ġimage Ġassets , Ġyou Ġmust Ġexplicitly Ġspecify Ġthe Ġfolder Ġin Ġassets / Ġin Ġwhich Ġthey Ġare ĊĠĠĠĠ Ġ* Ġlocated Ġbecause Ġbody mov in Ġuses Ġthe Ġname Ġfilenames Ġacross Ġall Ġcomposition s Ġ( img _ # ). ĊĠĠĠĠ Ġ* ĠDo ĠNOT Ġrename Ġthe Ġimages Ġthemselves . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠIf Ġyour Ġimages Ġare Ġlocated Ġin Ġsrc / main / assets / air bnb _ loader / Ġthen Ġset Ġthis Ġto Ġ" air bnb _ loader ". ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠBe Ġw ary Ġif Ġyou Ġare Ġusing Ġmany Ġimages , Ġhowever . ĠL ot tie Ġis Ġdesigned Ġto Ġwork Ġwith Ġvector Ġshapes ĊĠĠĠĠ Ġ* Ġfrom ĠAfter ĠEffect s . ĠIf Ġyour Ġimages Ġlook Ġlike Ġthey Ġcould Ġbe Ġrepresented Ġwith Ġvector Ġshapes , ĊĠĠĠĠ Ġ* Ġsee Ġif Ġit Ġis Ġpossible Ġto Ġconvert Ġthem Ġto Ġshape Ġlayers Ġand Ġre - export Ġyour Ġanimation . ĠCheck ĊĠĠĠĠ Ġ* Ġthe Ġdocumentation Ġat Ġhttps :// air bnb . io / lott ie Ġfor Ġmore Ġinformation Ġabout Ġimporting Ġshapes Ġfrom ĊĠĠĠĠ Ġ* ĠSk etch Ġor ĠIll ustr ator Ġto Ġavoid Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġimage Assets Folder Ġby Ġmutable State Of ( image Assets Folder ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthis Ġif Ġyou Ġcan 't Ġbundle Ġimages Ġwith Ġyour Ġapp . ĠThis Ġmay Ġbe Ġuseful Ġif Ġyou Ġdownload Ġthe ĊĠĠĠĠ Ġ* Ġanimations Ġfrom Ġthe Ġnetwork Ġor Ġhave Ġthe Ġimages Ġsaved Ġto Ġan ĠSD ĠCard . ĠIn Ġthat Ġcase , ĠL ot tie ĊĠĠĠĠ Ġ* Ġwill Ġdefer Ġthe Ġloading Ġof Ġthe Ġbitmap Ġto Ġthis Ġdelegate . ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠBe Ġw ary Ġif Ġyou Ġare Ġusing Ġmany Ġimages , Ġhowever . ĠL ot tie Ġis Ġdesigned Ġto Ġwork Ġwith Ġvector Ġshapes ĊĠĠĠĠ Ġ* Ġfrom ĠAfter ĠEffect s . ĠIf Ġyour Ġimages Ġlook Ġlike Ġthey Ġcould Ġbe Ġrepresented Ġwith Ġvector Ġshapes , ĊĠĠĠĠ Ġ* Ġsee Ġif Ġit Ġis Ġpossible Ġto Ġconvert Ġthem Ġto Ġshape Ġlayers Ġand Ġre - export Ġyour Ġanimation . ĠCheck ĊĠĠĠĠ Ġ* Ġthe Ġdocumentation Ġat Ġhttps :// air bnb . io / lott ie Ġfor Ġmore Ġinformation Ġabout Ġimporting Ġshapes Ġfrom ĊĠĠĠĠ Ġ* ĠSk etch Ġor ĠIll ustr ator Ġto Ġavoid Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġimage Asset Delegate Ġby Ġmutable State Of ( image Asset Delegate ) ĊĊĠĠĠ Ġinternal Ġfun Ġupdate Frame ( frame : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ frame . value Ġ= Ġframe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Is Playing () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Playing Ġ= Ġ! is Playing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply To ( drawable : ĠL ot tie Drawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable . progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠ Ġdrawable . set Outline Masks And Mat tes ( outline Masks And Mat tes ) ĊĠĠĠĠĠĠĠ Ġdrawable . is Apply ing Opacity To Layers Enabled Ġ= Ġapply Opacity To Layers ĊĠĠĠĠĠĠĠ Ġdrawable . enable Merge Paths For Kit K at And Above ( enable Merge Paths ) ĊĠĠĠ Ġ} Ċ }