/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠZ hi hu ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . q ing me i 2 . rx image picker _ extension . ui . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . graphics . Rad ial Gradient Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Shader Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ Ċ import Ġcom . q ing me i 2 . rx image picker _ extension . R Ċ Ċ open Ġclass ĠCheck View Ġ: ĠView Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġm Count able : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprotected Ġvar Ġm Checked : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprotected Ġvar Ġm Checked Num : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġm Stroke Paint : ĠPaint ĊĠĠĠ Ġprotected Ġvar Ġm Background Paint : ĠPaint ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Text Paint : ĠText Paint ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Shadow Paint : ĠPaint ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Check Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Density : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Check Rect : ĠRect ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Enabled Ġ= Ġtrue ĊĠĠĠ Ġ// Ġrect Ġfor Ġdrawing Ġchecked Ġnumber Ġor Ġmark ĊĠĠĠ Ġprivate Ġval Ġcheck Rect : ĠRect ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Check Rect Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Padding Ġ= Ġ( SIZE Ġ* Ġm Density Ġ/ Ġ 2 Ġ- ĠCONTENT _ SIZE Ġ* Ġm Density Ġ/ Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Check Rect Ġ= ĠRect ( rect Padding , Ġrect Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( SIZE Ġ* Ġm Density Ġ- Ġrect Padding ). toInt (), Ġ( SIZE Ġ* Ġm Density Ġ- Ġrect Padding ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Check Rect !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfixed Ġsize Ġ 4 8 dp Ġx Ġ 4 8 dp ĊĠĠĠĠĠĠĠ Ġval Ġsize Spec Ġ= ĠMeasure Spec . make Measure Spec (( SIZE Ġ* Ġm Density ). toInt (), ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( size Spec , Ġsize Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Density Ġ= Ġcontext . resources . display Metrics . density ĊĊĠĠĠĠĠĠĠ Ġm Stroke Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġm Stroke Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Stroke Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Stroke Paint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ OVER ) ĊĠĠĠĠĠĠĠ Ġm Stroke Paint . stroke Width Ġ= ĠST RO KE _ WIDTH Ġ* Ġm Density ĊĠĠĠĠĠĠĠ Ġval Ġta Ġ= ĠgetContext (). theme . obtain Styled Attributes ( int ArrayOf ( R . attr . item _ check Circle _ border Color )) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Color Ġ= ĠResources Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĠR . color . default _ item _ check Circle _ border Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetContext (). theme ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġta . getColor ( 0 , Ġdefault Color ) ĊĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠĠĠĠĠ Ġm Stroke Paint . color Ġ= Ġcolor ĊĊĠĠĠĠĠĠĠ Ġm Check Drawable Ġ= ĠResources Compat . get Drawable ( context . resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ check _ white _ 1 8 dp , Ġcontext . theme ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Checked ( checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Count able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Check View Ġis Ġcount able , Ġcall Ġset Checked Num () Ġinstead .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Checked Ġ= Ġchecked ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Count able ( count able : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Count able Ġ= Ġcount able ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Checked Num ( checked Num : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Count able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Check View Ġis Ġnot Ġcount able , Ġcall Ġset Checked () Ġinstead .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( checked Num Ġ!= ĠUN CHECK ED Ġ&& Ġchecked Num Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" checked Ġnum Ġcan 't Ġbe Ġnegative .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Checked Num Ġ= Ġchecked Num ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Enabled Ġ!= Ġenabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Enabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġouter Ġand Ġinner Ġshadow ĊĠĠĠĠĠĠĠ Ġinit Shadow Paint () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( SIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĠSIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ST RO KE _ RADIUS Ġ+ ĠST RO KE _ WIDTH Ġ/ Ġ 2 Ġ+ ĠSH ADOW _ WIDTH ) Ġ* Ġm Density , Ġm Shadow Paint !! ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġwhite Ġstroke ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( SIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĠSIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠST RO KE _ RADIUS Ġ* Ġm Density , Ġm Stroke Paint ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġcontent ĊĠĠĠĠĠĠĠ Ġif Ġ( m Count able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Checked Num Ġ!= ĠUN CHECK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Background Paint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( SIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĠSIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBG _ RADIUS Ġ* Ġm Density , Ġm Background Paint !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Text Paint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġm Checked Num . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase X Ġ= Ġ( width Ġ- Ġm Text Paint !!. measure Text ( text )). toInt () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Y Ġ= Ġ( height . toFloat () Ġ- Ġm Text Paint !!. desc ent () Ġ- Ġm Text Paint !!. as cent ()). toInt () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text , Ġbase X . toFloat (), Ġbase Y . toFloat (), Ġm Text Paint !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Background Paint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( SIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĠSIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBG _ RADIUS Ġ* Ġm Density , Ġm Background Paint !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Check Drawable !!. bounds Ġ= Ġcheck Rect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Check Drawable !!. draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġenable Ġhint ĊĠĠĠĠĠĠĠ Ġalpha Ġ= Ġif Ġ( m Enabled ) Ġ 1 . 0 f Ġelse Ġ 0 . 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Shadow Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Shadow Paint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Paint !!. is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġin Ġdp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġouter Radius Ġ= ĠST RO KE _ RADIUS Ġ+ ĠST RO KE _ WIDTH Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Radius Ġ= Ġouter Radius Ġ- ĠST RO KE _ WIDTH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradient Radius Ġ= Ġouter Radius Ġ+ ĠSH ADOW _ WIDTH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop 0 Ġ= Ġ( inner Radius Ġ- ĠSH ADOW _ WIDTH ) Ġ/ Ġgradient Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop 1 Ġ= Ġinner Radius Ġ/ Ġgradient Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop 2 Ġ= Ġouter Radius Ġ/ Ġgradient Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop 3 Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Paint !!. shader Ġ= ĠRad ial Gradient ( SIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSIZE . toFloat () Ġ* Ġm Density Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradient Radius Ġ* Ġm Density , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( Color . parse Color ("# 0 0 0 0 0 0 0 0 "), ĠColor . parse Color ("# 0 D 0 0 0 0 0 0 "), ĠColor . parse Color ("# 0 D 0 0 0 0 0 0 "), ĠColor . parse Color ("# 0 0 0 0 0 0 0 0 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( stop 0 , Ġstop 1 , Ġstop 2 , Ġstop 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Background Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Background Paint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint !!. is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint !!. style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġcontext . theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. obtain Styled Attributes ( int ArrayOf ( R . attr . item _ check Circle _ backgroundColor )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Color Ġ= ĠResources Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĠR . color . default _ item _ check Circle _ backgroundColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġta . getColor ( 0 , Ġdefault Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Paint !!. color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Text Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Text Paint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint Ġ= ĠText Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint !!. is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint !!. color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint !!. type face Ġ= ĠType face . create ( Type face . DEFAULT , ĠType face . BOLD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Paint !!. text Size Ġ= Ġ 1 2 . 0 f Ġ* Ġm Density ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUN CHECK ED Ġ= ĠInteger . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSIZE Ġ= Ġ 4 0 Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST RO KE _ RADIUS Ġ= Ġ 1 0 f Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST RO KE _ WIDTH Ġ= Ġ 3 . 0 f Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSH ADOW _ WIDTH Ġ= Ġ 6 . 0 f Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBG _ RADIUS Ġ= Ġ 1 1 . 0 f Ġ// Ġdp ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONTENT _ SIZE Ġ= Ġ 1 6 Ġ// Ġdp ĊĠĠĠ Ġ} Ċ } Ċ