package Ġes . ant on bor ri . activity ring Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . constraint . Constraint Set Ċ import Ġandroid . util . Attribute Set Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġan ton bor ries Ġon Ġ 2 0 . 0 2 . 1 8 . Ċ Ġ*/ Ċ class ĠActivity Ring Container ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠConstraint Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġactivity R ings : ĠMutable List < Activity Ring > Ġ= ĠArrayList < Activity Ring >() ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove All Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Constraints () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠstrokeWidth : ĠFloat Ġ= Ġ 2 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ring Ġin Ġactivity R ings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring . stroke Width Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove All Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Constraints () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġcalculate Stroke Width () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġring Margin : ĠInt Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġ( value Ġ* Ġresources . display Metrics . density ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġshow Icons : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ring Ġin Ġactivity R ings ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring . show Icon Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Display ĠSingle ĠRing Ġfor ĠLayout ĠEditor ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġring 1 Ġ= ĠActivity Ring ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġring 1 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 . 7 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ring ( ring 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Retrieve ĠAttributes ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa : ĠTyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Activity Ring Container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Icons Ġ= Ġa . getBoolean ( R . style able . Activity Ring Container _ show Icon , Ġshow Icons ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġring Margin Ġ= Ġa . get Dimension ( R . style able . Activity Ring Container _ ring Margin , Ġ 2 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġr ings ĠRing ( s ) Ġto Ġbe ĠAdded ĊĠĠĠĠ Ġ* ĠAdd ĠR ings Ġto Ġthe ĠLayout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd R ings ( r ings : ĠList < Activity Ring >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Ring (* r ings . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġring ĠRing ( s ) Ġto Ġbe ĠAdded ĊĠĠĠĠ Ġ* ĠAdd ĠR ings Ġto Ġthe ĠLayout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Ring ( var arg Ġring : ĠActivity Ring ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity R ings . addAll ( ring ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( new Ring Ġin Ġring ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ring . show Icon Ġ= Ġshow Icons ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcalculate Stroke Width () ĊĠĠĠĠĠĠĠ Ġupdate Constraints () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Stroke Width () Ġ{ ĊĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ( width Ġ/ ĠMath . max ( 1 0 , Ġ( activity R ings . size Ġ+ Ġ 1 ) Ġ* Ġ 2 )). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates ĠConstraint ĠLayout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Constraints () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Only ĠAdd ĠChildren Ġnot Ġyet Ġin Ġlayout ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġchild Count Ġuntil Ġactivity R ings . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity R ings [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . stroke Width Ġ= ĠstrokeWidth ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Padding ( ring Margin , Ġring Margin , Ġring Margin , Ġring Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . id Ġ= Ġindex Ġ+ Ġ 1 3 1 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmargin : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Id Ġ= ĠConstraint Set . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Ġ= Ġring Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Id Ġ= Ġget Child At ( index Ġ- Ġ 1 ). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Ġ= Ġring Margin Ġ+ ĠstrokeWidth . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( this @ Activity Ring Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( id , ĠConstraint Set . START , Ġtarget Id , ĠConstraint Set . START , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( id , ĠConstraint Set . TOP , Ġtarget Id , ĠConstraint Set . TOP , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( id , ĠConstraint Set . END , Ġtarget Id , ĠConstraint Set . END , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( id , ĠConstraint Set . BOTTOM , Ġtarget Id , ĠConstraint Set . BOTTOM , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstr ain Width ( id , ĠConstraint Set . MATCH _ CONSTRAINT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstr ain Height ( id , ĠConstraint Set . MATCH _ CONSTRAINT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Dimension Ratio ( id , Ġ" 1 : 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply To ( this @ Activity Ring Container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠPosition Ġof ĠRing ĊĠĠĠĠ Ġ* Ġ@ return ĠActivity Ring Ġat Ġthat Ġspecific ĠPosition ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ( position : ĠInt ): ĠActivity Ring ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ>= Ġ 0 Ġ&& Ġposition Ġ< Ġactivity R ings . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity R ings [ position ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }