package Ġcom . p avel s ik un . seek bar preference Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġcom . p avel s ik un . seek bar preference . Preference Controller Delegate . format Value Ċ import Ġcom . rey . material . widget . Slider Ċ Ċ class ĠSeek Bar View Ġ: ĠConstraint Layout , ĠView . OnClickListener , ĠSlider . On Position ChangeListener Ġ{ ĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattribute Set ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattribute Set , Ġdef Style Attr ) ĊĊĠĠĠ Ġval Ġseek Bar : ĠSlider Ġby Ġlazy Ġ{ ĠfindViewById < Slider >( R . id . seek bar ) Ġ} ĊĠĠĠ Ġval Ġvalue View : ĠTextView Ġby Ġlazy Ġ{ ĠfindViewById < TextView >( R . id . seek bar _ value ) Ġ} ĊĠĠĠ Ġval Ġmeasurement View : ĠTextView Ġby Ġlazy Ġ{ ĠfindViewById < TextView >( R . id . measurement _ unit ) Ġ} ĊĠĠĠ Ġval Ġvalue Holder View : ĠLinearLayout Ġby Ġlazy Ġ{ ĠfindViewById < LinearLayout >( R . id . value _ holder ) Ġ} ĊĠĠĠ Ġval Ġbutton Holder View : ĠLinearLayout Ġby Ġlazy Ġ{ ĠfindViewById < LinearLayout >( R . id . button _ holder ) Ġ} ĊĠĠĠ Ġval Ġbottom Line View : ĠFrame Layout Ġby Ġlazy Ġ{ ĠfindViewById < Frame Layout >( R . id . bottom _ line ) Ġ} ĊĠĠĠ Ġval Ġup : ĠImageView Ġby Ġlazy Ġ{ ĠfindViewById < ImageView >( R . id . up ) Ġ} ĊĠĠĠ Ġval Ġdown : ĠImageView Ġby Ġlazy Ġ{ ĠfindViewById < ImageView >( R . id . down ) Ġ} ĊĠĠĠ Ġval Ġreset : ĠImageView Ġby Ġlazy Ġ{ ĠfindViewById < ImageView >( R . id . reset ) Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġdelegate : ĠPreference Controller Delegate ĊĊĠĠĠ Ġvar Ġdialog Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Holder View . is Clickable Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Holder View . isEnabled Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Holder View . setOnClickListener ( if Ġ( value ) Ġthis Ġelse Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Line View . visibility Ġ= Ġif Ġ( value ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠSeek Bar Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Attr Ġ= Ġcontext . theme . obtain Styled Attributes ( Typed Value (). data , Ġint ArrayOf ( R . attr . color Accent )) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġcolor Attr . getColor ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcolor Attr . recycle () ĊĊĠĠĠĠĠĠĠ Ġseek Bar . set Primary Color ( color ) ĊĠĠĠĠĠĠĠ Ġseek Bar . set Secondary Color ( Color Utils . set Alpha Component ( color , Ġ 0 x 3 3 )) ĊĊĠĠĠĠĠĠĠ Ġup . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġdown . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġreset . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġvalue Holder View . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . id Ġ== ĠR . id . value _ holder Ġ-> ĠCustom Value Dialog ( context , Ġdelegate . min Value , Ġdelegate . max Value , Ġdelegate . current Value , Ġdelegate . scale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Persist Value Listener Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . current Value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . id Ġ== ĠR . id . up Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . current Value Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . id Ġ== ĠR . id . down Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . current Value Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . id Ġ== ĠR . id . reset Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Progress Reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Position Changed ( view : ĠSlider ?, Ġfrom User : ĠBoolean , Ġold Pos : ĠFloat , Ġnew Pos : ĠFloat , ĠoldValue : ĠInt , ĠnewValue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. on Progress Changed ( newValue ) ĊĠĠĠĠĠĠĠ Ġvalue View . text Ġ= Ġformat Value (( delegate . current Scaled Value ). toString ()) ĊĊĠĠĠĠĠĠĠ Ġupdate Fill ( newValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġvalue View . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġvalue Holder View . is Clickable Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġvalue Holder View . isEnabled Ġ= Ġenabled ĊĊĠĠĠĠĠĠĠ Ġseek Bar . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġseek Bar . is Clickable Ġ= Ġenabled ĊĊĠĠĠĠĠĠĠ Ġmeasurement View . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġbottom Line View . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġbutton Holder View . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġup . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġdown . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġreset . isEnabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Bind () Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar . setValue Range ( delegate . min Value , Ġdelegate . max Value , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠsetValue ( delegate . current Value . toFloat (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġseek Bar . setOn Position ChangeListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Progress ChangeListener ( listener : ĠSeek Bar Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetValue ( value : ĠFloat , Ġanimate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar . setOn Position ChangeListener ( null ) ĊĠĠĠĠĠĠĠ Ġseek Bar . setValue ( value , true ) ĊĠĠĠĠĠĠĠ Ġseek Bar . setOn Position ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġvalue View . text Ġ= Ġformat Value (( delegate . current Scaled Value ). toString ()) ĊĊĠĠĠĠĠĠĠ Ġupdate Fill ( value . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetValue Range ( min : ĠInt , Ġmax : ĠInt , Ġanimate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar . setValue Range ( min , Ġmax , Ġanimate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Fill ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! seek Bar . is Thumb Stroke Animator Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġdelegate . defaultValue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar . set Thumb Fill Percent ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar . set Thumb Fill Percent ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSeek Bar Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Progress Changed ( newValue : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Progress Reset () ĊĠĠĠ Ġ} Ċ }