package Ġcom . e ok oe . s ag ui . widgets Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . e ok oe . s ag ui . R Ċ import Ġcom . e ok oe . s ag ui . utils . Unit Utils ĊĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠPed ro ĠSil va Ċ Ġ* Ġ@ since Ġ 1 7 / 0 8 / 1 7 Ċ Ġ*/ Ċ @ Suppress (" Join Declaration And Assignment ") Ċ class ĠCircle Progress View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfinished Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġun finished Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinner Circle Paint : ĠPaint ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtext Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinner Bottom Text Paint : ĠPaint ĊĊĠĠĠ Ġprivate Ġval Ġfinished Outer Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġun finished Outer Rect Ġ= ĠRect F () ĊĊĠĠĠ Ġvar Ġattribute ResourceId Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġis Show Text : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtext Size : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar ĠtextColor : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġinner Bottom TextColor : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġprogress Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ> Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ% = Ġmax . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġmax : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġmax ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprogress Angle : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġprogress Ġ/ Ġmax . toFloat () Ġ* Ġ 3 6 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġfinished Stroke Color : ĠInt Array Ġ= ĠInt Array ( 2 ) ĊĠĠĠ Ġprivate Ġvar Ġun finished Stroke Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġstarting Degree Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfinished Stroke Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġun finished Stroke Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġinner BackgroundColor Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprefix Text : ĠString ? Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġsuffix Text : ĠString ? Ġ= Ġ"% " ĊĠĠĠ Ġprivate Ġvar Ġtext : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġinner Bottom Text Size Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġinner Bottom Text : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġinner Bottom Text Height Ġ= Ġ 0 f ĊĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ ST RO KE _ WIDTH : ĠFloat ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ FINISHED _ COLOR Ġ= ĠColor . rgb ( 6 6 , Ġ 1 4 5 , Ġ 2 4 1 ) ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ UN FINISHED _ COLOR Ġ= ĠColor . rgb ( 2 0 4 , Ġ 2 0 4 , Ġ 2 0 4 ) ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ TEXT _ COLOR Ġ= ĠColor . rgb ( 6 6 , Ġ 1 4 5 , Ġ 2 4 1 ) ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ COLOR Ġ= ĠColor . rgb ( 6 6 , Ġ 1 4 5 , Ġ 2 4 1 ) ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ INNER _ BACKGROUND _ COLOR Ġ= ĠColor . TRANSP ARENT ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ MAX Ġ= Ġ 1 0 0 ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ START ING _ DEG REE Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ TEXT _ SIZE : ĠFloat ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ SIZE : ĠFloat ĊĠĠĠ Ġprivate Ġval ĠMIN _ SIZE : ĠInt ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDEFAULT _ TEXT _ SIZE Ġ= ĠUnit Utils . sp 2 px ( resources , Ġ 1 8 f ) ĊĠĠĠĠĠĠĠ ĠDEFAULT _ ST RO KE _ WIDTH Ġ= ĠUnit Utils . dp 2 px ( resources , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ SIZE Ġ= ĠUnit Utils . sp 2 px ( resources , Ġ 1 8 f ) ĊĠĠĠĠĠĠĠ ĠMIN _ SIZE Ġ= ĠUnit Utils . dp 2 px ( resources , Ġ 1 0 0 f ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Circle Progress View , Ġdef Style Attr , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġinit By Attributes ( attributes ) ĊĠĠĠĠĠĠĠ Ġattributes . recycle () ĊĊĠĠĠĠĠĠĠ Ġinit P ain ters () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit P ain ters () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint Ġ= ĠText Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . is Anti Alias Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Paint Ġ= ĠText Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Paint . color Ġ= Ġinner Bottom TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Paint . text Size Ġ= Ġinner Bottom Text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinished Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġfinished Paint . shader Ġ= ĠS weep Gradient ( 0 f , Ġ 0 f , Ġfinished Stroke Color , ĠarrayOf ( 0 f , Ġprogress ). toFloat Array ()) ĊĠĠĠĠĠĠĠ Ġfinished Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġfinished Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfinished Paint . stroke Width Ġ= Ġfinished Stroke Width ĊĊĠĠĠĠĠĠĠ Ġun finished Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġun finished Paint . color Ġ= Ġun finished Stroke Color ĊĠĠĠĠĠĠĠ Ġun finished Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġun finished Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġun finished Paint . stroke Width Ġ= Ġun finished Stroke Width ĊĊĠĠĠĠĠĠĠ Ġinner Circle Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġinner Circle Paint . color Ġ= Ġinner BackgroundColor ĊĠĠĠĠĠĠĠ Ġinner Circle Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit By Attributes ( attributes : ĠTyped Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinished Stroke Color [ 0 ] Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ finished _ color , ĠDEFAULT _ FINISHED _ COLOR ) ĊĠĠĠĠĠĠĠ Ġfinished Stroke Color [ 1 ] Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ finished _ end _ color , Ġfinished Stroke Color [ 0 ]) ĊĠĠĠĠĠĠĠ Ġun finished Stroke Color Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ un finished _ color , ĠDEFAULT _ UN FINISHED _ COLOR ) ĊĠĠĠĠĠĠĠ Ġis Show Text Ġ= Ġattributes . getBoolean ( R . style able . Circle Progress View _ cp v _ show _ text , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġattribute ResourceId Ġ= Ġattributes . getResource Id ( R . style able . Circle Progress View _ cp v _ inner _ drawable , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġmax Ġ= Ġattributes . getInt ( R . style able . Circle Progress View _ cp v _ max , ĠDEFAULT _ MAX ) ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġattributes . get Float ( R . style able . Circle Progress View _ cp v _ progress , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġfinished Stroke Width Ġ= Ġattributes . get Dimension ( R . style able . Circle Progress View _ cp v _ finished _ stroke _ width , ĠDEFAULT _ ST RO KE _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġun finished Stroke Width Ġ= Ġattributes . get Dimension ( R . style able . Circle Progress View _ cp v _ un finished _ stroke _ width , Ġfinished Stroke Width ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attributes . getString ( R . style able . Circle Progress View _ cp v _ prefix _ text ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ= Ġattributes . getString ( R . style able . Circle Progress View _ cp v _ prefix _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attributes . getString ( R . style able . Circle Progress View _ cp v _ suffix _ text ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuffix Text Ġ= Ġattributes . getString ( R . style able . Circle Progress View _ cp v _ suffix _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attributes . getString ( R . style able . Circle Progress View _ cp v _ text ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġattributes . getString ( R . style able . Circle Progress View _ cp v _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ text _ color , ĠDEFAULT _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġattributes . get Dimension ( R . style able . Circle Progress View _ cp v _ text _ size , ĠDEFAULT _ TEXT _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Size Ġ= Ġattributes . get Dimension ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text _ size , ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom TextColor Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text _ color , ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Ġ= Ġattributes . getString ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Bottom Text Size Ġ= Ġattributes . get Dimension ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text _ size , ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ SIZE ) ĊĠĠĠĠĠĠĠ Ġinner Bottom TextColor Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text _ color , ĠDEFAULT _ INNER _ BOTTOM _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠ Ġinner Bottom Text Ġ= Ġattributes . getString ( R . style able . Circle Progress View _ cp v _ inner _ bottom _ text ) ĊĊĠĠĠĠĠĠĠ Ġstarting Degree Ġ= Ġattributes . getInt ( R . style able . Circle Progress View _ cp v _ circle _ starting _ degree , ĠDEFAULT _ START ING _ DEG REE ) ĊĠĠĠĠĠĠĠ Ġinner BackgroundColor Ġ= Ġattributes . getColor ( R . style able . Circle Progress View _ cp v _ background _ color , ĠDEFAULT _ INNER _ BACKGROUND _ COLOR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit P ain ters () ĊĠĠĠĠĠĠĠ Ġsuper . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Finished Stroke Width () Ġ= Ġfinished Stroke Width ĊĊĠĠĠ Ġfun Ġset Finished Stroke Width ( finished Stroke Width : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . finished Stroke Width Ġ= Ġfinished Stroke Width ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Un finished Stroke Width () Ġ= Ġun finished Stroke Width ĊĊĠĠĠ Ġfun Ġset Un finished Stroke Width ( un finished Stroke Width : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . un finished Stroke Width Ġ= Ġun finished Stroke Width ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText Size () Ġ= Ġtext Size ĊĊĠĠĠ Ġfun Ġset Text Size ( text Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget TextColor () Ġ= ĠtextColor ĊĊĠĠĠ Ġfun Ġset TextColor ( textColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . textColor Ġ= ĠtextColor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Finished Stroke Color () Ġ= Ġfinished Stroke Color ĊĊĠĠĠ Ġfun Ġset Finished Stroke Color ( start Color : ĠInt , Ġend Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . finished Stroke Color [ 0 ] Ġ= Ġstart Color ĊĠĠĠĠĠĠĠ Ġthis . finished Stroke Color [ 1 ] Ġ= Ġend Color ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Un finished Stroke Color () Ġ= Ġun finished Stroke Color ĊĊĠĠĠ Ġfun Ġset Un finished Stroke Color ( un finished Stroke Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . un finished Stroke Color Ġ= Ġun finished Stroke Color ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText () Ġ= Ġtext ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Suffix Text () Ġ= Ġsuffix Text ĊĊĠĠĠ Ġfun Ġset Suffix Text ( suffix Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . suffix Text Ġ= Ġsuffix Text ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Prefix Text () Ġ= Ġprefix Text ĊĊĠĠĠ Ġfun Ġset Prefix Text ( prefix Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . prefix Text Ġ= Ġprefix Text ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Inner BackgroundColor () Ġ= Ġinner BackgroundColor ĊĊĠĠĠ Ġfun Ġset Inner BackgroundColor ( inner BackgroundColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inner BackgroundColor Ġ= Ġinner BackgroundColor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Inner Bottom Text () Ġ= Ġinner Bottom Text ĊĊĠĠĠ Ġfun Ġset Inner Bottom Text ( inner Bottom Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inner Bottom Text Ġ= Ġinner Bottom Text ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Inner Bottom Text Size () Ġ= Ġinner Bottom Text Size ĊĊĠĠĠ Ġfun Ġset Inner Bottom Text Size ( inner Bottom Text Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inner Bottom Text Size Ġ= Ġinner Bottom Text Size ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Inner Bottom TextColor () Ġ= Ġinner Bottom TextColor ĊĊĠĠĠ Ġfun Ġset Inner Bottom TextColor ( inner Bottom TextColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inner Bottom TextColor Ġ= Ġinner Bottom TextColor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Starting Degree () Ġ= Ġstarting Degree ĊĊĠĠĠ Ġfun Ġset Starting Degree ( starting Degree : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . starting Degree Ġ= Ġstarting Degree ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( measure ( width Measure Spec ), Ġmeasure ( height Measure Spec )) ĊĊĠĠĠĠĠĠĠ Ġ// TODO Ġcalculate Ġinner Ġcircle Ġheight Ġand Ġthen Ġposition Ġbottom Ġtext Ġat Ġthe Ġbottom Ġ( 3 / 4 ) ĊĠĠĠĠĠĠĠ Ġinner Bottom Text Height Ġ= Ġ( height Ġ- Ġheight Ġ* Ġ 3 Ġ/ Ġ 4 ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure ( measure Spec : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠView . Measure Spec . get Mode ( measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠView . Measure Spec . getSize ( measure Spec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠMIN _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠView . Measure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠMath . min ( result , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= ĠMath . max ( finished Stroke Width , Ġun finished Stroke Width ) ĊĠĠĠĠĠĠĠ Ġfinished Outer Rect . set ( delta , Ġdelta , Ġwidth Ġ- Ġdelta , Ġheight Ġ- Ġdelta ) ĊĠĠĠĠĠĠĠ Ġun finished Outer Rect . set ( delta , Ġdelta , Ġwidth Ġ- Ġdelta , Ġheight Ġ- Ġdelta ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Circle Radius Ġ= Ġ( width Ġ- ĠMath . min ( finished Stroke Width , Ġun finished Stroke Width ) Ġ+ ĠMath . abs ( finished Stroke Width Ġ- Ġun finished Stroke Width )) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( width Ġ/ Ġ 2 . 0 f , Ġheight Ġ/ Ġ 2 . 0 f , Ġinner Circle Radius , Ġinner Circle Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( finished Outer Rect , Ġstarting Degree . toFloat (), Ġprogress Angle , Ġfalse , Ġfinished Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( un finished Outer Rect , Ġstarting Degree Ġ+ Ġprogress Angle , Ġ 3 6 0 Ġ- Ġprogress Angle , Ġfalse , Ġun finished Paint ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġprogress . toInt (). toString () Ġ+ Ġ"/" Ġ+ Ġmax ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġ( this . text Ġ!= Ġnull ) Ġthis . text Ġelse Ġprefix Text Ġ+ Ġthis . progress Ġ+ Ġsuffix Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Height Ġ= Ġtext Paint . desc ent () Ġ+ Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text , Ġ( width Ġ- Ġtext Paint . measure Text ( text )) Ġ/ Ġ 2 . 0 f , Ġ( width Ġ- Ġtext Height ) Ġ/ Ġ 2 . 0 f , Ġtext Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( get Inner Bottom Text ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Paint . text Size Ġ= Ġinner Bottom Text Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Text Baseline Ġ= Ġheight . toFloat () Ġ- Ġinner Bottom Text Height Ġ- Ġ( text Paint . desc ent () Ġ+ Ġtext Paint . as cent ()) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( get Inner Bottom Text () !! , Ġ( width Ġ- Ġinner Bottom Text Paint . measure Text ( get Inner Bottom Text ())) Ġ/ Ġ 2 . 0 f , Ġbottom Text Baseline , Ġinner Bottom Text Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( attribute ResourceId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resources , Ġattribute ResourceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġ( width Ġ- Ġbitmap . width ) Ġ/ Ġ 2 . 0 f , Ġ( height Ġ- Ġbitmap . height ) Ġ/ Ġ 2 . 0 f , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( INSTANCE _ STATE , Ġsuper . on Save InstanceState ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ TEXT _ COLOR , Ġget TextColor ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ TEXT _ SIZE , ĠgetText Size ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ INNER _ BOTTOM _ TEXT _ SIZE , Ġget Inner Bottom Text Size ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ INNER _ BOTTOM _ TEXT _ COLOR , Ġget Inner Bottom TextColor (). toFloat ()) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( INSTANCE _ INNER _ BOTTOM _ TEXT , Ġget Inner Bottom Text ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ INNER _ BOTTOM _ TEXT _ COLOR , Ġget Inner Bottom TextColor ()) ĊĠĠĠĠĠĠĠ Ġbundle . put IntArray ( INSTANCE _ FINISHED _ ST RO KE _ COLOR , Ġget Finished Stroke Color ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ UN FINISHED _ ST RO KE _ COLOR , Ġget Un finished Stroke Color ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ MAX , Ġmax ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ START ING _ DEG REE , Ġget Starting Degree ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ PROGRESS , Ġprogress ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( INSTANCE _ SUFFIX , Ġget Suffix Text ()) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( INSTANCE _ PREFIX , Ġget Prefix Text ()) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( INSTANCE _ TEXT , ĠgetText ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ FINISHED _ ST RO KE _ WIDTH , Ġget Finished Stroke Width ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Float ( INSTANCE _ UN FINISHED _ ST RO KE _ WIDTH , Ġget Un finished Stroke Width ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ BACKGROUND _ COLOR , Ġget Inner BackgroundColor ()) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( INSTANCE _ INNER _ DRAW ABLE , Ġattribute ResourceId ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġstate . getInt ( INSTANCE _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġstate . get Float ( INSTANCE _ TEXT _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Size Ġ= Ġstate . get Float ( INSTANCE _ INNER _ BOTTOM _ TEXT _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom Text Ġ= Ġstate . getString ( INSTANCE _ INNER _ BOTTOM _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Bottom TextColor Ġ= Ġstate . getInt ( INSTANCE _ INNER _ BOTTOM _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinished Stroke Color Ġ= Ġstate . getInt Array ( INSTANCE _ FINISHED _ ST RO KE _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun finished Stroke Color Ġ= Ġstate . getInt ( INSTANCE _ UN FINISHED _ ST RO KE _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinished Stroke Width Ġ= Ġstate . get Float ( INSTANCE _ FINISHED _ ST RO KE _ WIDTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun finished Stroke Width Ġ= Ġstate . get Float ( INSTANCE _ UN FINISHED _ ST RO KE _ WIDTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner BackgroundColor Ġ= Ġstate . getInt ( INSTANCE _ BACKGROUND _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute ResourceId Ġ= Ġstate . getInt ( INSTANCE _ INNER _ DRAW ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit P ain ters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġstate . getInt ( INSTANCE _ MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Starting Degree ( state . getInt ( INSTANCE _ START ING _ DEG REE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġstate . get Float ( INSTANCE _ PROGRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ= Ġstate . getString ( INSTANCE _ PREFIX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuffix Text Ġ= Ġstate . getString ( INSTANCE _ SUFFIX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstate . getString ( INSTANCE _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state . get Parcelable ( INSTANCE _ STATE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Progress ( percent : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( percent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= ĠInteger . parseInt ( percent ). toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ STATE Ġ= Ġ" saved _ instance " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ TEXT _ COLOR Ġ= Ġ" text _ color " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ TEXT _ SIZE Ġ= Ġ" text _ size " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ TEXT Ġ= Ġ" text " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ INNER _ BOTTOM _ TEXT _ SIZE Ġ= Ġ" inner _ bottom _ text _ size " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ INNER _ BOTTOM _ TEXT Ġ= Ġ" inner _ bottom _ text " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ INNER _ BOTTOM _ TEXT _ COLOR Ġ= Ġ" inner _ bottom _ text _ color " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ FINISHED _ ST RO KE _ COLOR Ġ= Ġ" finished _ stroke _ color " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ UN FINISHED _ ST RO KE _ COLOR Ġ= Ġ" un finished _ stroke _ color " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ MAX Ġ= Ġ" max " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ PROGRESS Ġ= Ġ" progress " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ SUFFIX Ġ= Ġ" suffix " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ PREFIX Ġ= Ġ" prefix " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ FINISHED _ ST RO KE _ WIDTH Ġ= Ġ" finished _ stroke _ width " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ UN FINISHED _ ST RO KE _ WIDTH Ġ= Ġ" un finished _ stroke _ width " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ BACKGROUND _ COLOR Ġ= Ġ" inner _ background _ color " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ START ING _ DEG REE Ġ= Ġ" starting _ degree " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE _ INNER _ DRAW ABLE Ġ= Ġ" inner _ drawable " ĊĠĠĠ Ġ} Ċ }