package Ġcom . github . pr ave en 2 ge mini Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . annotation . Id Res Ċ import Ġandroid . support . annotation . Style Res Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . widget . Compound Button Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . aut ofill . Aut ofill Manager Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . pr ave en 2 ge mini . design . R Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠPr ave en Ġon Ġ 2 6 / 0 7 / 1 8 . Ċ Ġ*/ Ċ class ĠCheckBox Group Ġ: ĠLinearLayout Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġm Checked Ids Ġ= ĠArrayList < Int >() ĊĠĠĠ Ġ// Ġtracks Ġchildren Ġcheckbox Ġbuttons Ġchecked Ġstate ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Child On Checked ChangeListener : ĠCompound Button . On Checked ChangeListener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Pass Through Listener : ĠPass Through Hierarchy ChangeListener ĊĠĠĠ Ġprivate Ġvar Ġm On Checked ChangeListener : ĠCheckBox Group . On Checked ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis Check Group Header Enabled : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġcheck Group Header Title : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġvar Ġcheck Group Header Title Color : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġvar Ġcheck Group Header BackgroundColor : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġinner Margin Value : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcheck Group Header Max Lines : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĊĠĠĠ Ġprivate Ġvar Ġcheck GroupBox Text Size : ĠFloat ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Style Res ĊĠĠĠ Ġprivate Ġvar Ġcheck GroupBox TextAppearance : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġidentifier Ġof Ġthe Ġselected Ġcheckbox Ġbutton Ġin Ġthis Ġgroup . ĊĠĠĠĠ Ġ* ĠUp on Ġempty Ġselection , Ġthe Ġreturned Ġvalue Ġis Ġ- 1 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġunique Ġid Ġof Ġthe Ġselected Ġcheckbox Ġbutton Ġin Ġthis Ġgroup ĊĠĠĠĠ Ġ* Ġ@ attr Ġref Ġandroid . R . style able # checkbox Group _ checked Button ĊĠĠĠĠ Ġ* Ġ@ see Ġ. check ĊĠĠĠĠ Ġ* Ġ@ see Ġ. clear Check ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġchecked Checkbox Button Ids : ĠArrayList < Int > ĊĠĠĠĠĠĠĠ Ġ@ Id Res ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠArrayList ( HashSet ( m Checked Ids )) ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheckbox Group Ġis Ġimportant Ġby Ġdefault , Ġunless Ġapp Ġdeveloper Ġover ro de Ġattribute . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( important For Aut ofill Ġ== ĠView . IMPORTANT _ FOR _ AUT OF ILL _ AUTO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimportant For Aut ofill Ġ= ĠView . IMPORTANT _ FOR _ AUT OF ILL _ YES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . CheckBox Group , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Check Group Header Enabled Ġ= Ġa . getBoolean ( R . style able . CheckBox Group _ is Check Group Header Enabled , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header Title Ġ= Ġa . getString ( R . style able . CheckBox Group _ check Group Header Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header Title Color Ġ= Ġa . getColor ( R . style able . CheckBox Group _ check Group Header TextColor , ĠColor . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header BackgroundColor Ġ= Ġa . getColor ( R . style able . CheckBox Group _ check Group Header BackgroundColor , ĠColor . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Margin Value Ġ= Ġa . get Dimension Pixel Offset ( R . style able . CheckBox Group _ check Group Child Inner Margin , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck GroupBox Text Size Ġ= Ġa . get Dimension ( R . style able . CheckBox Group _ check Group Header Text Size , Ġ- 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header Max Lines Ġ= Ġa . getInteger ( R . style able . CheckBox Group _ check Group Header Max Lines , ĠInt . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck GroupBox TextAppearance Ġ= Ġa . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . CheckBox Group _ check Group Header TextAppearance , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Child On Checked ChangeListener Ġ= ĠChecked State Tracker () ĊĠĠĠĠĠĠĠ Ġm Pass Through Listener Ġ= ĠPass Through Hierarchy ChangeListener () ĊĠĠĠĠĠĠĠ Ġsuper . setOn Hierarchy ChangeListener ( m Pass Through Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġfun Ġfind Accent Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġa : ĠTyped Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġcontext . obtain Styled Attributes ( typed Value . data , Ġint ArrayOf ( R . attr . color Accent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa . getColor ( 0 , ĠColor . BLACK ) Ġ// ĠDefault ĠBLACK ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ?. recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġselection Ġto Ġthe Ġcheckbox Ġbutton Ġwhose Ġidentifier Ġis Ġpassed Ġin ĊĠĠĠĠ Ġ* Ġparameter . ĠUsing Ġ- 1 Ġas Ġthe Ġselection Ġidentifier Ġclears Ġthe Ġselection ; ĊĠĠĠĠ Ġ* Ġsuch Ġan Ġoperation Ġis Ġequivalent Ġto Ġinvoking ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġthe Ġunique Ġid Ġof Ġthe Ġcheckbox Ġbutton Ġto Ġselect Ġin Ġthis Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck (@ Id Res Ġid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Checked Ġ= Ġm Checked Ids . contains ( id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Checked State For View ( id , Ġis Checked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Checked Id ( id , Ġis Checked ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Checked Id (@ Id Res Ġid : ĠInt , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠDEFAULT _ HEADER _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ CheckBox Group . getChild At ( i )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader CheckBox Ġ= Ġit Ġas ĠCheckBox ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . isChecked Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Checked Ids . contains ( id ) Ġ&& Ġ! isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Checked Ids . remove ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Checked Ids . add ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġheader CheckBox Ġ= Ġthis @ CheckBox Group . getChild At ( 0 ) Ġas ĠCheckBox ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Checkbox Button Ids . size Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . is Activated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Checkbox Button Ids . size Ġ== Ġchild Count Ġ- Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . is Activated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Checkbox Button Ids . size Ġin Ġ 1 .. ( child Count Ġ- Ġ 2 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader CheckBox . is Activated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompound Button Compat . set Button Tint List ( header CheckBox , ĠColor State List . valueOf ( find Accent Color ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm On Checked ChangeListener ?. on CheckedChanged ( this , Ġid , Ġis Checked ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa fm Ġ= Ġcontext . getSystem Service ( Aut ofill Manager :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa fm ?. notify ValueChanged ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Checked State For View (@ Id Res Ġview Id : ĠInt , Ġchecked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchecked View Ġ= ĠfindViewById < View >( view Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( checked View Ġ!= Ġnull Ġ&& Ġchecked View Ġis ĠCheckBox ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecked View . isChecked Ġ= Ġchecked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( attrs : ĠAttributeSet ): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCheckBox Group . LayoutParams ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset On Hierarchy ChangeListener ( listener : ĠViewGroup . On Hierarchy ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Pass Through Listener . m On Hierarchy ChangeListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( m Checked Id Ġin Ġm Checked Ids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchecks Ġthe Ġappropriate Ġcheckbox Ġbutton Ġas Ġrequested Ġin Ġthe ĠXML Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Checked Id Ġ<= Ġ 0 ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Checked State For View ( m Checked Id , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Checked Id ( m Checked Id , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView , Ġindex : ĠInt , Ġparams : ĠViewGroup . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd CheckBox Header ( 0 , Ġparams ) ĊĠĠĠĠĠĠĠ Ġval Ġmargin Added Params Ġ= ĠLinearLayout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠCheckBox ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ******** *** ", Ġ" check bo z Ġadded Ġ" Ġ+ Ġchild . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ******** *** ", Ġ" check bo z Ġthis . child Count Ġ" Ġ+ Ġthis . child Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Margin Value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Added Params . left Margin Ġ= Ġget Inner Child Margin ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params Ġis ĠLinearLayout . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Added Params . right Margin Ġ= Ġparams . right Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Added Params . top Margin Ġ= Ġparams . top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Added Params . bottom Margin Ġ= Ġparams . bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompound Button Compat . set Button Tint List ( child , ĠColor State List . valueOf ( find Accent Color ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Checked Id ( child . id , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex , Ġmargin Added Params ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Inner Child Margin ( dp Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġ( dp Value Ġ* Ġd ). toInt () Ġ// Ġmargin Ġin Ġpixels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd CheckBox Header ( index : ĠInt , Ġparams : ĠViewGroup . LayoutParams ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġparams ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 Ġ&& Ġis Check Group Header Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Box Ġ= ĠCheckBox ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . id Ġ= ĠDEFAULT _ HEADER _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . layout Params Ġ= ĠLinearLayout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header Title Color ?. let Ġ{ Ġheader Box . setTextColor ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Group Header BackgroundColor ?. let Ġ{ Ġheader Box . set BackgroundColor ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . text Ġ= Ġcheck Group Header Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . max Lines Ġ= Ġcheck Group Header Max Lines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck GroupBox TextAppearance ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . setText Appearance ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . setText Appearance ( context , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck GroupBox Text Size ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġ- 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . text Size Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Box . button Drawable Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . checkbox _ selector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompound Button Compat . set Button Tint List ( header Box , ĠColor State List . valueOf ( find Accent Color ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . addView ( header Box , Ġindex , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġselection . ĠWhen Ġthe Ġselection Ġis Ġcleared , Ġno Ġcheckbox Ġbutton ĊĠĠĠĠ Ġ* Ġin Ġthis Ġgroup Ġis Ġselected ĊĠĠĠĠ Ġ* Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Check () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck (- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠRegister Ġa Ġcallback Ġto Ġbe Ġinvoked Ġwhen Ġthe Ġchecked Ġcheckbox Ġbutton ĊĠĠĠĠ Ġ* Ġchanges Ġin Ġthis Ġgroup . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġthe Ġcallback Ġto Ġcall Ġon Ġchecked Ġstate Ġchange ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset On Checked ChangeListener ( listener : ĠOn Checked ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On Checked ChangeListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠInterface Ġdefinition Ġfor Ġa Ġcallback Ġto Ġbe Ġinvoked Ġwhen Ġthe Ġchecked ĊĠĠĠĠ Ġ* Ġcheckbox Ġbutton Ġchanged Ġin Ġthis Ġgroup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Checked ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġchecked Ġcheckbox Ġbutton Ġhas Ġchanged . ĠWhen Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġselection Ġis Ġcleared , Ġchecked Id Ġis Ġ- 1 . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgroup ĠĠĠĠ Ġthe Ġgroup Ġin Ġwhich Ġthe Ġchecked Ġcheckbox Ġbutton Ġhas Ġchanged ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġchecked Id Ġthe Ġunique Ġidentifier Ġof Ġthe Ġnewly Ġchecked Ġcheckbox Ġbutton ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon CheckedChanged ( group : ĠCheckBox Group , Ġ@ Id Res Ġchecked Id : ĠInt , Ġis Checked : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġset Ġof Ġlayout Ġparameters Ġdefaults Ġthe Ġwidth Ġand Ġthe Ġheight Ġof ĊĠĠĠĠ Ġ* Ġthe Ġchildren Ġto Ġ[. WRAP _ CONTENT ] Ġwhen Ġthey Ġare Ġnot Ġspecified Ġin Ġthe ĊĠĠĠĠ Ġ* ĠXML Ġfile . ĠOtherwise , Ġthis Ġclass Ġus sed Ġthe Ġvalue Ġread Ġfrom Ġthe ĠXML Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfor Ġa Ġlist Ġof Ġall Ġchild Ġview Ġattributes Ġthat Ġthis Ġclass Ġsupports . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠLayout Params Ġ: ĠLinearLayout . LayoutParams Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( c : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( c , Ġattrs ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( w : ĠInt , Ġh : ĠInt ) Ġ: Ġsuper ( w , Ġh ) ĊĊĊĠĠĠĠĠĠĠ Ġconstructor ( w : ĠInt , Ġh : ĠInt , Ġinit Weight : ĠFloat ) Ġ: Ġsuper ( w , Ġh , Ġinit Weight ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( p : ĠViewGroup . LayoutParams ) Ġ: Ġsuper ( p ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . Margin LayoutParams ) Ġ: Ġsuper ( source ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠFixes Ġthe Ġchild 's Ġwidth Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ android . view . ViewGroup . LayoutParams . WRAP _ CONTENT ] Ġand Ġthe Ġchild 's ĊĠĠĠĠĠĠĠĠ Ġ* Ġheight Ġto Ġ Ġ[ android . view . ViewGroup . LayoutParams . WRAP _ CONTENT ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġwhen Ġnot Ġspecified Ġin Ġthe ĠXML Ġfile . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġa ĠĠĠĠĠĠĠĠĠ Ġthe Ġstyled Ġattributes Ġset ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwidth Attr Ġ Ġthe Ġwidth Ġattribute Ġto Ġfetch ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġheight Attr Ġthe Ġheight Ġattribute Ġto Ġfetch ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Base Attributes ( a : ĠTyped Array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Attr : ĠInt , Ġheight Attr : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġif Ġ( a . hasValue ( width Attr )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . get Layout Dimension ( width Attr , Ġ" layout _ width ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( a . hasValue ( height Attr )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . get Layout Dimension ( height Attr , Ġ" layout _ height ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠChecked State Tracker Ġ: ĠCompound Button . On Checked ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( button View : ĠCompound Button , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġbutton View . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Checked Id ( id , Ġis Checked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġpass - through Ġlistener Ġacts Ġupon Ġthe Ġevents Ġand Ġdis patches Ġthem ĊĠĠĠĠ Ġ* Ġto Ġanother Ġlistener . ĠThis Ġallows Ġthe Ġtable Ġlayout Ġto Ġset Ġits Ġown Ġinternal ĊĠĠĠĠ Ġ* Ġhierarchy Ġchange Ġlistener Ġwithout Ġprevent ing Ġthe Ġuser Ġto Ġsetup Ġhis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠPass Through Hierarchy ChangeListener Ġ: ĠViewGroup . On Hierarchy ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġm On Hierarchy ChangeListener : ĠViewGroup . On Hierarchy ChangeListener ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child View Added ( parent : ĠView , Ġchild : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ=== Ġthis @ CheckBox Group Ġ&& Ġchild Ġis ĠCheckBox ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġid Ġ= Ġchild . getId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgenerates Ġan Ġid Ġif Ġit 's Ġmissing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠView . NO _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠView . generate View Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setId ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setOn Checked ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Child On Checked ChangeListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On Hierarchy ChangeListener ?. on Child View Added ( parent , Ġchild ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child View Removed ( parent : ĠView , Ġchild : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ=== Ġthis @ CheckBox Group Ġ&& Ġchild Ġis ĠCheckBox ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setOn Checked ChangeListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On Hierarchy ChangeListener ?. on Child View Removed ( parent , Ġchild ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ HEADER _ ID : ĠInt Ġ= Ġ 1 2 3 4 ĊĠĠĠ Ġ} Ċ } Ċ