/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 ĠDe vm il ĠSolutions Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġde . dev mil . paper launch . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġde . dev mil . paper launch . model . I Entry Ċ import Ġde . dev mil . paper launch . view . utils . View Utils Ċ Ċ internal Ġclass ĠLoad Params ( var Ġtarget : ĠImageView , Ġvar Ġentry : ĠLaunch Entry ViewModel , Ġvar Ġcontext : ĠContext ) Ċ Ċ internal Ġclass ĠLoad Icon Task Ġ: ĠAsync Task < Load Params , ĠVoid , ĠVoid >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġparams : ĠLoad Params ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġparams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġp . entry . app Icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . target . post Ġ{ Ġp . target . setImage Drawable ( icon ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLaunch Entry View Ġ: ĠLinearLayout Ġ{ ĊĠĠĠ Ġprivate Ġvar ĠviewModel : ĠLaunch Entry ViewModel ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġimg Frame : ĠLinearLayout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapp Icon : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġload Task : ĠLoad Icon Task ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstruct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstruct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstruct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Initialize ( viewModel : ĠLaunch Entry ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġadapt Model State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġentry : ĠI Entry ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠviewModel !!. entry ĊĊĠĠĠ Ġfun ĠsetState ( state : ĠLaunch Entry ViewModel . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Image Parameters ( state , Ġfalse , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġgoto State ( state : ĠLaunch Entry ViewModel . State , Ġdelay : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel ?. state Ġ=== Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel ?. state ?. is Animation State For ( state ) Ġ!= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġset Image Parameters ( state , Ġtrue , Ġdelay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstruct () Ġ{ ĊĠĠĠĠĠĠĠ ĠView Utils . disable Cli pping ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadapt Model State () Ġ{ ĊĠĠĠĠĠĠĠ Ġapply Parameters () ĊĊĠĠĠĠĠĠĠ Ġset Image Parameters ( viewModel !!. state , Ġfalse , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove All Views () ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal ViewModel Ġ= ĠviewModel !! ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal Img Frame Ġ= ĠLinearLayout ( context ) ĊĠĠĠĠĠĠĠ Ġlocal Img Frame . set BackgroundColor ( local ViewModel . frame Default Color ) ĊĠĠĠĠĠĠĠ Ġval Ġimg Frame Params Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġval Ġmargins Frame Px Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . entries Margin Dip ). toInt () ĊĠĠĠĠĠĠĠ Ġimg Frame Params . set Margins ( margin s Frame Px , Ġmargins Frame Px , Ġmargins Frame Px , Ġmargins Frame Px ) ĊĊĠĠĠĠĠĠĠ Ġadd View ( local Img Frame , Ġimg Frame Params ) ĊĠĠĠĠĠĠĠ ĠView Utils . disable Cli pping ( local Img Frame ) ĊĊĠĠĠĠĠĠĠ Ġlocal Img Frame . removeAll Views () ĊĠĠĠĠĠĠĠ Ġval Ġlocal App Icon Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠ Ġlocal App Icon . scale Type Ġ= ĠImageView . Scale Type . CENTER _ INS IDE ĊĠĠĠĠĠĠĠ Ġval Ġimg Width Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Width Dip ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġimg Height Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Width Dip ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġimg Params Ġ= ĠLinearLayout . LayoutParams ( img Width , Ġimg Height ) ĊĠĠĠĠĠĠĠ Ġval Ġmargins Img Px Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Margin Dip ). toInt () ĊĠĠĠĠĠĠĠ Ġimg Params . set Margins ( margin s Img Px , Ġmargins Img Px , Ġmargins Img Px , Ġmargins Img Px ) ĊĊĠĠĠĠĠĠĠ Ġlocal Img Frame . addView ( local App Icon , Ġimg Params ) ĊĠĠĠĠĠĠĠ ĠView Utils . disable Cli pping ( local App Icon ) ĊĊĠĠĠĠĠĠĠ Ġload Task ?. cancel ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġlocal Load Task Ġ= ĠLoad Icon Task () ĊĠĠĠĠĠĠĠ Ġlocal Load Task . execute ( Load Params ( local App Icon , Ġlocal ViewModel , Ġcontext )) ĊĊĠĠĠĠĠĠĠ Ġlocal Img Frame . elevation Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Elevation Dip ) ĊĊĠĠĠĠĠĠĠ Ġimg Frame Ġ= Ġlocal Img Frame ĊĠĠĠĠĠĠĠ Ġapp Icon Ġ= Ġlocal App Icon ĊĠĠĠĠĠĠĠ Ġload Task Ġ= Ġlocal Load Task ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Translate X To Apply ( state : ĠLaunch Entry ViewModel . State ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Img Frame Ġ= Ġimg Frame !! ĊĠĠĠĠĠĠĠ Ġval Ġlocal ViewModel Ġ= ĠviewModel !! ĊĊĠĠĠĠĠĠĠ Ġval Ġimg Width Px Ġ= ĠMath . max ( local Img Frame . width . toFloat (), ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Width Dip )) ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= ĠView Utils . get Px From Dip ( context , Ġlocal ViewModel . image Offset Dip ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Inactive Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( local ViewModel . is On Right Side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Width Px Ġ+ Ġ 2 Ġ* Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-( img Width Px Ġ+ Ġ 2 Ġ* Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Active , ĠLaunch Entry ViewModel . State . Activ ating Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( local ViewModel . is On Right Side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Width Px Ġ/ Ġ 2 . 0 f Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-( img Width Px Ġ/ Ġ 2 . 0 f Ġ+ Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . F oc using , ĠLaunch Entry ViewModel . State . Focused , ĠLaunch Entry ViewModel . State . Selected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Alpha To Apply ( state : ĠLaunch Entry ViewModel . State ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Inactive , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Active , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Activ ating , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . F oc using , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Focused Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLaunch Entry ViewModel . State . Selected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Image Parameters ( state : ĠLaunch Entry ViewModel . State , Ġtransit : ĠBoolean , Ġdelay : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Image Parameters ( get Translate X To Apply ( state ), Ġget Alpha To Apply ( state ), Ġtransit , Ġstate , Ġdelay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Image Parameters ( translate X : ĠFloat , Ġalpha : ĠFloat , Ġanimate : ĠBoolean , Ġtarget State : ĠLaunch Entry ViewModel . State , Ġdelay : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Img Frame Ġ= Ġimg Frame !! ĊĠĠĠĠĠĠĠ Ġval Ġlocal ViewModel Ġ= ĠviewModel !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Img Frame . translation X Ġ= ĠtranslateX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Img Frame . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ViewModel . state Ġ= Ġtarget State ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target State . has Animation State ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ViewModel . state Ġ= Ġtarget State . animation State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Img Frame . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( translate X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( local ViewModel . move Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( delay . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ!= Ġlocal Img Frame . alpha ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Img Frame . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( local ViewModel . alpha Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Launch Entry View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ViewModel . state Ġ= Ġtarget State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ViewModel . state Ġ= Ġtarget State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ