package Ġcom . h dd . seek bar Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . core . content . Context Compat Ċ Ċ /** Ċ Ġ* ĠCreate Ġon Ġ 2 / 4 / 2 1 Ċ Ġ* Ġ@ author Ġdu ong hd Ċ Ġ*/ Ċ Ċ class ĠD Seek Bar Ġ: ĠFrame Layout , ĠD Seek Function Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġd Progress Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Progress Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Progress Loaded Color Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġd Thumb Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Thumb Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Thumb Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Thumb Text Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Thumb TextColor Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġd Thumb Top Margin Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġd Show Top Thumb Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġseek Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġseek Height Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġd Seek Listener : ĠD Seek Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit D Seek Bar ( context Ġ= Ġcontext , Ġattrs Ġ= Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit D Seek Bar ( context Ġ= Ġcontext , Ġattrs Ġ= Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit D Seek Bar ( context Ġ= Ġcontext , Ġattrs Ġ= Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit D Seek Bar ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . D Seek Bar , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġd Progress Height Ġ= Ġtyped Array . get Dimension ( R . style able . D Seek Bar _ d Progress Height , Ġcontext . resources . get Dimension ( R . dim en . d Progress Height )). toInt () ĊĠĠĠĠĠĠĠ Ġd Thumb Height Ġ= Ġtyped Array . get Dimension ( R . style able . D Seek Bar _ d Thumb Height , Ġcontext . resources . get Dimension ( R . dim en . d Thumb Height )). toInt () ĊĠĠĠĠĠĠĠ Ġd Thumb Width Ġ= Ġtyped Array . get Dimension ( R . style able . D Seek Bar _ d Thumb Width , Ġcontext . resources . get Dimension ( R . dim en . d Thumb Width )). toInt () ĊĠĠĠĠĠĠĠ Ġd Thumb Text Size Ġ= Ġtyped Array . get Dimension ( R . style able . D Seek Bar _ d Thumb Text Size , Ġcontext . resources . get Dimension ( R . dim en . d Thumb Text Size )). toInt () ĊĠĠĠĠĠĠĠ Ġd Thumb Top Margin Ġ= Ġtyped Array . get Dimension ( R . style able . D Seek Bar _ d Thumb Top Margin , Ġcontext . resources . get Dimension ( R . dim en . d Thumb Top Margin )). toInt () ĊĊĠĠĠĠĠĠĠ Ġd Progress Color Ġ= Ġtyped Array . getColor ( R . style able . D Seek Bar _ d Progress Color , ĠContext Compat . getColor ( context , ĠR . color . bg _ progress )) ĊĠĠĠĠĠĠĠ Ġd Progress Loaded Color Ġ= Ġtyped Array . getColor ( R . style able . D Seek Bar _ d Progress Loaded Color , ĠContext Compat . getColor ( context , ĠR . color . bg _ progress _ loaded )) ĊĠĠĠĠĠĠĠ Ġd Thumb Color Ġ= Ġtyped Array . getColor ( R . style able . D Seek Bar _ d Thumb Color , ĠContext Compat . getColor ( context , ĠR . color . bg _ thumbnail )) ĊĠĠĠĠĠĠĠ Ġd Thumb TextColor Ġ= Ġtyped Array . getColor ( R . style able . D Seek Bar _ d Thumb TextColor , ĠContext Compat . getColor ( context , ĠR . color . text _ thumb _ color )) ĊĊĠĠĠĠĠĠĠ Ġd Show Top Thumb Ġ= Ġtyped Array . getBoolean ( R . style able . D Seek Bar _ d Show Top Thumb , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġrender View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Loaded Progress : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv Touch View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Thumb : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Top Thumb : ĠTextView ĊĠĠĠ Ġprivate Ġval Ġscale Top Thumb Ġ= Ġ 1 . 5 f ĊĊĠĠĠ Ġprivate Ġfun Ġrender View () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove All Views () ĊĊĠĠĠĠĠĠĠ Ġval Ġll Root Ġ= ĠLinearLayout ( context ) ĊĠĠĠĠĠĠĠ Ġll Root . layout Params Ġ= ĠLayout Params ( LayoutParams . MATCH _ PARENT , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġll Root . orientation Ġ= ĠLinearLayout . VERTICAL ĊĊĠĠĠĠĠĠĠ Ġtv Top Thumb Ġ= ĠTextView ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Top Thumb Layout Param Ġ= ĠLinearLayout . LayoutParams (( d Thumb Width Ġ* Ġscale Top Thumb ). toInt (), Ġ( d Thumb Height Ġ* Ġscale Top Thumb ). toInt ()) ĊĠĠĠĠĠĠĠ Ġtv Top Thumb Layout Param . set Margins ( 0 , Ġ 0 , Ġ 0 , Ġd Thumb Top Margin ) ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . layout Params Ġ= Ġtv Top Thumb Layout Param ĊĠĠĠĠĠĠĠ ĠLib Utils . replace BackgroundColor ( context Ġ= Ġcontext , Ġview Ġ= Ġtv Top Thumb , Ġcolor Ġ= Ġd Thumb Color ) ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . setTextColor ( d Thumb TextColor ) ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . setText Size ( Typed Value . COMPLEX _ UNIT _ DIP , ĠLib Utils . px To Dp ( context , Ġd Thumb Text Size ) Ġ* Ġscale Top Thumb ) ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . visibility Ġ= Ġif Ġ( d Show Top Thumb ) ĠVIS IBLE Ġelse ĠG ONE ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġadd ĠTop Thumb Ġto ĠLinear Ġroot View Ġ--> ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġll Root . addView ( tv Top Thumb ) ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< -------------------------------- -- ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġconstraint Progress ID Ġ= Ġ 1 0 0 1 ĊĠĠĠĠĠĠĠ Ġval Ġll Progress ID Ġ= Ġ 1 0 0 2 ĊĠĠĠĠĠĠĠ Ġval Ġtv Thumb ID Ġ= Ġ 1 0 0 3 ĊĠĠĠĠĠĠĠ Ġval Ġv Touch View ID Ġ= Ġ 1 0 0 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġconstraint Progress Ġ= ĠConstraint Layout ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġfl Progress Layout Param Ġ= ĠLinearLayout . LayoutParams ( LayoutParams . MATCH _ PARENT , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġconstraint Progress . layout Params Ġ= Ġfl Progress Layout Param ĊĠĠĠĠĠĠĠ Ġconstraint Progress . id Ġ= Ġconstraint Progress ID ĊĊĠĠĠĠĠĠĠ Ġval Ġll Progress Ġ= ĠLinearLayout ( context ) ĊĠĠĠĠĠĠĠ Ġll Progress . layout Params Ġ= ĠConstraint Layout . LayoutParams ( LayoutParams . MATCH _ PARENT , Ġd Progress Height ) ĊĠĠĠĠĠĠĠ Ġll Progress . orientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġll Progress . id Ġ= Ġll Progress ID ĊĊĠĠĠĠĠĠĠ Ġv Loaded Progress Ġ= ĠView ( context ) ĊĠĠĠĠĠĠĠ Ġv Loaded Progress . layout Params Ġ= ĠLinearLayout . LayoutParams ( d Thumb Width Ġ/ Ġ 2 , ĠLayout Params . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ ĠLib Utils . replace BackgroundColor ( context Ġ= Ġcontext , Ġview Ġ= Ġv Loaded Progress , Ġcolor Ġ= Ġd Progress Loaded Color ) ĊĠĠĠĠĠĠĠ Ġll Progress . addView ( v Loaded Progress ) ĊĊĠĠĠĠĠĠĠ Ġval Ġv Progress Ġ= ĠView ( context ) ĊĠĠĠĠĠĠĠ Ġv Progress . layout Params Ġ= ĠLinearLayout . LayoutParams ( 0 , ĠLayout Params . MATCH _ PARENT , Ġ 1 f ) ĊĠĠĠĠĠĠĠ ĠLib Utils . replace BackgroundColor ( context Ġ= Ġcontext , Ġview Ġ= Ġv Progress , Ġcolor Ġ= Ġd Progress Color ) ĊĠĠĠĠĠĠĠ Ġll Progress . addView ( v Progress ) ĊĊĠĠĠĠĠĠĠ Ġconstraint Progress . addView ( ll Progress ) ĊĊĠĠĠĠĠĠĠ Ġtv Thumb Ġ= ĠTextView ( context ) ĊĠĠĠĠĠĠĠ Ġtv Thumb . layout Params Ġ= ĠConstraint Layout . LayoutParams ( d Thumb Width , Ġd Thumb Height ) ĊĠĠĠĠĠĠĠ ĠLib Utils . replace BackgroundColor ( context Ġ= Ġcontext , Ġview Ġ= Ġtv Thumb , Ġcolor Ġ= Ġd Thumb Color ) ĊĠĠĠĠĠĠĠ Ġtv Thumb . setTextColor ( d Thumb TextColor ) ĊĠĠĠĠĠĠĠ Ġtv Thumb . setText Size ( Typed Value . COMPLEX _ UNIT _ DIP , ĠLib Utils . px To Dp ( context Ġ= Ġcontext , Ġpx Ġ= Ġd Thumb Text Size )) ĊĠĠĠĠĠĠĠ Ġtv Thumb . id Ġ= Ġtv Thumb ID ĊĠĠĠĠĠĠĠ Ġtv Thumb . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġconstraint Progress . addView ( tv Thumb ) ĊĊĠĠĠĠĠĠĠ Ġv Touch View Ġ= ĠView ( context ) ĊĠĠĠĠĠĠĠ Ġv Touch View . layout Params Ġ= ĠConstraint Layout . LayoutParams ( LayoutParams . MATCH _ PARENT , Ġd Thumb Height ) ĊĠĠĠĠĠĠĠ Ġv Touch View . id Ġ= Ġv Touch View ID ĊĠĠĠĠĠĠĠ Ġconstraint Progress . addView ( v Touch View ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠ Ġconstraint Set . clone ( constraint Progress ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( ll Progress ID , ĠConstraint Set . BOTTOM , Ġll Progress ID , ĠConstraint Set . BOTTOM , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( ll Progress ID , ĠConstraint Set . TOP , Ġll Progress ID , ĠConstraint Set . TOP , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( tv Thumb ID , ĠConstraint Set . BOTTOM , Ġll Progress ID , ĠConstraint Set . BOTTOM , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( tv Thumb ID , ĠConstraint Set . TOP , Ġll Progress ID , ĠConstraint Set . TOP , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( v Touch View ID , ĠConstraint Set . BOTTOM , Ġll Progress ID , ĠConstraint Set . BOTTOM , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( v Touch View ID , ĠConstraint Set . TOP , Ġll Progress ID , ĠConstraint Set . TOP , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( constraint Progress ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġadd ĠFl Progress Ġto ĠLinear Ġroot View Ġ--> ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġll Root . addView ( constraint Progress ) ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< -------------------------------- ---- ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġthis . addView ( ll Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis First Measure Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġtotal Duration Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġduration Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġx Percent Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġis Focus Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Width Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġseek Height Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Measure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis First Measure Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Touch View ( v Touch View Ġ= Ġv Touch View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġhandler Touch View ( v Touch View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Touch View . setOn Touch Listener Ġ{ Ġ_, Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġmotion Event . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ< Ġd Thumb Width Ġ/ Ġ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ> Ġseek Width Ġ- Ġd Thumb Width Ġ/ Ġ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Width Ġ- Ġd Thumb Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ- Ġd Thumb Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus Ġ= Ġmotion Event . action Ġ!= ĠMotion Event . ACTION _ UP ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( motion Event . action ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġincorrect !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ== Ġ 0 L Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġ 0 !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Top Thumb . animate (). alpha ( 1 f ). duration Ġ= Ġ 1 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Percent Ġ= Ġ 1 f Ġ* Ġx Ġ/ Ġ( seek Width Ġ- Ġd Thumb Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( x Percent Ġ* Ġtotal Duration ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onChange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ= Ġtotal Duration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġx Percent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtv Thumb . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus Ġ= Ġis Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Thumb X ( x Ġ= Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġincorrect !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ== Ġ 0 L Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġ 0 !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Percent Ġ= Ġ 1 f Ġ* Ġx Ġ/ Ġ( seek Width Ġ- Ġd Thumb Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( x Percent Ġ* Ġtotal Duration ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onChange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ= Ġtotal Duration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġx Percent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtv Thumb . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus Ġ= Ġis Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Thumb X ( x Ġ= Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġincorrect !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ== Ġ 0 L Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġ 0 !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Percent Ġ= Ġ 1 f Ġ* Ġx Ġ/ Ġ( seek Width Ġ- Ġd Thumb Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( x Percent Ġ* Ġtotal Duration ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Top Thumb . animate (). alpha ( 0 f ). duration Ġ= Ġ 1 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onChange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ= Ġtotal Duration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġx Percent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtv Thumb . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus Ġ= Ġis Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Thumb X ( x Ġ= Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event . action Ġ!= ĠMotion Event . ACTION _ UP ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ< Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġincorrect !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration Ġ== Ġ 0 L Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Seek Listener ?. onError (" Total Ġduration Ġis Ġ 0 !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ> Ġtotal Duration Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Percent Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġtotal Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Thumb X (( x Percent Ġ* Ġ( seek Width Ġ- Ġd Thumb Width )). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Percent Ġ= Ġ 1 f Ġ* Ġduration Ġ/ Ġtotal Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Thumb X (( x Percent Ġ* Ġ( seek Width Ġ- Ġd Thumb Width )). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Thumb X ( x : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġv Loaded Progress . layout Params ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġx Ġ+ Ġd Thumb Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġv Loaded Progress . layout Params Ġ= Ġlayout Params ĊĊĠĠĠĠĠĠĠ Ġval Ġtop X : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġterm X Ġ= Ġ(( d Thumb Width Ġ* Ġscale Top Thumb ). toInt () Ġ- Ġd Thumb Width ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġtop X Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ< Ġterm X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ> Ġseek Width Ġ- Ġtv Top Thumb . width Ġ+ Ġterm X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Width Ġ- Ġtv Top Thumb . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ- Ġterm X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"${ Lib Utils . getTime ( duration Ġ= Ġduration )} Ġ/ Ġ${ Lib Utils . getTime ( duration Ġ= Ġtotal Duration )}" ĊĠĠĠĠĠĠĠ Ġtv Thumb . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . text Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ Ġtv Thumb . translation X Ġ= Ġx . toFloat () ĊĠĠĠĠĠĠĠ Ġtv Top Thumb . translation X Ġ= Ġtop X . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Total Duration ( total Duration : ĠLong ): ĠD Seek Bar Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . total Duration Ġ= Ġtotal Duration ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Duration ( duration : ĠLong ): ĠD Seek Bar Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġif Ġ(! is First Measure Ġ&& Ġ! is Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset D Seek Listener ( d Seek Listener : ĠD Seek Listener ): ĠD Seek Bar Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . d Seek Listener Ġ= Ġd Seek Listener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetTotal Duration (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal Duration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Duration (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduration ĊĠĠĠ Ġ} Ċ }