package Ġcom . air bnb . lott ie Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . animation . Value Animator . Animator Update Listener Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color Filter Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . annotation . Raw Res Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . widget . AppCompat ImageView Ċ import Ġcom . air bnb . lott ie . Lot tie Animation View 2 Ċ import Ġcom . air bnb . lott ie . Lot tie Drawable . Repeat Mode Ċ import Ġcom . air bnb . lott ie . model . Key Path Ċ import Ġcom . air bnb . lott ie . parser . mos hi . Json Reader Ċ import Ġcom . air bnb . lott ie . value . Lot tie Frame Info Ċ import Ġcom . air bnb . lott ie . value . Lot tie Value Callback Ċ import Ġcom . air bnb . lott ie . value . Simple Lot tie Value Callback Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġok io .* Ċ import Ġjava . io .* Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ /** Ċ Ġ*/ Ċ class ĠL ot tie Animation View 2 Ġ: ĠAppCompat ImageView Ġ{ ĊĠĠĠ Ġinterface ĠOn Result Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Result ( ret : ĠBoolean , Ġresponse : ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġloaded Listener Ġ= ĊĠĠĠĠĠĠĠ ĠL ot tie Listener < Lot tie Composition > Ġ{ Ġcomposition Ġ-> Ġset Composition ( composition ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġfailure Listener : ĠL ot tie Listener < Throwable > Ġ= ĠL ot tie Listener Ġ{ Ġ} ĊĠĠĠ Ġprivate Ġval Ġlo tt ie Drawable Ġ= ĠL ot tie Drawable () ĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġanimation Name : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Raw Res ĊĠĠĠ Ġprivate Ġvar Ġanimation Res Id Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġwas Anim ating When Not Shown Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġwas Anim ating When Detached Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġauto Play Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġrender Mode Ġ= ĠRender Mode . AUT OM AT IC ĊĠĠĠ Ġprivate Ġval Ġlo tt ie On Composition Loaded Listeners : ĠMutable Set < Lot tie On Composition Loaded Listener > Ġ= ĊĠĠĠĠĠĠĠ ĠHashSet () ĊĠĠĠ Ġprivate Ġvar Ġcomposition Task : ĠL ot tie Task < Lot tie Composition >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠCan Ġbe Ġnull Ġbecause Ġit Ġis Ġcreated Ġasync Ġ Ġ*/ ĊĠĠĠ Ġvar Ġcomposition : ĠL ot tie Composition ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , Ġattrs ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , Ġattrs , Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Lot tie Animation View ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Raw Res Ġ= Ġta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ raw Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas FileName Ġ= Ġta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Url Ġ= Ġta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (!( has Raw Res Ġ&& Ġhas FileName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lott ie _ raw Res Ġand Ġlo tt ie _ fileName Ġcannot Ġbe Ġused Ġat Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġsame Ġtime . ĠPlease Ġuse Ġonly Ġone Ġat Ġonce ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Raw Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Res Id Ġ= Ġta . getResource Id ( R . style able . Lot tie Animation View _ lott ie _ raw Res , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Res Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Animation ( raw Res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has FileName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġta . getString ( R . style able . Lot tie Animation View _ lott ie _ fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfileName ?. let Ġ{ Ġset Animation ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġta . getString ( R . style able . Lot tie Animation View _ lott ie _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ?. let Ġ{ Ġset Animation From Url ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . getBoolean ( R . style able . Lot tie Animation View _ lott ie _ auto Play , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Detached Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Play Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . getBoolean ( R . style able . Lot tie Animation View _ lott ie _ loop , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . repeat Count Ġ= ĠL ot tie Drawable . INF IN ITE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ repeat Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= Ġta . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Lot tie Animation View _ lott ie _ repeat Mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ot tie Drawable . RE START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ repeat Count )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġta . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Lot tie Animation View _ lott ie _ repeat Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ot tie Drawable . INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ speed )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġta . get Float ( R . style able . Lot tie Animation View _ lott ie _ speed , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġimage Assets Folder Ġ= Ġta . getString ( R . style able . Lot tie Animation View _ lott ie _ image Assets Folder ) ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġta . get Float ( R . style able . Lot tie Animation View _ lott ie _ progress , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġenable Merge Paths For Kit K at And Above ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġta . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Lot tie Animation View _ lott ie _ enable Merge Paths For Kit K at And Above , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ color Filter )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠSimple Color Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġta . getColor ( R . style able . Lot tie Animation View _ lott ie _ color Filter , ĠColor . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Path Ġ= ĠKey Path (" ** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠL ot tie Value Callback < Color Filter >( filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Value Callback ( key Path , ĠL ot tie Property . COLOR _ FILTER , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ scale )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . scale Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġta . get Float ( R . style able . Lot tie Animation View _ lott ie _ scale , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Lot tie Animation View _ lott ie _ render Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrender Mode Ordinal Ġ= Ġta . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Lot tie Animation View _ lott ie _ render Mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRender Mode . AUT OM AT IC . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( render Mode Ordinal Ġ>= ĠRender Mode . values (). size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Mode Ordinal Ġ= ĠRender Mode . AUT OM AT IC . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Mode Ġ= ĠRender Mode . values ()[ render Mode Ordinal ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set System Animations Are Enabled ( get Animation Scale ( context ) Ġ!= Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image Resource ( res Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Loader Task () ĊĠĠĠĠĠĠĠ Ġsuper . setImage Resource ( res Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image Drawable ( drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Loader Task () ĊĠĠĠĠĠĠĠ Ġsuper . setImage Drawable ( drawable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image Bitmap ( bm : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Loader Task () ĊĠĠĠĠĠĠĠ Ġsuper . setImage Bitmap ( bm ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate Drawable ( dr : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ=== Ġlo tt ie Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġalways Ġwant Ġto Ġinvalidate Ġthe Ġroot Ġdrawable Ġso Ġit Ġredraw s Ġthe Ġwhole Ġdrawable . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEvent ually Ġit Ġwould Ġbe Ġgreat Ġto Ġbe Ġable Ġto Ġinvalidate Ġjust Ġthe Ġchanged Ġregion . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . invalidate Drawable ( lott ie Drawable ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġwork Ġas Ġregular ĠImageView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . invalidate Drawable ( dr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= ĠSaved State ( super State ) ĊĠĠĠĠĠĠĠ Ġss . animation Name Ġ= Ġanimation Name ĊĠĠĠĠĠĠĠ Ġss . animation Res Id Ġ= Ġanimation Res Id ĊĠĠĠĠĠĠĠ Ġss . progress Ġ= Ġlo tt ie Drawable . progress ĊĠĠĠĠĠĠĠ Ġss . is Anim ating Ġ= Ġlo tt ie Drawable . is Anim ating ĊĠĠĠĠĠĠĠ Ġss . image Assets Folder Ġ= Ġlo tt ie Drawable . image Assets Folder ĊĠĠĠĠĠĠĠ Ġss . repeat Mode Ġ= Ġlo tt ie Drawable . repeat Mode ĊĠĠĠĠĠĠĠ Ġss . repeat Count Ġ= Ġlo tt ie Drawable . repeat Count ĊĠĠĠĠĠĠĠ Ġreturn Ġss ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ! is ĠSaved State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( ss . super State ) ĊĠĠĠĠĠĠĠ Ġanimation Name Ġ= Ġss . animation Name ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( animation Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Animation ( animation Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanimation Res Id Ġ= Ġss . animation Res Id ĊĠĠĠĠĠĠĠ Ġif Ġ( animation Res Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Animation ( animation Res Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġss . progress ĊĠĠĠĠĠĠĠ Ġif Ġ( ss . is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Images Assets Folder ( ss . image Assets Folder ) ĊĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= Ġss . repeat Mode ĊĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġss . repeat Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Visibility Changed ( changed View : ĠView , Ġvisibility : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcan Ġhappen Ġon Ġolder Ġversions Ġof ĠAndroid Ġbecause Ġon Visibility Changed Ġgets Ġcalled Ġfrom Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġconstructor Ġof ĠView Ġso Ġthis Ġwill Ġget Ġcalled Ġbefore Ġlo tt ie Drawable Ġgets Ġinitialized . ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / air bnb / lott ie - android / issues / 1 1 4 3 ĊĠĠĠĠĠĠĠ Ġ// ĠA Ġsimple Ġnull Ġcheck Ġon Ġlo tt ie Drawable Ġwould Ġnot Ġwork Ġbecause Ġwhen Ġusing ĠPro guard Ġoptimization , Ġa ĊĠĠĠĠĠĠĠ Ġ// Ġnull Ġcheck Ġon Ġa Ġfinal Ġfield Ġgets Ġremoved . ĠAs Ġ" usually " Ġfinal Ġfields Ġcannot Ġbe Ġnull . ĊĠĠĠĠĠĠĠ Ġ// ĠHowever Ġbecause Ġthis Ġis Ġcalled Ġby Ġsuper Ġ( View ) Ġbefore Ġthe Ġinitializer Ġof Ġthe ĠL ot tie Animation View ĊĠĠĠĠĠĠĠ Ġ// Ġis Ġcalled , Ġit Ġactually Ġcan Ġbe Ġnull Ġhere . ĊĠĠĠĠĠĠĠ Ġ// ĠWorking Ġaround Ġthis Ġby Ġusing Ġa Ġnon Ġfinal Ġboolean Ġthat Ġis Ġset Ġto Ġtrue Ġafter Ġthe Ġclass Ġinitializer ĊĠĠĠĠĠĠĠ Ġ// Ġhas Ġrun . ĊĠĠĠĠĠĠĠ Ġif Ġ(! isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( was Anim ating When Not Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġif Ġ( auto Play Ġ|| Ġwas Anim ating When Detached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAut oplay Ġfrom Ġxml Ġshould Ġonly Ġapply Ġonce . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġneeded Ġto Ġm imic Ġnewer Ġplatform Ġbehavior . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / a / 5 3 6 2 5 8 6 0 / 7 1 5 6 3 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Visibility Changed ( this , Ġvisibility ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Detached Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġthis Ġto Ġget Ġmerge Ġpath Ġsupport Ġfor Ġdevices Ġrunning ĠKit K at Ġ( 1 9 ) Ġand Ġabove . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ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 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġenable Merge Paths For Kit K at And Above ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . enable Merge Paths For Kit K at And Above ( enable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġmerge Ġpaths Ġare Ġenabled Ġfor ĠKit K at Ġand Ġabove . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Merge Paths Enabled For Kit K at And Above : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . is Merge Paths Enabled For Kit K at And Above ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġanimation Ġfrom Ġa Ġfile Ġin Ġthe Ġraw Ġdirectory . ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġload Ġand Ġdeserialize Ġthe Ġfile Ġasynchronously . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Animation (@ Raw Res Ġraw Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation Res Id Ġ= Ġraw Res ĊĠĠĠĠĠĠĠ Ġanimation Name Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset Composition Task ( Lot tie Composition Factory . from Raw Res ( context , Ġraw Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Animation ( asset Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation Name Ġ= Ġasset Name ĊĠĠĠĠĠĠĠ Ġanimation Res Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset Composition Task ( Lot tie Composition Factory . from Asset ( context , Ġasset Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Animation From Local ( filePath : ĠString , Ġfile Url : ĠString , Ġload Listener : ĠOn Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ) ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload From Local ( file , Ġload Listener ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( download Async ( filePath , Ġfile Url )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload From Local ( file , Ġload Listener ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Async 2 ( filePath , Ġfile Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload From Local ( file , Ġload Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Listener . on Result ( false , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( download Async ( filePath , Ġfile Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload From Local ( file , Ġload Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Listener . on Result ( false , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠ Ġfun Ġdownload Async 2 ( filePath : ĠString , Ġfile Url : ĠString ): ĠCompletableFuture < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ supply Async Ġdownload ( filePath , Ġfile Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Animation FromJson ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated ("") ĊĠĠĠ Ġfun Ġset Animation FromJson ( json String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Animation FromJson ( json String , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġanimation Ġfrom Ġjson Ġstring . ĠThis Ġis Ġthe Ġideal ĠAPI Ġto Ġuse Ġwhen Ġloading Ġan Ġanimation ĊĠĠĠĠ Ġ* Ġover Ġthe Ġnetwork Ġbecause Ġyou Ġcan Ġuse Ġthe Ġraw Ġresponse Ġbody Ġhere Ġand Ġa Ġconversion Ġto Ġa ĊĠĠĠĠ Ġ* ĠJSONObject Ġnever Ġhas Ġto Ġbe Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġfun Ġset Animation FromJson ( json String : ĠString , Ġcache Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayInputStream ( json String . toByteArray ()). source (). buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġcache Key ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġanimation Ġfrom Ġa ĠJSON Reader . ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġload Ġand Ġdeserialize Ġthe Ġfile Ġasynchronously . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġparticularly Ġuseful Ġfor Ġanimations Ġloaded Ġfrom Ġthe Ġnetwork . ĠYou Ġcan Ġfetch Ġthe ĊĠĠĠĠ Ġ* Ġbody mov in Ġjson Ġfrom Ġthe Ġnetwork Ġand Ġpass Ġit Ġdirectly Ġhere . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Animation ( reader : ĠJson Reader ?, Ġcache Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Composition Task ( Lot tie Composition Factory . fromJson Reader ( reader , Ġcache Key )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġa Ġlo tt ie Ġanimation Ġfrom Ġa Ġurl . ĠThe Ġurl Ġcan Ġbe Ġa Ġjson Ġfile Ġor Ġa Ġzip Ġfile . ĠUse Ġa Ġzip Ġfile Ġif Ġyou Ġhave Ġimages . ĠSimply Ġzip Ġthem Ġtogether Ġand Ġlo tt ie ĊĠĠĠĠ Ġ* Ġwill Ġunzip Ġand Ġlink Ġthe Ġimages Ġautomatically . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUnder Ġthe Ġh ood , ĠL ot tie Ġuses ĠJava ĠHttp URLConnection Ġbecause Ġit Ġdoesn 't Ġrequire Ġany Ġtrans itive Ġnetworking Ġdependencies . ĠIt Ġwill Ġdownload Ġthe Ġfile ĊĠĠĠĠ Ġ* Ġto Ġthe Ġapplication Ġcache Ġunder Ġa Ġtemporary Ġname . ĠIf Ġthe Ġfile Ġsuccessfully Ġparses Ġto Ġa Ġcomposition , Ġit Ġwill Ġrename Ġthe Ġtemporary Ġfile Ġto Ġone Ġthat ĊĠĠĠĠ Ġ* Ġcan Ġbe Ġaccessed Ġimmediately Ġfor Ġsubsequent Ġrequests . ĠIf Ġthe Ġfile Ġdoes Ġnot Ġparse Ġto Ġa Ġcomposition , Ġthe Ġtemporary Ġfile Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Animation From Url ( url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Composition Task ( Lot tie Composition Factory . from Url ( context , Ġurl )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDownload Ġresource Ġfrom Ġurl Ġand Ġsave Ġto Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġdownload Async ( filePath : ĠString , Ġfile Url : ĠString ): ĠBoolean Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( L . DBG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" download Async Ġ: Ġ$ filePath , Ġ$ file Url ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ coroutine Scope Ġdownload ( filePath , Ġfile Url ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Throws ( java . lang . Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġdownload ( filePath : ĠString , Ġfile Url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠinputStream : ĠBuffered InputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġfis : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġconnection Ġ= ĠURL ( file Url ). open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . request Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Code Ġ= Ġconnection . response Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( L . DBG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Ġ Ġ- Ġresponse Code Ġ$ response Code ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ== ĠHttp URLConnection . HTTP _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= ĠBuffered InputStream ( connection . inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfis Ġ= ĠFileOutputStream ( File ( filePath )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠBUFFER _ SIZE Ġ= Ġ 4 0 9 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Read : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Bytes Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( BUFFER _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( inputStream . read ( buffer ). also Ġ{ Ġbytes Read Ġ= Ġit Ġ} Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Bytes Ġ+= Ġbytes Read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfis . write ( buffer , Ġ 0 , Ġbytes Read ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( L . DBG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" download Async Ġexception Ġ: Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfis ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload From Local ( file : ĠFile , Ġload Listener : ĠOn Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation Name Ġ= Ġfile . name ĊĠĠĠĠĠĠĠ Ġanimation Res Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Composition Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ot tie Composition Factory . fromJson InputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( file ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ{ Ġcomposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Composition ( composition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Listener . on Result ( true , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ Ġresult Ġ-> Ġload Listener . on Result ( false , Ġresult . toString ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Composition Task ( composition Task : ĠL ot tie Task < Lot tie Composition >) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Composition () ĊĠĠĠĠĠĠĠ Ġcancel Loader Task () ĊĠĠĠĠĠĠĠ Ġthis . composition Task Ġ= Ġcomposition Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addListener ( loaded Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Failure Listener ( failure Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Composition Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Task : ĠL ot tie Task < Lot tie Composition >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Load Listener : ĠL ot tie Listener < Lot tie Composition >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Failure Listener : ĠL ot tie Listener < Throwable > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Composition () ĊĠĠĠĠĠĠĠ Ġcancel Loader Task () ĊĠĠĠĠĠĠĠ Ġthis . composition Task Ġ= Ġcomposition Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addListener ( lott ie Load Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Failure Listener ( lott ie Failure Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel Loader Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( composition Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Task !!. remove Listener ( loaded Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Task !!. remove Failure Listener ( failure Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġcomposition . ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġset Ġa Ġdefault Ġcache Ġstrategy Ġif Ġthis Ġview Ġwas Ġinfl ated Ġwith Ġxml Ġby ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Composition ( composition : ĠL ot tie Composition ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( L . DBG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Set ĠComp osition Ġ\ n $ composition ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . callback Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis . composition Ġ= Ġcomposition ĊĠĠĠĠĠĠĠ Ġval Ġis New Composition Ġ= Ġlo tt ie Drawable . set Composition ( composition ) ĊĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ=== Ġlo tt ie Drawable Ġ&& Ġ! isNew Composition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġavoid Ġre - setting Ġthe Ġdrawable , Ġand Ġinvalid ating Ġthe Ġview , Ġsince Ġthe Ġcomposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhasn 't Ġchanged . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġset Ġa Ġdifferent Ġcomposition Ġon Ġthe Ġview , Ġthe Ġbounds Ġwill Ġnot Ġupdate Ġunless ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġdrawable Ġis Ġdifferent Ġthan Ġthe Ġoriginal . ĊĠĠĠĠĠĠĠ Ġset Image Drawable ( null ) ĊĠĠĠĠĠĠĠ Ġset Image Drawable ( lott ie Drawable ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġneeded Ġto Ġmakes Ġsure Ġthat Ġthe Ġanimation Ġis Ġproperly Ġplayed / paused Ġfor Ġthe Ġcurrent Ġvisibility Ġstate . ĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġpossible Ġthat Ġthe Ġdrawable Ġhad Ġa Ġlazy Ġcomposition Ġtask Ġto Ġplay Ġthe Ġanimation Ġbut Ġthis Ġview Ġsubsequent ly ĊĠĠĠĠĠĠĠ Ġ// Ġbecame Ġinvisible . ĠComment Ġthis Ġout Ġand Ġrun Ġthe Ġes press o Ġtests Ġto Ġsee Ġa Ġfailing Ġtest . ĊĠĠĠĠĠĠĠ Ġon Visibility Changed ( this , Ġvisibility ) ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġfor Ġ( lott ie On Composition Loaded Listener Ġin Ġlo tt ie On Composition Loaded Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie On Composition Loaded Listener . on Composition Loaded ( composition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġany Ġlayers Ġin Ġthis Ġcomposition Ġhas Ġmasks . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Masks (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie Drawable . has Masks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġany Ġlayers Ġin Ġthis Ġcomposition Ġhas Ġa Ġmat te Ġlayer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Mat te (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie Drawable . has Mat te () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlay s Ġthe Ġanimation Ġfrom Ġthe Ġbeginning . ĠIf Ġspeed Ġis Ġ< Ġ 0 , Ġit Ġwill Ġstart Ġat Ġthe Ġend ĊĠĠĠĠ Ġ* Ġand Ġplay Ġtowards Ġthe Ġbeginning ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġplay Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . play Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCont in ues Ġplaying Ġthe Ġanimation Ġfrom Ġits Ġcurrent Ġposition . ĠIf Ġspeed Ġ< Ġ 0 , Ġit Ġwill Ġplay Ġbackwards ĊĠĠĠĠ Ġ* Ġfrom Ġthe Ġcurrent Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġresume Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . resume Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġminimum Ġframe Ġthat Ġthe Ġanimation Ġwill Ġstart Ġfrom Ġwhen Ġplaying Ġor Ġlooping . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min Frame ( start Frame : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min Frame ( start Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġminimum Ġframe Ġset Ġby Ġ[. set Min Frame ] Ġor Ġ[. set Min Progress ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmin Frame : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . min Frame ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġminimum Ġprogress Ġthat Ġthe Ġanimation Ġwill Ġstart Ġfrom Ġwhen Ġplaying Ġor Ġlooping . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min Progress ( start Progress : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min Progress ( start Progress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmaximum Ġframe Ġthat Ġthe Ġanimation Ġwill Ġend Ġat Ġwhen Ġplaying Ġor Ġlooping . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Max Frame ( end Frame : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setMax Frame ( end Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmaximum Ġframe Ġset Ġby Ġ[. setMax Frame ] Ġor Ġ[. setMax Progress ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmax Frame : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . max Frame ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmaximum Ġprogress Ġthat Ġthe Ġanimation Ġwill Ġend Ġat Ġwhen Ġplaying Ġor Ġlooping . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Max Progress (@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġend Progress : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setMax Progress ( end Progress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġminimum Ġframe Ġto Ġthe Ġstart Ġtime Ġof Ġthe Ġspecified Ġmarker . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġmarker Ġis Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min Frame ( marker Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min Frame ( marker Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmaximum Ġframe Ġto Ġthe Ġstart Ġtime Ġ+ Ġduration Ġof Ġthe Ġspecified Ġmarker . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġmarker Ġis Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Max Frame ( marker Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setMax Frame ( marker Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġminimum Ġand Ġmaximum Ġframe Ġto Ġthe Ġstart Ġtime Ġand Ġstart Ġtime Ġ+ Ġduration ĊĠĠĠĠ Ġ* Ġof Ġthe Ġspecified Ġmarker . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġmarker Ġis Ġnot Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min And Max Frame ( marker Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min And Max Frame ( marker Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Min Frame ĊĠĠĠĠ Ġ* Ġ@ see Ġ. setMax Frame ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min And Max Frame ( min Frame : ĠInt , Ġmax Frame : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min And Max Frame ( min Frame , Ġmax Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Min Progress ĊĠĠĠĠ Ġ* Ġ@ see Ġ. setMax Progress ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min And Max Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġmin Progress : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġmax Progress : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Min And Max Progress ( min Progress , Ġmax Progress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe ver ses Ġthe Ġcurrent Ġanimation Ġspeed . ĠThis Ġdoes ĠNOT Ġplay Ġthe Ġanimation . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Speed ĊĠĠĠĠ Ġ* Ġ@ see Ġ. play Animation ĊĠĠĠĠ Ġ* Ġ@ see Ġ. resume Animation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreverse Animation Speed () Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . reverse Animation Speed () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcurrent Ġplayback Ġspeed . ĠThis Ġwill Ġbe Ġ< Ġ 0 Ġif Ġthe Ġanimation Ġis Ġplaying Ġbackwards . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġplayback Ġspeed . ĠIf Ġspeed Ġ< Ġ 0 , Ġthe Ġanimation Ġwill Ġplay Ġbackwards . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġspeed : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . speed ĊĠĠĠĠĠĠĠ Ġset ( speed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . speed Ġ= Ġspeed ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Animator Update Listener ( update Listener : ĠAn imator Update Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . add Animator Update Listener ( update Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Update Listener ( update Listener : ĠAn imator Update Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . remove Animator Update Listener ( update Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Update Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . removeAll Update Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Animator Listener ( listener : ĠAn imator . Animator Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . add Animator Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Animator Listener ( listener : ĠAn imator . Animator Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . remove Animator Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Animator Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . removeAll Animator Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Repeat Count ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated ("") ĊĠĠĠ Ġfun Ġloop ( loop : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . repeat Count Ġ= Ġif Ġ( loop ) ĠValue Animator . INF IN ITE Ġelse Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġwhat Ġthis Ġanimation Ġshould Ġdo Ġwhen Ġit Ġreaches Ġthe Ġend . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġeither Ġone Ġof Ġ[ Lot tie Drawable . RE VERSE ] Ġor Ġ[ Lot tie Drawable . RE START ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġwhat Ġthis Ġanimation Ġshould Ġdo Ġwhen Ġit Ġreaches Ġthe Ġend . ĠThis ĊĠĠĠĠ Ġ* Ġsetting Ġis Ġapplied Ġonly Ġwhen Ġthe Ġrepeat Ġcount Ġis Ġeither Ġgreater Ġthan ĊĠĠĠĠ Ġ* Ġ 0 Ġor Ġ[ Lot tie Drawable . INF IN ITE ]. ĠDefaults Ġto Ġ[ Lot tie Drawable . RE START ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmode Ġ[ Lot tie Drawable . RE START ] Ġor Ġ[ Lot tie Drawable . RE VERSE ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Repeat Mode ĊĠĠĠ Ġvar Ġrepeat Mode : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . repeat Mode ĊĠĠĠĠĠĠĠ Ġset ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . repeat Mode Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġhow Ġmany Ġtimes Ġthe Ġanimation Ġshould Ġrepeat . ĠThe Ġdefault Ġvalue ĊĠĠĠĠ Ġ* Ġis Ġ 0 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnumber Ġof Ġtimes Ġthe Ġanimation Ġshould Ġrepeat , Ġor Ġ[ Lot tie Drawable . INF IN ITE ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġhow Ġmany Ġtimes Ġthe Ġanimation Ġshould Ġbe Ġrepeated . ĠIf Ġthe Ġrepeat ĊĠĠĠĠ Ġ* Ġcount Ġis Ġ 0 , Ġthe Ġanimation Ġis Ġnever Ġrepeated . ĠIf Ġthe Ġrepeat Ġcount Ġis ĊĠĠĠĠ Ġ* Ġgreater Ġthan Ġ 0 Ġor Ġ[ Lot tie Drawable . INF IN ITE ], Ġthe Ġrepeat Ġmode Ġwill Ġbe Ġtaken ĊĠĠĠĠ Ġ* Ġinto Ġaccount . ĠThe Ġrepeat Ġcount Ġis Ġ 0 Ġby Ġdefault . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcount Ġthe Ġnumber Ġof Ġtimes Ġthe Ġanimation Ġshould Ġbe Ġrepeated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrepeat Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . repeat Count ĊĠĠĠĠĠĠĠ Ġset ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . repeat Count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġis Anim ating : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . is Anim ating ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġyour Ġimages Ġare Ġlocated Ġin Ġsrc / main / assets / air bnb _ loader / Ġthen Ġcall ĊĠĠĠĠ Ġ* Ġ` setImage Assets Folder (" air bnb _ loader /"); `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ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 Ġhttp :// 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 : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . image Assets Folder ĊĠĠĠĠĠĠĠ Ġset ( image Assets Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Images Assets Folder ( image Assets Folder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllows Ġyou Ġto Ġmodify Ġor Ġclear Ġa Ġbitmap Ġthat Ġwas Ġloaded Ġfor Ġan Ġimage Ġeither Ġautomatically ĊĠĠĠĠ Ġ* Ġthrough Ġ[. setImage Assets Folder ] Ġor Ġwith Ġan Ġ[ Image Asset Delegate ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġprevious ĠBitmap Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Bitmap ( id : ĠString ?, Ġbitmap : ĠBitmap ?): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie Drawable . update Bitmap ( id , Ġbitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ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 Ġhttp :// air bnb . io / lott ie Ġfor Ġmore Ġinformation Ġabout Ġimporting Ġshapes Ġfrom ĊĠĠĠĠ Ġ* ĠSk etch Ġor ĠIll ustr ator Ġto Ġavoid Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Image Asset Delegate ( asset Delegate : ĠImage Asset Delegate ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setImage Asset Delegate ( asset Delegate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthis Ġto Ġmanually Ġset Ġfonts . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Font Asset Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Delegate : ĠFont Asset Delegate ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setFont Asset Delegate ( asset Delegate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthis Ġto Ġreplace Ġanimation Ġtext Ġwith Ġcustom Ġtext Ġat Ġruntime ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Text Delegate ( text Delegate : ĠText Delegate ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . setText Delegate ( text Delegate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġa Ġ[ Key Path ], Ġpotentially Ġwith Ġwild cards Ġor Ġglob stars Ġand Ġresolve Ġit Ġto Ġa Ġlist Ġof ĊĠĠĠĠ Ġ* Ġzero Ġor Ġmore Ġactual Ġ[ Key paths ][ Key Path ] Ġthat Ġexist Ġin Ġthe Ġcurrent Ġanimation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġwant Ġto Ġset Ġvalue Ġcallbacks Ġfor Ġany Ġof Ġthese Ġvalues , Ġit Ġis Ġrecommended Ġto Ġuse Ġthe ĊĠĠĠĠ Ġ* Ġreturned Ġ[ Key Path ] Ġobjects Ġbecause Ġthey Ġwill Ġbe Ġinternally Ġresolved Ġto Ġtheir Ġcontent ĊĠĠĠĠ Ġ* Ġand Ġwon 't Ġtrigger Ġa Ġtree Ġwalk Ġof Ġthe Ġanimation Ġcontents Ġwhen Ġapplied . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresolve Key Path ( key Path : ĠKey Path ?): ĠList < Key Path > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie Drawable . resolve Key Path ( key Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġproperty Ġcallback Ġfor Ġthe Ġspecified Ġ[ Key Path ]. ĠThis Ġ[ Key Path ] Ġcan Ġresolve ĊĠĠĠĠ Ġ* Ġto Ġmultiple Ġcontents . ĠIn Ġthat Ġcase , Ġthe Ġcallback 's Ġvalue Ġwill Ġapply Ġto Ġall Ġof Ġthem . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIntern ally , Ġthis Ġwill Ġcheck Ġif Ġthe Ġ[ Key Path ] Ġhas Ġalready Ġbeen Ġresolved Ġwith ĊĠĠĠĠ Ġ* Ġ[. resolve Key Path ] Ġand Ġwill Ġresolve Ġit Ġif Ġit Ġhasn 't . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġadd Value Callback ( key Path : ĠKey Path ?, Ġproperty : ĠT , Ġcallback : ĠL ot tie Value Callback < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . add Value Callback ( key Path , Ġproperty , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOver load Ġof Ġ[. add Value Callback ] Ġthat Ġtakes Ġan Ġinterface . ĠThis Ġallows Ġyou Ġto Ġuse Ġa Ġsingle Ġabstract ĊĠĠĠĠ Ġ* Ġmethod Ġcode Ġblock Ġin ĠKotlin Ġsuch Ġas : ĊĠĠĠĠ Ġ* Ġanimation View . add Value Callback ( your Key Path , ĠL ot tie Property . COLOR ) Ġ{ Ġyour Color Ġ} ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġadd Value Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Path : ĠKey Path ?, Ġproperty : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : ĠSimple Lot tie Value Callback < T > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . add Value Callback ( key Path , Ġproperty , Ġobject Ġ: ĠL ot tie Value Callback < T >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( frame Info : ĠL ot tie Frame Info < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcallback . getValue ( frame Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġscale Ġon Ġthe Ġcurrent Ġcomposition . ĠThe Ġonly Ġcost Ġof Ġthis Ġfunction Ġis Ġre - rendering Ġthe ĊĠĠĠĠ Ġ* Ġcurrent Ġframe Ġso Ġyou Ġmay Ġcall Ġit Ġfrequent Ġto Ġscale Ġsomething Ġup Ġor Ġdown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġsmaller Ġthe Ġanimation Ġis , Ġthe Ġbetter Ġthe Ġperformance Ġwill Ġbe . ĠYou Ġmay Ġfind Ġthat Ġscaling Ġan ĊĠĠĠĠ Ġ* Ġanimation Ġdown Ġthen Ġrendering Ġit Ġin Ġa Ġlarger ĠImageView Ġand Ġletting ĠImageView Ġscale Ġit Ġback Ġup ĊĠĠĠĠ Ġ* Ġwith Ġa Ġscale Type Ġsuch Ġas Ġcenter Inside Ġwill Ġyield Ġbetter Ġperformance Ġwith Ġlittle Ġper ceiv able ĊĠĠĠĠ Ġ* Ġquality Ġloss . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġalso Ġuse Ġa Ġfixed Ġview Ġwidth / height Ġin Ġconjunction Ġwith Ġthe Ġnormal ĠImageView ĊĠĠĠĠ Ġ* Ġscale Types Ġcenter Crop Ġand Ġcenter Inside . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġscale : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . scale ĊĠĠĠĠĠĠĠ Ġset ( scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . scale Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ=== Ġlo tt ie Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Drawable ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Drawable ( lott ie Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġcancel Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . cancel Animation () ĊĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġfun Ġpause Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġauto Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwas Anim ating When Detached Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwas Anim ating When Not Shown Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . pause Animation () ĊĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrently Ġrendered Ġframe . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġprogress Ġto Ġthe Ġspecified Ġframe . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġcomposition Ġisn 't Ġset Ġyet , Ġthe Ġprogress Ġwill Ġbe Ġset Ġto Ġthe Ġframe Ġwhen ĊĠĠĠĠ Ġ* Ġit Ġis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġframe : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . frame ĊĠĠĠĠĠĠĠ Ġset ( frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . frame Ġ= Ġframe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) ĊĠĠĠ Ġvar Ġprogress : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . progress ĊĠĠĠĠĠĠĠ Ġset ( progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Drawable . progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġduration : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( composition Ġ!= Ġnull ) Ġcomposition !!. duration . to Long () Ġelse Ġ 0 ĊĊĠĠĠ Ġfun Ġset Performance Tracking Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . set Performance Tracking Enabled ( enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġperformance Tracker : ĠPerformance Tracker ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlo tt ie Drawable . performance Tracker ĊĊĠĠĠ Ġprivate Ġfun Ġclear Composition () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposition Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlo tt ie Drawable . clear Composition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġrendering Ġvia Ġsoftware , ĠAndroid Ġwill Ġfail Ġto Ġgenerate Ġa Ġbitmap Ġif Ġthe Ġview Ġis Ġtoo Ġlarge . ĠR ather Ġthan Ġdisplaying ĊĠĠĠĠ Ġ* Ġnothing , Ġfallback Ġon Ġhardware Ġacceleration Ġwhich Ġmay Ġin cur Ġa Ġperformance Ġhit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. set Render Mode ĊĠĠĠĠ Ġ* Ġ@ see ĠL ot tie Drawable . draw ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġbuild Drawing Cache ( auto Scale : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build Drawing Cache ( auto Scale ) ĊĠĠĠĠĠĠĠ Ġif Ġ( layer Type Ġ== ĠLAY ER _ TYPE _ SOFTWARE Ġ&& Ġget Drawing Cache ( auto Scale ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Render Mode ( Render Mode . HARD WARE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġto Ġset Ġwhether Ġor Ġnot Ġto Ġrender Ġwith Ġhardware Ġor Ġsoftware Ġacceleration . ĊĠĠĠĠ Ġ* ĠL ot tie Ġdefaults Ġto ĠAutomatic Ġwhich Ġwill Ġuse Ġhardware Ġacceleration Ġunless : ĊĠĠĠĠ Ġ* Ġ 1 ) ĠThere Ġare Ġdash Ġpaths Ġand Ġthe Ġdevice Ġis Ġpre - Pie . ĊĠĠĠĠ Ġ* Ġ 2 ) ĠThere Ġare Ġmore Ġthan Ġ 4 Ġmasks Ġand Ġmat tes Ġand Ġthe Ġdevice Ġis Ġpre - Pie . ĊĠĠĠĠ Ġ* ĠHardware Ġacceleration Ġis Ġgenerally Ġfaster Ġfor Ġthose Ġdevices Ġunless ĊĠĠĠĠ Ġ* Ġthere Ġare Ġmany Ġlarge Ġmat tes Ġand Ġmasks Ġin Ġwhich Ġcase Ġthere Ġis Ġa Ġton ĊĠĠĠĠ Ġ* Ġof ĠGPU Ġupload Texture Ġthr ashing Ġwhich Ġmakes Ġit Ġmuch Ġslower . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIn Ġmost Ġcases , Ġhardware Ġrendering Ġwill Ġbe Ġfaster , Ġeven Ġif Ġyou Ġhave Ġmat tes Ġand Ġmasks . ĊĠĠĠĠ Ġ* ĠHowever , Ġif Ġyou Ġhave Ġmultiple Ġmat tes Ġand Ġmasks Ġ( espec ially Ġlarge Ġones ) Ġthen Ġyou ĊĠĠĠĠ Ġ* Ġshould Ġtest Ġboth Ġrender Ġmodes . ĠYou Ġshould Ġalso Ġtest Ġon Ġpre - Pie Ġand ĠP ie + Ġdevices ĊĠĠĠĠ Ġ* Ġbecause Ġthe Ġunderlying Ġrendering Ġeng inge Ġchanged Ġsignificantly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Render Mode ( render Mode : ĠRender Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . render Mode Ġ= Ġrender Mode ĊĠĠĠĠĠĠĠ Ġenable Or Disable Hardware Layer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Or Disable Hardware Layer () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlayer Type Ġ= ĠLAY ER _ TYPE _ SOFTWARE ĊĠĠĠĠĠĠĠ Ġwhen Ġ( render Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender Mode . HARD WARE Ġ-> Ġlayer Type Ġ= ĠLAY ER _ TYPE _ HARD WARE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender Mode . SOFTWARE Ġ-> Ġlayer Type Ġ= ĠLAY ER _ TYPE _ SOFTWARE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender Mode . AUT OM AT IC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuse Hardware Layer Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( composition Ġ!= Ġnull Ġ&& Ġcomposition !!. has Dash Pattern () Ġ&& ĠBuild . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Hardware Layer Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( composition Ġ!= Ġnull Ġ&& Ġcomposition !!. mask And Mat te Count Ġ> Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Hardware Layer Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Hardware Layer Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Type Ġ= Ġif Ġ( use Hardware Layer ) ĠLAY ER _ TYPE _ HARD WARE Ġelse ĠLAY ER _ TYPE _ SOFTWARE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( layer Type Ġ!= Ġget Layer Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Layer Type ( layer Type , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Lot tie On Composition Loaded Listener ( lott ie On Composition Loaded Listener : ĠL ot tie On Composition Loaded Listener ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomposition Ġ= Ġcomposition ĊĠĠĠĠĠĠĠ Ġif Ġ( composition Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie On Composition Loaded Listener . on Composition Loaded ( composition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie On Composition Loaded Listeners . add ( lott ie On Composition Loaded Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Lot tie On Composition Loaded Listener ( lott ie On Composition Loaded Listener : ĠL ot tie On Composition Loaded Listener ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie On Composition Loaded Listeners . remove ( lott ie On Composition Loaded Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Lot tie On Composition Loaded Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie On Composition Loaded Listeners . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSaved State Ġ: ĠBase Saved State Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġanimation Name : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġanimation Res Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġprogress Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġis Anim ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġimage Assets Folder : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġrepeat Mode Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġrepeat Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconstructor ( super State : ĠParcel able ?) Ġ: Ġsuper ( super State ) Ġ{} ĊĠĠĠĠĠĠĠ Ġprivate Ġconstructor (` in `: ĠParcel ) Ġ: Ġsuper (` in `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Name Ġ= Ġ` in `. readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ` in `. read Float () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġ` in `. readInt () Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Assets Folder Ġ= Ġ` in `. readString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( out : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( out , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeString ( animation Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Float ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( if Ġ( is Anim ating ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeString ( image Assets Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( repeat Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( repeat Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field Ġval ĠCRE ATOR : ĠParcel able . Creator < Saved State ?> Ġ= Ġobject Ġ: ĠParcel able . Creator < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( p : ĠParcel ): ĠSaved State ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSaved State ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Animation Scale ( context : ĠContext ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . Global . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . Global . ANIM ATOR _ DURATION _ SCALE , Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . System . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . System . ANIM ATOR _ DURATION _ SCALE , Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠL ot tie Animation View 2 :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }