package Ġcom . row land . stri pped progressbar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . row land . stri pped progressbar . api . traits . Progress View Ċ import Ġcom . row land . stri pped progressbar . api . traits . Round ableView Ċ Ċ /** Ċ Ġ* ĠStri pped ProgressBar Groups Ġare Ġa ĠLinearLayout Ġwhich Ġexclus ively Ġholds ĠStri pped ProgressBar s Ġin Ġa Ġhorizontal Ġorientation . Ċ Ġ* ĠThis Ġcan Ġbe Ġused Ġto Ġcreate Ġthe Ġeffect Ġof Ġstack ed Ġprogress Ġbars Ċ Ġ* Ċ Ġ* ĠEach Ġchild Ġwill Ġhave Ġthere Ġweight Ġand Ġmax Ġprogress Ġset Ġto Ġthere Ġprogress . ĠAn Ġempty Ġprogress bar Ġempty ProgressBar Ġwill Ġthen Ġbe Ġadded Ġto Ġthe Ġend Ġof Ġlayout Ġif Ġthe Ġbar Ġis Ġnot Ġfull . Ċ Ġ*/ Ċ class ĠStri pped ProgressBar Group Ġ: ĠStri pped Group , ĠProgress View , ĠRound ableView Ġ{ ĊĊ ĉ private Ġvar Ġcumulative Progress : ĠInt Ġ= Ġ 0 Ċ ĉ private Ġval Ġempty ProgressBar Ġ= ĠStri pped ProgressBar ( context ) Ċ ĉ private Ġvar Ġsize Ordinal : ĠInt Ġ= Ġ 0 ĊĉĊ ĉ /** Ċĉ Ġ* ĠThis Ġwill Ġonly Ġbe Ġtrue Ġif Ġset Strip ed ( true ) Ġwas Ġcalled Ċĉ Ġ* Ġ@ return Ġstrip ed Ġtrue Ġfor Ġa Ġstrip ed Ġpattern , Ġfalse Ġfor Ġa Ġplain Ġpattern Ċĉ Ġ*/ Ċ ĉ /** Ċĉ Ġ* ĠThis Ġwill Ġset Ġall Ġchildren Ġto Ġstrip ed . Ċĉ Ġ* Ġ@ param Ġstrip ed Ġtrue Ġfor Ġa Ġstrip ed Ġpattern , Ġfalse Ġfor Ġa Ġplain Ġpattern Ċĉ Ġ*/ Ċ ĉ override Ġvar Ġis Strip ed Ġ= Ġfalse Ċĉ ĉ set ( striped ) Ġ{ Ċĉĉ ĉ field Ġ= Ġstrip ed Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ Ċĉĉĉ ĉ retrieve Child ( i ). is Strip ed Ġ= Ġstrip ed Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĠĠĠ Ġoverride Ġvar Ġprogress Bg Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġprogress Bg Color ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . progress Bg Color Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĉĊĉĊ ĉ /** Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ġint Ġmax Progress . ĠReturns Ġthe Ġmax Progress Ġvalue Ċĉ Ġ*/ Ċ ĉ /** Ċĉ Ġ* ĠUsed Ġfor Ġsettings Ġthe Ġmax progress . ĠAlso Ġcheck Ġif ĠC umulative Ġprogress Ġis Ġsmaller Ġthan Ġthe Ġmax Ċĉ Ġ* Ġbefore Ġasign ing , Ġsee Ġ[. check C umulative Small er Than Max ]. Ċĉ Ġ* Ġ@ param Ġmax Progress Ġthe Ġmax Progress Ġvalue Ċĉ Ġ*/ Ċ ĉ override Ġvar Ġmax Progress : ĠInt Ċĉ ĉ get () Ġ= Ġmax Progress ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck C umulative Small er Than Max ( value , Ġcumulative Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Progress Ġ= Ġvalue Ċĉ ĉ } ĊĉĊĉĊ ĉ private Ġvar ĠisEmpty Being Added Ġ= Ġfalse Ċ ĉ private Ġvar Ġrounded : ĠBoolean Ġ= Ġfalse Ċ ĉ /** Ċĉ Ġ* ĠThis Ġwill Ġonly Ġbe Ġtrue Ġif Ġset Animated ( true ) Ġwas Ġcalled Ċĉ Ġ* Ġ@ return Ġanimated Ġif Ġall Ġchildren Ġhave Ġbeen Ġset Ġto Ġbe Ġanimated Ġ( through Ġthe ĠGroup ) Ċĉ Ġ*/ Ċ ĉ /** Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġanimated Ġwhether Ġthe Ġview Ġshould Ġanimate Ġits Ġupdates Ġor Ġnot . Ċĉ Ġ*/ Ċ ĉ override Ġvar Ġis Animated : ĠBoolean Ġ= Ġfalse Ċĉ ĉ set ( animated ) Ġ{ Ċĉĉ ĉ field Ġ= Ġanimated Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ Ċĉĉĉ ĉ retrieve Child ( i ). is Animated Ġ= Ġanimated Ċĉĉ ĉ } Ċĉ ĉ } ĊĉĊ ĉ private Ġval Ġdef ult layout Params : ĠLinearLayout . LayoutParams Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ val Ġheight Ġ= Ċĉĉĉ ĉ Typed Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 0 f , Ġresources . display Metrics ) Ċĉĉĉĉ ĉ . toInt () ĊĉĉĉĊĉĉ ĉ return ĠLayout Params ( height , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) Ċĉ ĉ } ĊĉĊ ĉ /** Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ġa Ġboolean Ġweather Ġthe Ġprogress bar Group Ġwill Ġhave Ġrounded Ġedges Ċĉ Ġ*/ Ċ ĉ /** Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġrounded Ġif Ġit Ġshould Ġdisplay Ġrounded Ġcorners . Ġtrue Ġwill Ġround Ġthe Ġcorners , Ġfalse Ġw ont Ċĉ Ġ*/ Ċ ĉ override Ġvar Ġis Rounded : ĠBoolean Ċĉ ĉ get () Ġ= Ġrounded Ċĉ ĉ set ( rounded ) Ġ{ Ċĉĉ ĉ this . rounded Ġ= Ġrounded Ċĉĉ ĉ update Bootstrap Group () Ċĉ ĉ } ĊĉĊ ĉ override Ġvar Ġprogress : ĠInt Ċĉ ĉ get () Ġ= Ġthrow ĠIllegalStateException (" This Ġmethod Ġnot Ġapplicable Ġfor Ġtype ĠStri pped ProgressBar Group ") Ċĉ ĉ set ( progress ) Ġ= Ġthrow ĠIllegalStateException (" This Ġmethod Ġnot Ġapplicable Ġfor Ġtype ĠStri pped ProgressBar Group ") ĊĉĊ ĉ constructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ Ċĉ ĉ initial ise ( null ) Ċ ĉ } ĊĉĊ ĉ constructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ Ċĉ ĉ initial ise ( attrs ) Ċ ĉ } ĊĉĊ ĉ constructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( Ċĉ ĉ context , Ċĉ ĉ attrs , Ċĉ ĉ def Style Attr Ċ ĉ ) Ġ{ Ċĉ ĉ initial ise ( attrs ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġinitialise ( attrs : ĠAttributeSet ?) Ġ{ Ċĉ ĉ val Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Stri pped ProgressBar Group ) ĊĉĉĊĉ ĉ try Ġ{ Ċĉĉ ĉ this . max Progress Ġ= Ċĉĉĉ ĉ a . getInt ( R . style able . Stri pped ProgressBar Group _ p Max Progress , Ġ 1 0 0 ) Ċĉĉ ĉ this . size Ordinal Ġ= Ġa . getInt ( R . style able . Stri pped ProgressBar Group _ p Size , Ġ 2 ) Ċĉĉ ĉ this . rounded Ġ= Ġa . getBoolean ( R . style able . Stri pped ProgressBar Group _ p Rounded C orners , Ġfalse ) Ċĉ ĉ } Ġfinally Ġ{ Ċĉĉ ĉ a . recycle () Ċĉ ĉ } ĊĉĉĊĉ ĉ orientation Ġ= ĠLinearLayout . HORIZONTAL Ċĉ ĉ update Bootstrap Group () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġon Bootstrap View Added () Ġ{ Ċĉ ĉ add Empty ProgressBar () ĊĉĉĊĉ ĉ update Bootstrap Group () Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġon Bootstrap View Removed () Ġ{ Ċĉ ĉ add Empty ProgressBar () ĊĉĉĊĉ ĉ update Bootstrap Group () Ċ ĉ } ĊĉĊ ĉ /** Ċĉ Ġ* ĠThis Ġlooks Ġfor Ġinstances Ġof Ġempty ProgressBar Ġand Ġremoves Ġthem Ġif Ġthey Ġare Ġnot Ġat Ġthe Ġend Ġand Ġthen Ġadds Ġone Ġat Ġthe Ġend Ġif Ġits Ġneeded . Ċĉ Ġ*/ Ċ ĉ private Ġfun Ġadd Empty ProgressBar () Ġ{ Ċĉ ĉ var Ġwhere IsEmpty Ġ= Ġ- 1 Ċĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ Ċĉĉ ĉ if Ġ( retrieve Child ( i ) Ġ!= Ġnull Ġ&& Ġretrieve Child ( i ) Ġ== Ġempty ProgressBar ) Ġ{ Ċĉĉĉ ĉ where IsEmpty Ġ= Ġi Ċĉĉ ĉ } Ċĉ ĉ } ĊĉĉĊĉ ĉ if Ġ( where IsEmpty Ġ!= Ġchild Count Ġ- Ġ 1 ) Ġ{ Ċĉĉ ĉ if Ġ( where IsEmpty Ġ!= Ġ- 1 ) Ġ{ Ċĉĉĉ ĉ // the Ġflow ing Ġtrue / false Ġis Ġto Ġstop Ġempty Ġprogress bar Ġbeing Ġadded Ġmore Ġthan Ġonce Ġas Ġremove View Ġand Ġadd View Ġindirect ly Ġcall Ġthis Ġmethod Ċĉĉĉ ĉ isEmpty Being Added Ġ= Ġtrue Ċĉĉĉ ĉ remove View ( empty ProgressBar ) Ċĉĉĉ ĉ isEmpty Being Added Ġ= Ġfalse Ċĉĉ ĉ } Ċĉĉ ĉ if Ġ(! isEmpty Being Added ) Ġ{ Ċĉĉĉ ĉ addView ( empty ProgressBar ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġupdate Bootstrap Group () Ġ{ Ċĉ ĉ if Ġ( child Count Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĉĉĊĉ ĉ cumulative Progress Ġ= ĠgetC umulative Progress () ĊĉĉĊĉ ĉ val Ġnum Children Ġ= Ġchild Count Ċĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġnum Children ) Ġ{ Ċĉĉ ĉ val Ġlayout Params Ġ= Ġdef ult layout Params Ċĉĉ ĉ layout Params . weight Ġ= Ġretrieve Child ( i ). progress . toFloat () Ċĉĉ ĉ retrieve Child ( i ). layout Params Ġ= Ġlayout Params ĊĉĉĉĊĉĉ ĉ retrieve Child ( i ). max Progress Ġ= Ġretrieve Child ( i ). progress Ċĉĉ ĉ retrieve Child ( i ). stri pped Size Ġ= Ġsize Ordinal . toFloat () ĊĉĉĉĊĉĉ ĉ retrieve Child ( i ). is Rounded Ġ= Ġrounded Ċĉĉ ĉ retrieve Child ( i ). set Corner Round ing ( false , Ġfalse ) Ċĉ ĉ } Ċĉ ĉ // this Ġmeans Ġthat Ġrounded Ġcorners Ġwill Ġdisplay Ġcorrectly Ġby Ġtelling Ġonly Ġthe Ġfirst Ġchild Ġto Ġdraw Ġthe Ġleft Ġedge Ġas Ġrounded Ġand Ġonly Ġthe Ġlast Ġto Ġdraw Ġright Ġedge Ġas Ġrounded Ċĉ ĉ retrieve Child ( 0 ). set Corner Round ing ( true , Ġfalse ) Ċĉ ĉ retrieve Child ( num Children Ġ- Ġ 1 ). set Corner Round ing ( false , Ġtrue ) ĊĉĉĊĉ ĉ // update Ġempty Ġprogress bar Ġattributes Ċĉ ĉ val Ġlayout Params Ġ= Ġdef ult layout Params Ċĉ ĉ layout Params . weight Ġ= Ġmax Progress . toFloat () Ġ- Ġcumulative Progress Ċĉ ĉ empty ProgressBar . layout Params Ġ= Ġlayout Params Ċĉ ĉ empty ProgressBar . max Progress Ġ= Ġmax Progress Ġ- Ġcumulative Progress Ċĉ ĉ empty ProgressBar . stri pped Size Ġ= Ġsize Ordinal . toFloat () ĊĉĉĊĉ ĉ weight Sum Ġ= Ġmax Progress . toFloat () Ċ ĉ } ĊĉĊ ĉ /** Ċĉ Ġ* ĠThis Ġget Ġthe Ġtotal Ġprogress Ġof Ġall Ġthe Ġchildren Ċĉ Ġ* Ġ@ return Ġthe ĠC umulative Progress Ġi . e . Ġthe Ġtotal Ġprogress Ġof Ġall Ġchildren Ċĉ Ġ*/ Ċ ĉ fun ĠgetC umulative Progress (): ĠInt Ġ{ Ċĉ ĉ val Ġnum Children Ġ= Ġchild Count Ċĉ ĉ var Ġtotal Ġ= Ġ 0 Ċĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġnum Children ) Ġ{ Ċĉĉ ĉ total Ġ+= Ġget Child Progress ( i ) Ċĉ ĉ } Ċĉ ĉ check C umulative Small er Than Max ( max Progress , Ġtotal ) Ċĉ ĉ return Ġtotal Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġcheck C umulative Small er Than Max ( max : ĠInt , Ġcumulative : ĠInt ) Ġ{ Ċĉ ĉ val Ġbuilder Ġ= ĠStringBuilder () Ċĉ ĉ builder . append (" Max ĠProgress ĠC ant Ġbe Ġsmaller Ġthan Ġcumulative Ġprogress . ĠMax Ġ= Ġ") Ċĉ ĉ builder . append ( max ) Ċĉ ĉ builder . append (", Ġc uml ative Ġ= Ġ") Ċĉ ĉ builder . append ( cumulative ) Ċĉ ĉ builder . append (". Ġ\ n ") Ċĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ Ċĉĉ ĉ builder . append (" Child Ġ"). append ( i ). append (" Ġhas Ġprogress Ġ"). append ( getChild Progress ( i )) Ċĉ ĉ } Ċĉ ĉ if Ġ( max Ġ< Ġcumulative ) Ġ{ Ċĉĉ ĉ throw ĠIllegalStateException ( builder . toString ()) ĊĉĉĉĊĉ ĉ } ĊĉĉĊ ĉ } ĊĉĊ ĉ private Ġfun Ġget Child Progress ( i : ĠInt ): ĠInt Ġ{ Ċĉ ĉ return Ġretrieve Child ( i ). progress Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġretrieve Child ( i : ĠInt ): ĠStri pped ProgressBar Ġ{ Ċĉ ĉ val Ġview Ġ= Ġget Child At ( i ) ĊĉĉĊĉ ĉ return Ġview Ġas ? ĠStri pped ProgressBar Ċĉĉ ĉ ?: Ġthrow ĠIllegalStateException (" All Ġchild Ġview Ġof ĠBootstrap ProgressBar Group Ġmust Ġbe ĠBootstrap ProgressBar ") Ċ ĉ } ĊĉĊ ĉ /** Ċĉ Ġ* Ġthis Ġshould Ġbe Ġcalled Ġby Ġall Ġchildren Ġto Ġnotify Ġthe ĠBootstrap ProgressBar Group Ġthat Ġthere Ġprogress Ġhas Ġchanged Ċĉ Ġ* Ġ@ param Ġbootstrap ProgressBar Ġthe Ġchild ĠView Ċĉ Ġ*/ Ċ ĉ fun Ġon Progress Changed ( bootstrap ProgressBar : ĠStri pped ProgressBar ) Ġ{ Ċĉ ĉ update Bootstrap Group () Ċ ĉ } Ċ } Ċ