package Ġcom . this al v . ge tr ange Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . this al v . ge tr ange . databinding . View All B oo y ah Ranges Binding Ċ Ċ /** Ċ Ġ* ĠDisplays Ġa Ġfirst ĠB oo y ah Ġrange , Ġand Ġa Ġsecond Ġone Ġif Ġit Ġexists . Ċ Ġ* Ċ Ġ* Ġ@ property Ġfirst Min Ġ% Ġto Ġshow Ġfor Ġ` min ` Ġof Ġthe Ġfirst Ġrange Ġtext Ġview Ċ Ġ* Ġ@ property Ġfirst Max Ġ% Ġto Ġshow Ġfor Ġ` max ` Ġof Ġthe Ġfirst Ġrange Ġtext Ġview Ċ Ġ* Ġ@ property Ġsecond Min Ġ% Ġto Ġshow Ġfor Ġ` min ` Ġof Ġthe Ġsecond Ġrange Ġtext Ġview . Ġ`- 1 ` Ġif Ġno Ġsecond Ġrange Ċ Ġ* Ġ@ property Ġsecond Max Ġ% Ġto Ġshow Ġfor Ġ` max ` Ġof Ġthe Ġsecond Ġrange Ġtext Ġview . Ġ`- 1 ` Ġif Ġno Ġsecond Ġrange Ċ Ġ* Ġ@ property Ġhas Second Range Ġ` true ` Ġif Ġ` second Min ` Ġor Ġ` second Max ` Ġis Ġ`- 1 ` Ġ( then Ġthere Ġis Ġno Ċ Ġ* Ġsecond Ġrange ) Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠT ries Ġto Ġread Ġproperties Ġfrom Ġattributes , Ġthen Ġupdating Ġthe Ġunderlying Ġtext Ġviews Ċ Ġ* Ġdisplaying Ġthe Ġb oo y ah Ġranges . ĠDefault Ġvalue Ġis Ġ 0 Ġfor Ġ 1 st Ġrange Ġand Ġ- 1 Ġfor Ġ 2 nd Ġrange , Ġmeaning Ċ Ġ* Ġthat Ġmissing Ġ 2 nd Ġrange Ġvalue , Ġmin Ġor Ġmax , Ġmeans Ġ 2 nd Ġrange Ġdoesn 't Ġexist . Ċ Ġ*/ Ċ class ĠAll B oo y ah Ranges View Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet Ċ ): ĠConstraint Layout ( context , Ġattrs ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġfirst Min Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfirst Max Ġ= Ġ 0 ĊĊĠĠĠ Ġ// Ġsecond * Ġproperties Ġmust Ġbe Ġinitialized Ġfor Ġhas Second Range Ġgetter Ġto Ġwork ĊĠĠĠ Ġprivate Ġvar Ġsecond Min Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġsecond Max Ġ= Ġ- 1 ĊĠĠĠ Ġ// ĠIf Ġone Ġof Ġthe Ġtwo Ġ 2 nd Ġrange Ġvalue Ġis Ġundefined , Ġthen Ġthere Ġis Ġno Ġ 2 nd Ġrange ĊĠĠĠ Ġprivate Ġval Ġhas Second Range : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsecond Min Ġ!= Ġ- 1 Ġ|| Ġsecond Max Ġ!= Ġ- 1 ĊĊĠĠĠ Ġ// ĠAc cesses Ġproperties Ġto Ġrefresh Ġb oo y ah Ġranges Ġvalues Ġon Ġunderlying ĠB oo y ah Range View Ġelements ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠView All B oo y ah Ranges Binding ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĠR . style able . All B oo y ah Ranges View , Ġ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġ// Ġget Int () Ġmight Ġfail Ġif Ġthis ĠTyped Array Ġwasn 't Ġre cyc led Ġby Ġprevious Ġoperation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Min Ġ= Ġget Int ( R . style able . All B oo y ah Ranges View _ first Min , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Max Ġ= Ġget Int ( R . style able . All B oo y ah Ranges View _ first Max , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMissing Ġ 2 nd Ġrange Ġvalue Ġwill Ġlead Ġto Ġ- 1 Ġvalue Ġwhich Ġis Ġdisabling Ġthis Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Min Ġ= Ġget Int ( R . style able . All B oo y ah Ranges View _ second Min , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Max Ġ= Ġget Int ( R . style able . All B oo y ah Ranges View _ second Max , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreates Ġand Ġdisplay Ġthe Ġchild ĠLinearLayout Ġcontaining Ġthe Ġ 2 Ġranges Ġtext views ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= ĠView All B oo y ah Ranges Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ), Ġthis @ All B oo y ah Ranges View , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġcut som Ġview Ġ( All B oo y ag Ranges View ) Ġis Ġpure ly Ġfor Ġlogic Ġmonitoring Ġof ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġchild Ġview ĠLinearLayout , Ġso Ġchild Ġtakes Ġthe Ġwhole Ġavailable Ġspace Ġat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinf late ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params ?. width Ġ= ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params ?. height Ġ= ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUpdates Ġdata Ġbinding Ġvariables Ġfor Ġcustom Ġview ĠXML Ġattributes ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Min Ġ= Ġthis @ All B oo y ah Ranges View . first Min ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Max Ġ= Ġthis @ All B oo y ah Ranges View . first Max ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Min Ġ= Ġthis @ All B oo y ah Ranges View . second Min ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Max Ġ= Ġthis @ All B oo y ah Ranges View . second Max ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Second Range Ġ= Ġthis @ All B oo y ah Ranges View . has Second Range ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLayout Ġmust Ġbe Ġcalculated Ġagain , Ġand Ġview Ġmust Ġbe Ġredraw n ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġ` first Min `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset First Min ( first Min : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . first Min Ġ= Ġfirst Min ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġ` first Max `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset First Max ( first Max : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . first Max Ġ= Ġfirst Max ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġ` second Min `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Second Min ( second Min : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . second Min Ġ= Ġsecond Min ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġ` second Max `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Second Max ( second Max : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . second Max Ġ= Ġsecond Max ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} Ċ }