package Ġir . neo . step bar view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġim an . Ċ Ġ* Ġim an . neo fight @ gmail . com Ċ Ġ*/ Ċ class ĠStep Bar View Ġ@ Jvm Over loads Ċ constructor ( mContext Ġ: ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠĠĠĠĠ ĠView ( mContext , attrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠIS _ DEBUG Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġfixed Ġdistance Ġto Ġadd Ġspace Ġbetween Ġthe Ġcircle Ġand Ġthe Ġstep Ġname ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNAME _ STEP _ SEPAR ATION _ PX Ġ= Ġ 1 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsteps Paint Ġ: ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġsteps Stroke Paint Ġ: ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġsteps Line Paint Ġ: ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġsteps Text Paint Ġ: ĠPaint ĊĊĠĠĠ Ġprivate Ġvar Ġtmp Rect Ġ= ĠRect () ĊĊĠĠĠ Ġvar Ġon Step ChangeListener Ġ: ĠOn Step ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġraw He i ht ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠMath . max ( steps Size , steps Line Height ) ĊĊĠĠĠ Ġprivate Ġval Ġraw Width ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( lines Width Ġ* Ġ( max Count Ġ- Ġ 1 )) Ġ+ Ġ// ĠLines ĠWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( steps Line Margin Left Ġ+ Ġsteps Line Margin Right ) Ġ* Ġ( max Count Ġ- Ġ 1 )) Ġ+ Ġ// ĠLines ĠMargin s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( steps Size Ġ+ Ġsteps Stroke Size ) Ġ* Ġmax Count ) ĊĊĊĠĠĠ Ġ// Lines Ġbetween Ġsteps Ġwill Ġdrawn Ġbased Ġon Ġthis Ġvariable ĊĠĠĠ Ġ// Note Ġthat Ġnow Ġwidth Ġis Ġmatch _ parent ĊĠĠĠ Ġprivate Ġval Ġlines Width Ġ: ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Fixed Steps LineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps LineWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Steps Size Ġ= Ġ( max Count Ġ* Ġsteps Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Margins Size Ġ= Ġ(( max Count - 1 ) Ġ* Ġ( steps Line Margin Left Ġ+ Ġsteps Line Margin Right )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Ġ= Ġ( width Ġ- Ġall Steps Size Ġ- Ġall Margins Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Ġ/ Ġ( max Count - 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// This Ġproperty Ġused Ġin Ġdrawing Ġstuff ĊĠĠĠ Ġprivate Ġval Ġy Pos ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ(( raw He i ht / 2 ) Ġ+ Ġpadding Top ) ĊĊĊĠĠĠ Ġvar Ġmax Count Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( allow Touch Step To Ġ== Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Touch Step To Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġreached Step : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Step ChangeListener ?. on Step Changed ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Reached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Un re ached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Line Reached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Line Un re ached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Line Height Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Size Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps TextColor Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Text Size Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Line Margin Left Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Line Margin Right : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġallow Touch Step To Ġ: ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġshow Step Index : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġshow Step Name : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Stroke Size Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Stroke Reached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Stroke Un Reached Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Stroke Current Color Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġshow Step Stroke Ġ: ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis R tl Ġ: ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis Fixed Steps LineWidth Ġ: ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps LineWidth Ġ: ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġallow Select Step Ġ= Ġobject Ġ: ĠAllow Select Step { ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġallow Select Step ( step : ĠInt ) Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsteps Title Setter Ġ= Ġobject Ġ: ĠSteps Title Setter Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Step Title ( step : ĠInt ) Ġ= Ġ" Step Ġ${ step }" ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmax Count Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġreached Step Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġsteps Reached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ re ached _ color ) ĊĠĠĠĠĠĠĠ Ġsteps Un re ached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ un re ached _ color ) ĊĊĠĠĠĠĠĠĠ Ġsteps Line Reached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ line _ re ached _ color ) ĊĠĠĠĠĠĠĠ Ġsteps Line Un re ached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ line _ un re ached _ color ) ĊĊĠĠĠĠĠĠĠ Ġsteps Line Height Ġ= ĠD p Handler . dp To Px ( context , 4 ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġsteps Size Ġ= ĠD p Handler . dp To Px ( context , 1 6 ). toFloat () ĊĠĠĠĠĠĠĠ Ġsteps TextColor Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ text _ color ) ĊĠĠĠĠĠĠĠ Ġsteps Text Size Ġ= ĠD p Handler . sp To Px ( context , 1 4 f ) ĊĊĠĠĠĠĠĠĠ Ġsteps Line Margin Left Ġ= ĠD p Handler . dp To Px ( context , 2 ). toFloat () ĊĠĠĠĠĠĠĠ Ġsteps Line Margin Right Ġ= ĠD p Handler . dp To Px ( context , 2 ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġallow Touch Step To Ġ= Ġmax Count ĊĊĠĠĠĠĠĠĠ Ġshow Step Index Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġshow Step Name Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġsteps Stroke Size Ġ= ĠD p Handler . dp To Px ( context , 2 ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġsteps Stroke Reached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ stroke _ re ached _ color ) ĊĠĠĠĠĠĠĠ Ġsteps Stroke Un Reached Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ stroke _ un re ached _ color ) ĊĠĠĠĠĠĠĠ Ġsteps Stroke Current Color Ġ= ĠContext Compat . getColor ( context , R . color . sb v _ step _ stroke _ current _ color ) ĊĊĠĠĠĠĠĠĠ Ġshow Step Stroke Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġis R tl Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġis Fixed Steps LineWidth Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġsteps LineWidth Ġ= ĠD p Handler . dp To Px ( context , Ġ 2 4 ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġattrs . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠmContext . obtain Styled Attributes ( attrs , ĠR . style able . Step Bar View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Count Ġ= Ġa . getInt ( R . style able . Step Bar View _ sb v _ max _ count , max Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Reached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ re ached _ colors , steps Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Un re ached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ un re ached _ colors , steps Un re ached Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Reached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ line _ re ached _ colors , steps Line Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Un re ached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ line _ un re ached _ colors , steps Line Un re ached Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Height Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ line _ height , steps Line Height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Size Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ size , steps Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps TextColor Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ text _ color , steps TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Size Ġ= Ġa . get Dimension Pixel Offset ( R . style able . Step Bar View _ sb v _ steps _ text _ size , Ġsteps Text Size . toInt ()). toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Margin Left Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ line _ margin _ left , steps Line Margin Left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Margin Right Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ line _ margin _ right , steps Line Margin Right ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Touch Step To Ġ= Ġa . getInt ( R . style able . Step Bar View _ sb v _ allow _ touch _ step _ to , max Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Step Index Ġ= Ġa . getBoolean ( R . style able . Step Bar View _ sb v _ show _ step _ index , Ġshow Step Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Step Name Ġ= Ġa . getBoolean ( R . style able . Step Bar View _ sb v _ show _ step _ name , Ġshow Step Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Size Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ stroke _ size , steps Stroke Size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Reached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ stroke _ re ached _ color , steps Stroke Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Un Reached Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ stroke _ un re ached _ color , steps Stroke Un Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Current Color Ġ= Ġa . getColor ( R . style able . Step Bar View _ sb v _ steps _ stroke _ current _ color , steps Stroke Current Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Step Stroke Ġ= Ġa . getBoolean ( R . style able . Step Bar View _ sb v _ show _ step _ stroke , Ġshow Step Stroke ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis R tl Ġ= Ġa . getBoolean ( R . style able . Step Bar View _ sb v _ is _ rtl , Ġis R tl ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fixed Steps LineWidth Ġ= Ġa . getBoolean ( R . style able . Step Bar View _ sb v _ is _ fixed _ steps _ line _ width , Ġis Fixed Steps LineWidth ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps LineWidth Ġ= Ġa . get Dimension ( R . style able . Step Bar View _ sb v _ steps _ line _ width , Ġsteps LineWidth ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteps Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteps Stroke Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteps Line Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteps Text Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// If Ġshow Step Name Ġis Ġtrue Ġwe Ġget Ġthe Ġtext Ġheight Ġwith Ġa Ġsample Ġtext ĊĠĠĠĠĠĠĠ Ġ// to Ġbe Ġconsidered Ġwhen Ġon Measure () Ġis Ġcalled ĊĠĠĠĠĠĠĠ Ġif Ġ( show Step Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . color Ġ= Ġsteps TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . text Size Ġ= Ġsteps Text Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Measure Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Measure Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheight Measure Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Measure Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġm Width Ġ: ĠFloat Ġ= Ġif Ġ( is Fixed Steps LineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Des ire Width () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Measure Size . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Height Ġ= Ġcalculate Des ire Height () ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Width . toInt (), Ġm Height . toInt ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Des ire Height () Ġ: ĠFloat Ġ= Ġraw He i ht Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom Ġ+ Ġtitle Text Height () ĊĠĠĠ Ġprivate Ġfun Ġcalculate Des ire Width () Ġ: ĠFloat Ġ= Ġraw Width Ġ+ Ġpadding Left Ġ+ Ġpadding Right ĊĊĊĠĠĠ Ġ// To Ġinclude Ġthe Ġsteps Ġname Ġheight Ġwhen Ġon Measure Ġis Ġcalled ĊĠĠĠ Ġ// if Ġshow Step Name Ġis Ġfalse , Ġthis Ġis Ġ 0 ĊĠĠĠ Ġprivate Ġfun Ġtitle Text Height () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! show Step Name ) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġsteps Text Paint . getText Bounds (" sample ", Ġ 0 , Ġ" sample ". length , Ġtmp Rect ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtmp Rect . height () Ġ+ ĠNAME _ STEP _ SEPAR ATION _ PX Ġ* Ġ 2 ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġget Horizontal Circ les Position () Ġ: ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsteps Horizontal Positions Ġ= ĠFloat Array ( max Count ) ĊĠĠĠĠĠĠĠ Ġval Ġlines Size Ġ= Ġlines Width ĊĊĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġwhen ( is R tl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġmax Count - 1 Ġdown To Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ 0 Ġuntil Ġmax Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġrange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġoffset Ġcontains Ġstep Ġcircle Ġand Ġright Ġline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Step Offset Ġ= Ġsteps Size Ġ+ Ġsteps Line Margin Left Ġ+ Ġlines Size Ġ+ Ġsteps Line Margin Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset To Draw Ġ= Ġpadding Left Ġ+ Ġ( i Ġ* Ġone Step Offset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġif ( is R tl ) Ġ( max Count - 1 )- i Ġelse Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Horizontal Positions [ pos ] Ġ= Ġoffset To Draw Ġ+ Ġsteps Size Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsteps Horizontal Positions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġval Ġlines Size Ġ= Ġlines Width ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġmax Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( IS _ DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" SS ", Ġ" drawing Ġ$ i Ġstep ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Pos Ġ= Ġget Horizontal Circ les Position ()[ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Draw ĠSteps ĠLine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i < max Count - 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Paint . stroke Width Ġ= Ġsteps Line Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Paint . color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i < re ached Step - 1 ) Ġsteps Line Reached Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġsteps Line Un re ached Color ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart X Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( is R tl ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġx Pos Ġ- Ġ( steps Size / 2 ) Ġ- Ġsteps Line Margin Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġx Pos Ġ+ Ġ( steps Size / 2 ) Ġ+ Ġsteps Line Margin Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend X Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( is R tl ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġstart X Point Ġ+ Ġlines Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġstart X Point Ġ- Ġlines Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart X Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend X Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Draw ĠSteps ĠCircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Paint . color Ġ= Ġif ( i < re ached Step ) Ġsteps Reached Color Ġelse Ġsteps Un re ached Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( steps Size / 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Draw ĠStep ĠSt roke ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( show Step Stroke ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Paint . stroke Width Ġ= Ġsteps Stroke Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Paint . color Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+ Ġ 1 Ġ< Ġreached Step Ġ-> Ġsteps Stroke Reached Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+ Ġ 1 Ġ== Ġreached Step Ġ-> Ġsteps Stroke Current Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsteps Stroke Un Reached Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( steps Size Ġ/ Ġ 2 ) Ġ- Ġ( steps Stroke Paint . stroke Width Ġ/ Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Draw ĠSteps ĠIndex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( show Step Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . color Ġ= Ġsteps TextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . text Size Ġ= Ġsteps Text Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawing Text Ġ= Ġ( i Ġ+ Ġ 1 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . getText Bounds ( drawing Text , Ġ 0 , Ġdrawing Text . length , Ġtmp Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawing Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Pos Ġ+ Ġ( tmp Rect . height () Ġ/ Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Draw ĠSteps ĠNames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( show Step Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġsteps Title Setter . get Step Title ( i Ġ+ Ġ 1 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint . getText Bounds ( name , Ġ 0 , Ġname . length , Ġtmp Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos * 2 Ġ+ Ġtmp Rect . height () Ġ+ ĠNAME _ STEP _ SEPAR ATION _ PX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtouch Down Point Ġ= ĠPoint F () ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( event ?. action ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Fixed Steps LineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Down Point . set ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Touch Post ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Fixed Steps LineWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Touch Post ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ Ġ// Click ĠH app ened ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( touch Down Point . x Ġ== Ġevent . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Down Point . y Ġ== Ġevent . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Touch Post ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Touch Post ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Size Ġ= Ġlines Width ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġget Horizontal Circ les Position (). size ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dis allow Ġtouch Ġmore Ġthan Ġallow Touch Step To ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ>= Ġallow Touch Step To ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dis allow Ġtouch Ġuser Ġprevent Ġsteps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! allow Select Step . allow Select Step ( i + 1 )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Dot Pos Ġ= Ġget Horizontal Circ les Position ()[ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Dot Pos Ġ= Ġy Pos ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Half Ġ= Ġsteps Size / 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// vertical Extra Space Ġis Ġthe Ġextra Ġspace Ġfor Ġvertical Ġtouch ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertical Extra Space Ġ= Ġ( raw He i ht * 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Area Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( is R tl ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġx Dot Pos - step Half - line Size - steps Line Margin Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġx Dot Pos - step Half - steps Line Margin Right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Area Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( is R tl ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġx Dot Pos + step Half + steps Line Margin Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġx Dot Pos + step Half + steps Line Margin Left + line Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Area Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Dot Pos - step Half - vertical Extra Space , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Dot Pos + step Half + vertical Extra Space ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( step Area . contains ( x , Ġy )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Tou ched ĠStep Ġ( i + 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreached Step Ġ= Ġ( i + 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= ĠSaved State ( super State ) ĊĠĠĠĠĠĠĠ Ġss . max Count Ġ= Ġmax Count ĊĠĠĠĠĠĠĠ Ġss . re ached Step Ġ= Ġreached Step ĊĠĠĠĠĠĠĠ Ġss . steps Reached Color Ġ= Ġsteps Reached Color ĊĠĠĠĠĠĠĠ Ġss . steps Un re ached Color Ġ= Ġsteps Un re ached Color ĊĠĠĠĠĠĠĠ Ġss . steps Line Reached Color Ġ= Ġsteps Line Reached Color ĊĠĠĠĠĠĠĠ Ġss . steps Line Un re ached Color Ġ= Ġsteps Line Un re ached Color ĊĠĠĠĠĠĠĠ Ġss . steps Line Height Ġ= Ġsteps Line Height ĊĠĠĠĠĠĠĠ Ġss . steps Size Ġ= Ġsteps Size ĊĠĠĠĠĠĠĠ Ġss . steps TextColor Ġ= Ġsteps TextColor ĊĠĠĠĠĠĠĠ Ġss . steps Text Size Ġ= Ġsteps Text Size ĊĠĠĠĠĠĠĠ Ġss . steps Line Margin Left Ġ= Ġsteps Line Margin Left ĊĠĠĠĠĠĠĠ Ġss . steps Line Margin Right Ġ= Ġsteps Line Margin Right ĊĠĠĠĠĠĠĠ Ġss . allow Touch Step To Ġ= Ġallow Touch Step To ĊĠĠĠĠĠĠĠ Ġss . show Step Index Ġ= Ġshow Step Index ĊĠĠĠĠĠĠĠ Ġss . steps Stroke Size Ġ= Ġsteps Stroke Size ĊĠĠĠĠĠĠĠ Ġss . steps Stroke Reached Color Ġ= Ġsteps Stroke Reached Color ĊĠĠĠĠĠĠĠ Ġss . steps Stroke Un Reached Color Ġ= Ġsteps Stroke Un Reached Color ĊĠĠĠĠĠĠĠ Ġss . steps Stroke Current Color Ġ= Ġsteps Stroke Current Color ĊĠĠĠĠĠĠĠ Ġss . show Step Stroke Ġ= Ġshow Step Stroke ĊĠĠĠĠĠĠĠ Ġss . is R tl Ġ= Ġis R tl ĊĠĠĠĠĠĠĠ Ġreturn Ġss ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved State Ġ= Ġstate Ġas ĠSaved State ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( saved State . super State ) ĊĠĠĠĠĠĠĠ Ġmax Count Ġ= Ġsaved State . max Count ĊĠĠĠĠĠĠĠ Ġreached Step Ġ= Ġsaved State . re ached Step ĊĠĠĠĠĠĠĠ Ġsteps Reached Color Ġ= Ġsaved State . steps Reached Color ĊĠĠĠĠĠĠĠ Ġsteps Un re ached Color Ġ= Ġsaved State . steps Un re ached Color ĊĠĠĠĠĠĠĠ Ġsteps Line Reached Color Ġ= Ġsaved State . steps Line Reached Color ĊĠĠĠĠĠĠĠ Ġsteps Line Un re ached Color Ġ= Ġsaved State . steps Line Un re ached Color ĊĠĠĠĠĠĠĠ Ġsteps Line Height Ġ= Ġsaved State . steps Line Height ĊĠĠĠĠĠĠĠ Ġsteps Size Ġ= Ġsaved State . steps Size ĊĠĠĠĠĠĠĠ Ġsteps TextColor Ġ= Ġsaved State . steps TextColor ĊĠĠĠĠĠĠĠ Ġsteps Text Size Ġ= Ġsaved State . steps Text Size ĊĠĠĠĠĠĠĠ Ġsteps Line Margin Left Ġ= Ġsaved State . steps Line Margin Left ĊĠĠĠĠĠĠĠ Ġsteps Line Margin Right Ġ= Ġsaved State . steps Line Margin Right ĊĠĠĠĠĠĠĠ Ġallow Touch Step To Ġ= Ġsaved State . allow Touch Step To ĊĠĠĠĠĠĠĠ Ġshow Step Index Ġ= Ġsaved State . show Step Index ĊĠĠĠĠĠĠĠ Ġsteps Stroke Size Ġ= Ġsaved State . steps Stroke Size ĊĠĠĠĠĠĠĠ Ġsteps Stroke Reached Color Ġ= Ġsaved State . steps Stroke Reached Color ĊĠĠĠĠĠĠĠ Ġsteps Stroke Un Reached Color Ġ= Ġsaved State . steps Stroke Un Reached Color ĊĠĠĠĠĠĠĠ Ġsteps Stroke Current Color Ġ= Ġsaved State . steps Stroke Current Color ĊĠĠĠĠĠĠĠ Ġshow Step Stroke Ġ= Ġsaved State . show Step Stroke ĊĠĠĠĠĠĠĠ Ġis R tl Ġ= Ġsaved State . is R tl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSaved State Ġ: ĠBase Saved State { ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Saved State >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ?) Ġ= ĠSaved State ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ) Ġ= ĠarrayOf Null s < Saved State ? >( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġvar Ġmax Count Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġreached Step : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Reached Color Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Un re ached Color Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Line Reached Color : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Line Un re ached Color : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Line Height : ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Size : ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġsteps TextColor : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Text Size Ġ: ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Line Margin Left Ġ: ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Line Margin Right Ġ: ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġallow Touch Step To Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġshow Step Index : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Stroke Size Ġ: ĠFloat Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Stroke Reached Color Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Stroke Un Reached Color Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsteps Stroke Current Color Ġ: ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġshow Step Stroke Ġ: ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis R tl Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġconstructor ( parcel able : ĠParcel able ) Ġ: Ġsuper ( parcel able ) ĊĠĠĠĠĠĠĠ Ġconstructor ( parcel Ġ: ĠParcel ?) Ġ: Ġsuper ( parcel ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparcel ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Count Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreached Step Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Reached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Un re ached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Reached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Un re ached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Height Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Size Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps TextColor Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Text Size Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Margin Left Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Line Margin Right Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Touch Step To Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Step Index Ġ= Ġit . readInt ()== 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Size Ġ= Ġit . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Reached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Un Reached Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Stroke Current Color Ġ= Ġit . readInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Step Stroke Ġ= Ġit . readInt ()== 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis R tl Ġ= Ġit . readInt ()== 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( out : ĠParcel ?, Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( out , Ġflags ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( max Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( re ached Step ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Un re ached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Line Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Line Un re ached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Line Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Text Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Line Margin Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Line Margin Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( allow Touch Step To ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( if ( show Step Index ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Float ( steps Stroke Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Stroke Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Stroke Un Reached Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( steps Stroke Current Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( if ( show Step Stroke ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeInt ( if ( is R tl ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Step ChangeListener { ĊĠĠĠĠĠĠĠ Ġfun Ġon Step Changed ( current Step : Int ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠAllow Select Step { ĊĠĠĠĠĠĠĠ Ġfun Ġallow Select Step ( step : ĠInt ) Ġ: ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSteps Title Setter { ĊĠĠĠĠĠĠĠ Ġfun Ġget Step Title ( step : ĠInt ) Ġ: ĠString ĊĠĠĠ Ġ} Ċ }