package Ġcom . kh ob en . aut ot itle . ui . recyclerview . overlay s Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . Context Compat Ċ Ċ class ĠText Selection Handle View Ġ: ĠView Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġhot spot X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġm Move Offset X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Move Offset Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Move Listener : ĠMove Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġdrawable : ĠDrawable ?, Ġhot spot X : ĠInt ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġthis . hot spot X Ġ= Ġhot spot X ĊĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġdrawable : ĠDrawable ?, Ġright Handle : ĠBoolean ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġdrawable !!. intrinsic Width ĊĠĠĠĠĠĠĠ Ġhot spot X Ġ= Ġif Ġ( right Handle ) Ġwidth Ġ/ Ġ 4 Ġelse Ġwidth Ġ* Ġ 3 Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġright Handle : ĠBoolean ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġget Drawable ( context , Ġright Handle ), ĊĠĠĠĠĠĠĠ Ġright Handle ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġset On Move Listener ( listener : ĠMove Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Move Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Drawable !!. intrinsic Width , Ġm Drawable !!. intrinsic Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġm Drawable !!. setBounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Drawable !!. draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Move Offset X Ġ= Ġhot spot X Ġ- Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Move Offset Y Ġ= Ġ- event . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Move Listener Ġ!= Ġnull ) Ġm Move Listener !!. on Move Started () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Move Listener Ġ!= Ġnull ) Ġm Move Listener !!. on Moved ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . raw X Ġ+ Ġm Move Offset X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . raw Y Ġ+ Ġm Move Offset Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Move Listener Ġ!= Ġnull ) Ġm Move Listener !!. on Move Finished () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMove Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Move Started () ĊĠĠĠĠĠĠĠ Ġfun Ġon Move Finished () ĊĠĠĠĠĠĠĠ Ġfun Ġon Moved ( x : ĠFloat , Ġy : ĠFloat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Drawable ( context : ĠContext , Ġright Handle : ĠBoolean ): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Handle ) Ġandroid . R . attr . text Select Handle Right Ġelse Ġandroid . R . attr . text Select Handle Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . get Drawable ( context , Ġtyped Value . resourceId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }