package Ġcom . de lic loud . app . de i ui . display Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġcom . de lic loud . app . de i ui . R Ċ import Ġcom . de lic loud . app . de i ui . utils . Screen Util Ċ import Ġcom . maker amen . rounded image view . Rounded ImageView Ċ Ċ /** Ċ Ġ*@ author ĠMr . m Ċ Ġ*@ date Ġ 2 0 1 9 / 1 1 / 2 7 Ċ Ġ**/ Ċ class ĠDe i Ui Notify View Ġ: ĠLinearLayout Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Notify Type Ġ= ĠNotify Type . NUMBER ĊĠĠĠ Ġvar Ġm Notify Max Ġ= Ġ 9 9 ĊĠĠĠ Ġprivate Ġvar Ġm Point Radius Ġ= ĠScreen Util . dip 2 px ( 5 f ) ĊĠĠĠ Ġprivate Ġvar Ġm Notify Value Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Notify Tv : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Notify Iv : ĠRo unded ImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Root View : ĠView ĊĠĠĠ Ġprivate Ġvar Ġm Text Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Text Height Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġm Notify Text Size Ġ= ĠScreen Util . sp 2 px ( 1 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Tv . text Size Ġ= Ġvalue . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= Ġvalue . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġm Notify Color : ĠInt Ġ= ĠColor . RED ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġleft Circle Rect : ĠRect F ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġright Rect F : ĠRect F ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcenter Rect : ĠRect ĊĠĠĠ Ġval Ġm Paint Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattribute Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattribute Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattribute Set , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattribute Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext , Ġattribute Set : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Root View Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . de i ui _ notify _ layout , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġm Notify Tv Ġ= Ġm Root View . findViewById ( R . id . notify _ number ) ĊĠĠĠĠĠĠĠ Ġm Notify Iv Ġ= Ġm Root View . findViewById ( R . id . notify _ point ) ĊĠĠĠĠĠĠĠ Ġattribute Set ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attribute Set , ĠR . style able . De i Ui Notify View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type Array . getInt ( R . style able . De i Ui Notify View _ notify _ type , Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġm Notify Type Ġ= ĠNotify Type . POINT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġm Notify Type Ġ= ĠNotify Type . NUMBER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Max Ġ= Ġtype Array . getInt ( R . style able . De i Ui Notify View _ notify _ max , Ġ 9 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Value Ġ= Ġtype Array . getInt ( R . style able . De i Ui Notify View _ notify _ value , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Color Ġ= Ġtype Array . getColor ( R . style able . De i Ui Notify View _ notify _ color , ĠColor . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Text Size Ġ= ĠScreen Util . px 2 sp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Array . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . De i Ui Notify View _ notify _ text _ size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScreen Util . sp 2 px ( 1 1 f ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Array . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġm Notify Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġm Notify Tv . text Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġrefresh Notify Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtake If Ġ{ Ġm Notify Type Ġ== ĠNotify Type . NUMBER Ġ} ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Notify Value Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Height Ġ/ Ġ 2 Ġ+ ĠScreen Util . dip 2 px ( 4 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Rects () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Arc ( left Circle Rect , Ġ 9 0 f , Ġ 1 8 0 f , Ġfalse , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Rect ( center Rect , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Arc ( right Rect F , Ġ- 9 0 f , Ġ 1 8 0 f , Ġfalse , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Point Radius ( radius : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Point Radius Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġrefresh Notify Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Rects () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġm Text Height Ġ/ Ġ 2 Ġ+ ĠScreen Util . dip 2 px ( 3 f ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġmeasured Width Ġ/ Ġ 2 f Ġ- Ġm Text Width Ġ/ Ġ 2 Ġ- Ġradius ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġmeasured Height Ġ/ Ġ 2 f Ġ- Ġradius ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġleft Ġ+ Ġ 2 Ġ* Ġradius ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġtop Ġ+ Ġ 2 Ġ* Ġradius ĊĠĠĠĠĠĠĠ Ġleft Circle Rect Ġ= ĠRect F ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġval Ġrect Right Ġ= Ġmeasured Width Ġ/ Ġ 2 f Ġ+ Ġm Text Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġcenter Rect Ġ= ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( left Ġ+ Ġradius ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect Right . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( top Ġ+ Ġ 2 Ġ* Ġradius Ġ+ Ġ 1 ). toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġright Rect F Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect Right Ġ- Ġradius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect Right Ġ+ Ġradius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Not ift Type ( type : ĠNotify Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Notify Type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġrefresh Notify Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Notify Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify Type Ġ== ĠNotify Type . POINT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Iv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Tv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġm Notify Iv . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . width Ġ= Ġm Point Radius Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height Ġ= Ġm Point Radius Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Iv . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Iv . setImage Drawable ( Color Drawable ( m Notify Color )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Iv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Notify Value ( m Notify Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Notify Value ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Notify Value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify Type Ġ== ĠNotify Type . NUMBER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Notify Value Ġ< Ġm Notify Max ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Tv . text Ġ= Ġ"$ m Notify Value " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Value Ġ= Ġm Notify Max ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Tv . text Ġ= Ġ"${ m Notify Value } +" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Width Ġ= Ġm Paint . measure Text ( m Notify Tv . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Text Height Ġ= ĠgetText Height () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetText Height (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfont Metrics Ġ= Ġm Paint . font Metrics ĊĠĠĠĠĠĠĠ Ġreturn Ġfont Metrics . desc ent Ġ- Ġfont Metrics . as cent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss Notify () Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Notify () Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠNotify Type Ġ{ ĊĠĠĠĠĠĠĠ ĠPOINT , ĠNUMBER ĊĠĠĠ Ġ} Ċ }