package Ġcom . k osh k ama . hold tick view Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAle ks and r ĠP av lov Ġ( vertex 5 5 reg @ gmail . com ) Ċ Ġ*/ Ċ open Ġclass ĠHold Tick View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPH ASE _ VISIBLE Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPH ASE _ IN VISIBLE Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTART _ ANGLE Ġ= Ġ 3 1 0 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDE GRE ES Ġ= Ġ 3 1 0 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠC IR CLE _ RATIO Ġ= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠT ICK _ RATIO Ġ= Ġ 0 . 1 2 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SH ADOW _ RADIUS Ġ= Ġ 4 f Ġ// Ġin Ġdp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis Checked : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked ChangeListener ?. invoke ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġcolor Ġin Ġthe Ġchecked Ġstate . ĠBy Ġdefault Ġis Ġ 0 xFF 4 3 A 0 4 7 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġchecked Color : ĠInt Ġ= Ġ( 0 xFF 4 3 A 0 4 7 ). toInt () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġcolor Ġin Ġthe Ġunchecked Ġstate . ĠBy Ġdefault Ġis Ġ 0 xFF 7 5 7 5 7 5 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġunchecked Color : ĠInt Ġ= Ġ( 0 xFF 7 5 7 5 7 5 ). toInt () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġshadow Ġcolor . ĠBy Ġdefault Ġis Ġ 0 x 8 8 0 0 0 0 0 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshadow Color : ĠInt Ġ= Ġ( 0 x 8 8 0 0 0 0 0 0 ). toInt () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShadow Ġradius . ĠBy Ġdefault Ġis Ġ 4 Ġdp . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshadow Radius : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTick Ġcolor . ĠBy Ġdefault Ġis Ġ 0 xFF 4 3 A 0 4 7 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtick Color : ĠInt Ġ= Ġ( 0 xFF 4 3 A 0 4 7 ). toInt () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTick Ġanimation Ġtime Ġin Ġmilliseconds . ĠBy Ġdefault Ġ 2 0 0 ms . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtick Animation Time : ĠLong Ġ= Ġ 2 0 0 L ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTime Ġto Ġchange Ġstate Ġin Ġmilliseconds . ĠBy Ġdefault Ġ 1 0 0 0 ms . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġswitching Time : ĠLong Ġ= Ġ 1 0 0 0 L ĊĊĠĠĠ Ġvar Ġon Checked ChangeListener : Ġ(( isChecked : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġtick Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġtick Phase Ġ= ĠPH ASE _ IN VISIBLE ĊĠĠĠ Ġprivate Ġval Ġtick Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġtick Path Coords Ġ= ĠarrayOf ( PointF ( 0 . 1 5 f , Ġ 0 . 4 5 f ), ĠPoint F ( 0 . 4 5 f , Ġ 0 . 7 5 f ), ĠPoint F ( 0 . 9 7 f , Ġ 0 . 1 5 f )) ĊĠĠĠ Ġprivate Ġvar Ġtick Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtick Length Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtick Animator Ġ= ĠValue Animator () ĊĊĠĠĠ Ġprivate Ġval Ġcircle Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġanimated Circle Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcircle Sweep Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcircle Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcircle Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġval Ġcircle Position Ġ= ĠPoint F () ĊĠĠĠ Ġprivate Ġval Ġcircle Bounds Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġvar Ġcircle Animator Ġ= ĠValue Animator () ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Hold Tick View , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġtyped Array . getBoolean ( R . style able . Hold Tick View _ android _ checked , Ġis Checked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtyped Array . getBoolean ( R . style able . Hold Tick View _ android _ enabled , Ġis Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Color Ġ= Ġtyped Array . getColor ( R . style able . Hold Tick View _ checked Color , Ġchecked Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunchecked Color Ġ= Ġtyped Array . getColor ( R . style able . Hold Tick View _ unchecked Color , Ġunchecked Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Color Ġ= Ġtyped Array . getColor ( R . style able . Hold Tick View _ shadow Color , Ġshadow Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Radius Ġ= Ġtyped Array . get Dimension ( R . style able . Hold Tick View _ shadow Radius , Ġdp To Px ( DEFAULT _ SH ADOW _ RADIUS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Color Ġ= Ġtyped Array . getColor ( R . style able . Hold Tick View _ tick Color , Ġchecked Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Animation Time Ġ= Ġtyped Array . getInteger ( R . style able . Hold Tick View _ tick Animation Time , Ġtick Animation Time . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitching Time Ġ= Ġtyped Array . getInteger ( R . style able . Hold Tick View _ switch ing Time , Ġswitching Time . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtick Phase Ġ= Ġif Ġ( isChecked ) ĠPH ASE _ VISIBLE Ġelse ĠPH ASE _ IN VISIBLE ĊĠĠĠĠĠĠĠ Ġset Layer Type ( LAYER _ TYPE _ SOFTWARE , Ġtick Paint ) ĊĠĠĠĠĠĠĠ Ġset Layer Type ( LAYER _ TYPE _ SOFTWARE , Ġcircle Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Checked ( isChecked : ĠBoolean , Ġanimate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . isChecked Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Tick Animation () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Phase Ġ= Ġif Ġ( isChecked ) ĠPH ASE _ VISIBLE Ġelse ĠPH ASE _ IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ! isEnabled Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġevent . action Ġ== ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonPress Started () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . action Ġ== ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Hit Rect ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x . toInt () Ġ+ Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y . toInt () Ġ+ Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rect . contains ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonPress Finished () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . action Ġ== ĠMotion Event . ACTION _ UP Ġ|| Ġevent . action Ġ== ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonPress Finished () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonPress Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġswitch Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġ! isChecked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Circle Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Tick Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( switch Callback , Ġswitching Time ) ĊĠĠĠĠĠĠĠ Ġstart Circle Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonPress Finished () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġstop Circle Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Circle ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Animated Circle ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Tick ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Circle ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcircle Paint . color Ġ= Ġif Ġ( isChecked ) Ġchecked Color Ġelse Ġunchecked Color ĊĠĠĠĠĠĠĠ Ġcircle Paint . stroke Width Ġ= Ġcircle Width ĊĠĠĠĠĠĠĠ Ġcircle Paint . set Shadow Layer ( shadow Radius , Ġ 0 f , Ġ 0 f , Ġshadow Color ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( circle Bounds , ĠSTART _ ANGLE , Ġ- DE GRE ES , Ġfalse , Ġcircle Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Animated Circle ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( circle Sweep Angle Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanimated Circle Paint . color Ġ= Ġif Ġ( isChecked ) Ġunchecked Color Ġelse Ġchecked Color ĊĠĠĠĠĠĠĠ Ġanimated Circle Paint . stroke Width Ġ= Ġcircle Width ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( circle Bounds , ĠSTART _ ANGLE , Ġ- circle Sweep Angle , Ġfalse , Ġanimated Circle Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Tick ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtick Paint . path Effect Ġ= ĠDash Path Effect ( float ArrayOf ( tick Length , Ġtick Length ), Ġtick Phase Ġ* Ġtick Length ) ĊĠĠĠĠĠĠĠ Ġtick Paint . color Ġ= Ġtick Color ĊĠĠĠĠĠĠĠ Ġtick Paint . stroke Width Ġ= Ġtick Width ĊĠĠĠĠĠĠĠ Ġtick Paint . set Shadow Layer ( shadow Radius , Ġ 0 f , Ġ 0 f , Ġshadow Color ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( tick Path , Ġtick Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( width : ĠInt , Ġheight : ĠInt , Ġold Width : ĠInt , Ġold Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( width , Ġheight , Ġold Width , Ġold Height ) ĊĠĠĠĠĠĠĠ Ġval Ġview Size : ĠFloat Ġ= ĠMath . min ( width , Ġheight ). toFloat () ĊĠĠĠĠĠĠĠ Ġre calculate Circle Size ( view Size ) ĊĠĠĠĠĠĠĠ Ġre calculate Tick Size ( view Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre calculate Circle Size ( view Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcircle Width Ġ= Ġview Size Ġ* ĠC IR CLE _ RATIO ĊĠĠĠĠĠĠĠ Ġcircle Radius Ġ= ĠMath . max (( view Size Ġ- Ġcircle Width ) Ġ* Ġ 0 . 5 f Ġ- Ġshadow Radius , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcircle Position . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= Ġview Size Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġcenter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġcenter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcircle Bounds . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġcircle Position . x Ġ- Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġcircle Position . y Ġ- Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġcircle Position . x Ġ+ Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġcircle Position . y Ġ+ Ġcircle Radius ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre calculate Tick Size ( view Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtick Width Ġ= Ġview Size Ġ* ĠT ICK _ RATIO ĊĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġtick Width Ġ* Ġ 0 . 5 f Ġ+ Ġshadow Radius ĊĠĠĠĠĠĠĠ Ġval Ġc ropped Size Ġ= ĠMath . max ( view Size Ġ- Ġpadding Ġ* Ġ 2 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġtick Path . reset () ĊĠĠĠĠĠĠĠ Ġval Ġcalc Position Ġ= Ġ{ Ġv : ĠFloat Ġ-> Ġv Ġ* Ġc ropped Size Ġ+ Ġpadding Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfirst Point Ġ= Ġtick Path Coords . first () ĊĠĠĠĠĠĠĠ Ġtick Path . moveTo ( calc Position ( first Point . x ), Ġcalc Position ( first Point . y )) ĊĠĠĠĠĠĠĠ Ġtick Path Coords . forEach Ġ{ Ġpoint Ġ-> Ġtick Path . lineTo ( calc Position ( point . x ), Ġcalc Position ( point . y )) Ġ} ĊĠĠĠĠĠĠĠ Ġtick Length Ġ= ĠPath Measure ( tick Path , Ġfalse ). length ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe Ġview Ġsquare ĊĠĠĠĠĠĠĠ Ġval Ġmin Measure Spec Ġ= ĠMath . min ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( min Measure Spec , Ġmin Measure Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Tick Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tick Animator . is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Animator . removeAll Update Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Animator . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Animator Ġ= ĠValue Animator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ-> Ġtick Animator . set Float Values ( PHASE _ IN VISIBLE , ĠPH ASE _ VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtick Animator . set Float Values ( PHASE _ VISIBLE , Ġ- PHASE _ IN VISIBLE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtick Animator . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Phase Ġ= Ġtick Animator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtick Animator . duration Ġ= Ġtick Animation Time ĊĠĠĠĠĠĠĠ Ġtick Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Circle Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( circle Animator . is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Circle Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcircle Animator . set Float Values ( 0 f , ĠDE GRE ES ) ĊĠĠĠĠĠĠĠ Ġcircle Animator . add Update Listener ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Sweep Angle Ġ= Ġcircle Animator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġcircle Animator . duration Ġ= Ġswitching Time ĊĠĠĠĠĠĠĠ Ġcircle Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Circle Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġcircle Sweep Angle Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġcircle Animator . removeAll Update Listeners () ĊĠĠĠĠĠĠĠ Ġcircle Animator . cancel () ĊĠĠĠĠĠĠĠ Ġcircle Animator Ġ= ĠValue Animator () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp To Px ( dp : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġdp , Ġcontext . resources . display Metrics ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġval Ġsaved State Ġ= ĠSaved State ( super State ) ĊĠĠĠĠĠĠĠ Ġsaved State . isChecked Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġsaved State . isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġsaved State . checked Color Ġ= Ġchecked Color ĊĠĠĠĠĠĠĠ Ġsaved State . unchecked Color Ġ= Ġunchecked Color ĊĠĠĠĠĠĠĠ Ġsaved State . shadow Color Ġ= Ġshadow Color ĊĠĠĠĠĠĠĠ Ġsaved State . shadow Radius Ġ= Ġshadow Radius ĊĠĠĠĠĠĠĠ Ġsaved State . tick Color Ġ= Ġtick Color ĊĠĠĠĠĠĠĠ Ġsaved State . tick Animation Time Ġ= Ġtick Animation Time ĊĠĠĠĠĠĠĠ Ġsaved State . switch ing Time Ġ= Ġswitching Time ĊĠĠĠĠĠĠĠ Ġreturn Ġsaved State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġas ĠSaved State ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state . super State ) ĊĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġstate . isChecked ĊĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġstate . isEnabled ĊĠĠĠĠĠĠĠ Ġchecked Color Ġ= Ġstate . checked Color ĊĠĠĠĠĠĠĠ Ġunchecked Color Ġ= Ġstate . unchecked Color ĊĠĠĠĠĠĠĠ Ġshadow Color Ġ= Ġstate . shadow Color ĊĠĠĠĠĠĠĠ Ġshadow Radius Ġ= Ġstate . shadow Radius ĊĠĠĠĠĠĠĠ Ġtick Color Ġ= Ġstate . tick Color ĊĠĠĠĠĠĠĠ Ġtick Animation Time Ġ= Ġstate . tick Animation Time ĊĠĠĠĠĠĠĠ Ġswitching Time Ġ= Ġstate . switch ing Time ĊĠĠĠĠĠĠĠ Ġtick Phase Ġ= Ġif Ġ( isChecked ) ĠPH ASE _ VISIBLE Ġelse ĠPH ASE _ IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSaved State Ġ: ĠView . Base Saved State Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Checked : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġchecked Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġunchecked Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġshadow Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġshadow Radius : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġtick Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtick Animation Time : ĠLong Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġswitching Time : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġconstructor ( super State : ĠParcel able ) Ġ: Ġsuper ( super State ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconstructor ( parcel In : ĠParcel ) Ġ: Ġsuper ( parcel In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġparcel In . readInt () Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġparcel In . readInt () Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Color Ġ= Ġparcel In . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunchecked Color Ġ= Ġparcel In . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Color Ġ= Ġparcel In . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Radius Ġ= Ġparcel In . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Color Ġ= Ġparcel In . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Animation Time Ġ= Ġparcel In . read Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitching Time Ġ= Ġparcel In . read Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( parcel Out : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( parcel Out , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( if Ġ( isChecked ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( if Ġ( isEnabled ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( checked Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( unchecked Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( shadow Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . write Float ( shadow Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . writeInt ( tick Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . write Long ( tick Animation Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel Out . write Long ( switch ing Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Saved State > Ġ= Ġobject Ġ: ĠParcel able . Creator < Saved State > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel In : ĠParcel ): ĠSaved State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSaved State ( parcel In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ