package Ġcom . f err an p ons . cli ppy lib Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Animation Drawable Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Random Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ import Ġcom . f err an p ons . cli ppy lib . backend . Agent Service Ċ import Ġcom . f err an p ons . cli ppy lib . model . Agent Type Ċ import Ġcom . f err an p ons . cli ppy lib . model . gui . Ui Agent Ċ import Ġcom . f err an p ons . cli ppy lib . model . gui . Ui Animation Ċ import Ġcom . f err an p ons . cli ppy lib . utils . Animation Util Ċ import Ġcom . f err an p ons . cli ppy lib . utils . O Ċ import Ġcom . f err an p ons . cli ppy lib . view . Custom Animation Drawable New Ċ import Ġcom . f err an p ons . cli ppy lib . view . Floating View Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠAgent Controller Impl ( override Ġval Ġagent Type : ĠAgent Type , Ġprivate Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġagent Service : ĠAgent Service ) Ġ: ĠAgent Controller Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġis Mute : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġfloating View : ĠFloating View Ġ= ĠFloating View ( context ) ĊĊĠĠĠ Ġprivate Ġvar Ġframe Layout : ĠFrame Layout Ġ= ĠFrame Layout ( context ) ĊĠĠĠ Ġprivate Ġvar Ġimage Layer : ĠMutable List < ImageView >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠprogressBar : ĠProgress Bar ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġvar Ġanimation Runnable : ĠAnimation Runnable ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġanimation Is Running Ġ= ĠAtomic Boolean ( true ) ĊĊĠĠĠ Ġoverride Ġvar Ġis K illed Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġis Initialized Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġagent Controller Listener : ĠWeak Reference < Agent Controller Listener >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġis Running : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanimation Is Running . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġanimation Delay : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Pause Ġ= ĠGlobal . INSTANCE . settings Storage . animation Pause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanimation Pause . random Pause . to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġload Agent Data Ġ= Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠ Ġobject Ġ: ĠAsync Task < Agent Type , ĠVoid , ĠO < Ui Agent >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġagent Types : ĠAgent Type ): ĠO < Ui Agent > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġagent Service . get Ui Agent ( context , Ġagent Types [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( ui Agent O : ĠO < Ui Agent >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Agent Ġdata Ġsuccessfully Ġloaded ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Agent ( ui Agent O ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġload Agent Data . execute ( agent Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġkill () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ Ġstop ( false ) ĊĠĠĠĠĠĠĠ Ġthis . is K illed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . floating View . kill () ĊĠĠĠĠĠĠĠ ĠGlobal . INSTANCE . agent Storage . is Agent Stop Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( user : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġagent Ġstopped Ġby Ġuser Ġ.. Ġstop Ġagent Ġand Ġsave Ġstate ĊĠĠĠĠĠĠĠ Ġif Ġ( user ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal . INSTANCE . agent Storage . is Agent Stop Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanimation Is Running . set ( false ) ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( animation Runnable ) ĊĊĠĠĠĠĠĠĠ Ġimage Layer !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . background Ġ!= Ġnull Ġ&& Ġit . background Ġis ĠAnimation Drawable Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( it . background Ġas ĠAnimation Drawable ). stop () Ġ} ĊĊĠĠĠĠĠĠĠ Ġreset Images () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( agent Controller Listener Ġ!= Ġnull Ġ&& Ġagent Controller Listener !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent Controller Listener !!. get ()?. state Changed ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( user : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĊĠĠĠĠĠĠĠ Ġval Ġstopped ByUser Ġ= ĠGlobal . INSTANCE . agent Storage ?. is Agent Stop ĊĠĠĠĠĠĠĠ Ġ// Ġuser Ġ-> Ġtrue Ġ... Ġalways Ġstart ĊĠĠĠĠĠĠĠ Ġ// Ġuser Ġ-> Ġfalse Ġ|| Ġstopped ByUser Ġ-> Ġfalse ĊĊĠĠĠĠĠĠĠ ĠTim ber . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Start Ġagent : Ġuser : Ġ% s , Ġstopped ByUser : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser , Ġstopped ByUser ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ|| Ġ! user Ġ&& Ġ! stopped ByUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Starting Ġagent ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal . INSTANCE . agent Storage . is Agent Stop Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animation Is Running . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( animation Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( agent Controller Listener Ġ!= Ġnull Ġ&& Ġagent Controller Listener !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagent Controller Listener !!. get ()?. state Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Not Ġstarting Ġagent ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmute () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Mute Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( agent Controller Listener Ġ!= Ġnull Ġ&& Ġagent Controller Listener !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent Controller Listener !!. get ()?. volume Changed ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun Mute () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Mute Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( agent Controller Listener Ġ!= Ġnull Ġ&& Ġagent Controller Listener !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent Controller Listener !!. get ()?. volume Changed ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Agent Controller Listener ( agent Controller Listener : ĠAgent Controller Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . agent Controller Listener Ġ= ĠWeak Reference ( agent Controller Listener ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Init Ġview ") ĊĊĠĠĠĠĠĠĠ Ġframe Layout Ġ= ĠFrame Layout ( context ) ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠProgress Bar ( context ) ĊĊĠĠĠĠĠĠĠ Ġframe Layout . addView ( progress Bar ) ĊĠĠĠĠĠĠĠ Ġfloating View . addView ( frame Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Agent ( agent Option : ĠO < Ui Agent >) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ Ġif Ġ( agent Option . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Display Ġagent : Ġ% s ", Ġagent Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagent Ġ= Ġagent Option . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer Ġ= ĠArrayList ( agent !!. overlay Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġagent . overlay Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer !!. add ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Layout . addView ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar !!. visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer ! ![ 0 ]. setBackground Drawable ( Context Compat . get Drawable ( context , Ġagent . first Image )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Initial Ġstart Ġanimation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation ( agent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( agent Controller Listener Ġ!= Ġnull Ġ&& Ġagent Controller Listener !!. get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagent Controller Listener !!. get ()?. state Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Failure Ġduring Ġloading Ġagent Ġdata Ġ: (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( agent Option . error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Animation ( agent : ĠUi Agent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ Ġreset Images () ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Delay Ġ= Ġanimation Delay ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Start Ġanimation Ġin Ġ% s Ġms ", Ġanimation Delay ) ĊĊĠĠĠĠĠĠĠ Ġthis . animation Runnable Ġ= ĠAnimation Runnable ( agent ) ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this . animation Runnable , Ġanimation Delay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Sound Handler ( sound Map : ĠList < Animation Util . Sound Mapping >) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Start Ġsound Ġhandler ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( sound Mapping Ġin Ġsound Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ( Sound Runnable ( sound Mapping . sound Id ), Ġsound Mapping . time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetRandom Animation ( ui Agent : ĠUi Agent ): ĠUi Animation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠArrayList ( ui Agent . animations . keys ) ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠRandom (). nextInt ( keys . size Ġ- Ġ 1 ) Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Random Ġanimation : Ġ% s ", Ġkeys [ i ]) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġui Agent . animations [ keys [ i ]] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Alive () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is K illed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Agent Ġis Ġdead , Ġlong Ġlive Ġthe Ġagent Ġ... Ġbut Ġthis Ġone Ġis Ġreally Ġdead ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Floating View Ġis Ġdead Ġx . x ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Images () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive () ĊĠĠĠĠĠĠĠ Ġimage Layer ! ![ 0 ]. setBackground Drawable ( Context Compat . get Drawable ( context , Ġagent Type . agent Mapping . first Frame Id )) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġimage Layer !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer ! ![ i ]. setBackground Drawable ( Context Compat . get Drawable ( context , Ġagent Type . agent Mapping . empty Frame Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSound Runnable Ġinternal Ġconstructor ( private Ġval Ġsound : ĠInt ) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Execute Ġsound Ġrunnable : ĠId : Ġ% s , Ġis Animation Running : Ġ% s , Ġis K illed : Ġ% s , Ġis Mute : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound , Ġanimation Is Running . get (), Ġis K illed , Ġis Mute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animation Is Running . get () Ġ&& Ġ! is K illed Ġ&& Ġ! is Mute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= ĠMedia Player . create ( this @ Agent Controller Impl . context , Ġsound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠAnimation Runnable ( private Ġval Ġagent : ĠUi Agent ) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Execute Ġanimation Runnable : Ġimage Ġlayer Ġnull : Ġ% s , Ġ# image layer : Ġ% s , Ġkilled : Ġ% s , Ġanimation Running : Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer Ġ== Ġnull , Ġif Ġ( image Layer Ġ!= Ġnull ) Ġimage Layer !!. size Ġelse Ġ 0 , Ġis K illed , Ġanimation Is Running . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Layer Ġ!= Ġnull Ġ&& Ġimage Layer !!. size Ġ> Ġ 0 Ġ&& Ġ! is K illed Ġ&& Ġanimation Is Running . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġui Animation Ġ= ĠgetRandom Animation ( agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Drawable Ġ= ĠAnimation Util . get Animation Drawable ( this @ Agent Controller Impl . context , Ġui Animation !! , Ġagent . overlay Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Draw ables Ġ= Ġanimation Drawable . animation Draw ables ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( imageView Ġin Ġimage Layer !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setBackground Drawable ( Context Compat . get Drawable ( context , Ġagent Type . agent Mapping . empty Frame Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Layer Ġ= Ġobject Ġ: ĠCustom Animation Drawable New ( animation Drawable . animation Draw ables [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animation Is Running . get () Ġ&& Ġ! is K illed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation ( agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer ! ![ 0 ]. setBackground Drawable ( first Layer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġanimation Draw ables . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Layer ! ![ i ]. setBackground Drawable ( animation Draw ables [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( imageView Ġin Ġimage Layer !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( imageView . background Ġas ĠAnimation Drawable ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Sound Handler ( animation Drawable . sound Mappings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ