/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠBr ack ey s ĠIDE Ġcontributors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . br ack ey s . ui . edit ork it . widget Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . res . get Drawable OrThrow Ċ import Ġcom . br ack ey s . ui . edit ork it . R Ċ import Ġcom . br ack ey s . ui . edit ork it . internal . Scroll able EditText Ċ Ċ class ĠText Scroller Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ), ĠScroll able EditText . On Scroll Changed Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ HIDDEN Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ VISIBLE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ DR AG GING Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATE _ EXIT ING Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ EXIT ING Ġ= Ġ 2 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġstate Ġ= ĠSTATE _ HIDDEN ĊĠĠĠĠĠĠĠ Ġset ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ HIDDEN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . remove Callbacks ( hide Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠSTATE _ HIDDEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ VISIBLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Show Scroller Just ified ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . remove Callbacks ( hide Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠSTATE _ VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ DR AG GING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . remove Callbacks ( hide Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠSTATE _ DR AG GING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTATE _ EXIT ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . remove Callbacks ( hide Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠSTATE _ EXIT ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġscroll able EditText : ĠScroll able EditText ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġnormal Bitmap Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( width , Ġthumb Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġdragging Bitmap Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( width , Ġthumb Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġthumb Height : ĠInt ĊĠĠĠ Ġprivate Ġval Ġthumb Normal : ĠDrawable ĊĠĠĠ Ġprivate Ġval Ġthumb Dragging : ĠDrawable ĊĊĠĠĠ Ġprivate Ġval Ġhide Handler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġval Ġhide Callback Ġ= ĠRunnable Ġ{ Ġstate Ġ= ĠSTATE _ EXIT ING Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġthumb Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġthumb Top Ġ= Ġ 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġtext Scroll Max Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtext Scroll Y Ġ= Ġ 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Text Scroller , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Thumb Normal Ġ= Ġtyped Array . hasValue ( R . style able . Text Scroller _ thumb Normal ) ĊĠĠĠĠĠĠĠ Ġval Ġhas Thumb Dragging Ġ= Ġtyped Array . hasValue ( R . style able . Text Scroller _ thumb Dragging ) ĊĠĠĠĠĠĠĠ Ġval Ġhas Thumb Tint Ġ= Ġtyped Array . hasValue ( R . style able . Text Scroller _ thumb Tint ) ĊĊĠĠĠĠĠĠĠ Ġthumb Normal Ġ= Ġif Ġ( has Thumb Normal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Drawable OrThrow ( R . style able . Text Scroller _ thumb Normal ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠContext Compat . get Drawable ( context , ĠR . drawable . fast scroll _ default ) !! ĊĊĠĠĠĠĠĠĠ Ġthumb Dragging Ġ= Ġif Ġ( has Thumb Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Drawable OrThrow ( R . style able . Text Scroller _ thumb Dragging ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠContext Compat . get Drawable ( context , ĠR . drawable . fast scroll _ pressed ) !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Thumb Tint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumb Tint Ġ= Ġtyped Array . getColor ( R . style able . Text Scroller _ thumb Tint , ĠColor . BLUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Normal . set Tint ( thumb Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Dragging . set Tint ( thumb Tint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthumb Height Ġ= Ġthumb Normal . intrinsic Height ĊĊĠĠĠĠĠĠĠ Ġthumb Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthumb Paint . is D ither Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthumb Paint . alpha Ġ= Ġ 2 2 5 ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Normal . bounds Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġthumb Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Normal . draw ( Canvas ( normal Bitmap )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Dragging . bounds Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġthumb Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Dragging . draw ( Canvas ( drag ging Bitmap )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠSTATE _ HIDDEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠSTATE _ VISIBLE Ġ|| Ġstate Ġ== ĠSTATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Paint . alpha Ġ= Ġ 2 2 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠSTATE _ VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( normal Bitmap , Ġ 0 f , Ġthumb Top , Ġthumb Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( drag ging Bitmap , Ġ 0 f , Ġthumb Top , Ġthumb Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( state Ġ== ĠSTATE _ EXIT ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thumb Paint . alpha Ġ> Ġ 2 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Paint . alpha Ġ= Ġthumb Paint . alpha Ġ- Ġ 2 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( normal Bitmap , Ġ 0 f , Ġthumb Top , Ġthumb Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( hide Callback , Ġ 1 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Paint . alpha Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ HIDDEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll able EditText Ġ== Ġnull Ġ|| Ġstate Ġ== ĠSTATE _ HIDDEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Measure ments () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Point In Thumb ( event . x , Ġevent . y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able EditText ?. abort Fl ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ DR AG GING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . post Delayed ( hide Callback , ĠTIME _ EXIT ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠSTATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able EditText ?. abort Fl ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Thumb Top Ġ= Ġevent . y . toInt () Ġ- Ġthumb Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Thumb Top Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Thumb Top Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( thumb Height Ġ+ Ġnew Thumb Top Ġ> Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Thumb Top Ġ= Ġheight Ġ- Ġthumb Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Top Ġ= Ġnew Thumb Top . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll Changed ( x : ĠInt , Ġy : ĠInt , Ġold X : ĠInt , Ġold Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠSTATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Measure ments () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Handler . post Delayed ( hide Callback , ĠTIME _ EXIT ING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlink ( scroll able EditText : ĠScroll able EditText ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . scroll able EditText Ġ= Ġscroll able EditText ĊĠĠĠĠĠĠĠ Ġthis . scroll able EditText ?. add On Scroll Changed Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscroll View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll able EditText Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll To As Fraction Ġ= Ġthumb Top Ġ/ Ġ( height Ġ- Ġthumb Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Height Ġ= Ġscroll able EditText !!. line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Area Height Ġ= Ġscroll able EditText !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able EditText ?. scrollTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able EditText !!. scroll X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( text Scroll Max Ġ* Ġscroll To As Fraction ) Ġ- Ġ( scrollTo As Fraction Ġ* Ġ( textArea Height Ġ- Ġline Height ))). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Measure ments () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll able EditText ?. layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Scroll Max Ġ= Ġscroll able EditText !!. layout . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Scroll Y Ġ= Ġscroll able EditText !!. scroll Y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Top Ġ= Ġget Thumb Top () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Thumb Top (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll able EditText Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Height Ġ= Ġscroll able EditText !!. line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Area Height Ġ= Ġscroll able EditText !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalculated Thumb Top Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Ġ- Ġthumb Height ) Ġ* Ġ( text Scroll Y Ġ/ Ġ( text Scroll Max Ġ- Ġtext Area Height Ġ+ Ġline Height )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabsolute Thumb Top Ġ= Ġif Ġ(! calculated Thumb Top . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculated Thumb Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( absolute Thumb Top Ġ> Ġheight Ġ- Ġthumb Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Ġ- Ġthumb Height ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġabsolute Thumb Top ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Point In Thumb ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ>= Ġ 0 f Ġ&& Ġx Ġ<= Ġwidth Ġ&& Ġy Ġ>= Ġthumb Top Ġ&& Ġy Ġ<= Ġthumb Top Ġ+ Ġthumb Height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Show Scroller Just ified (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Scroll Max Ġ/ Ġscroll able EditText !!. height Ġ>= Ġ 1 . 5 ĊĠĠĠ Ġ} Ċ }