/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠDaniel ĠC iao Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 1 8 ĠH az uki Ċ Ġ* Ċ Ġ* Ġ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 Ġjp . h az uki . y uz ub rowser . utils . view . fast scroll Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Inset Drawable Ċ import Ġandroid . graphics . drawable . State List Drawable Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . design . widget . AppBar Layout Ċ import Ġandroid . support . design . widget . Coordinator Layout Ċ import Ġandroid . support . v 4 . view . Gravity Compat Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . animation . Fast Out Linear In Interpolator Ċ import Ġandroid . support . v 4 . view . animation . Linear Out Slow In Interpolator Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġjp . h az uki . y uz ub rowser . R Ċ import Ġjp . h az uki . y uz ub rowser . settings . data . AppData Ċ import Ġjp . h az uki . y uz ub rowser . utils . Theme Utils Ċ import Ġjp . h az uki . y uz ub rowser . utils . extensions . convert Dp To Px Ċ import Ġjp . h az uki . y uz ub rowser . webkit . Custom WebView Ċ import Ġjp . h az uki . y uz ub rowser . webkit . listener . On Scroll Changed Listener Ċ Ċ class ĠWebView Fast Scroller Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 , Ġdef Style Res : ĠInt Ġ= Ġ 0 ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Bar Ġ= ĠView ( context ) ĊĠĠĠ Ġprivate Ġval Ġm Handle Ġ= ĠView ( context ) ĊĠĠĠ Ġprivate Ġvar Ġm Hidden Translation X : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġm Min Scroll Handle Height : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġm On Touch Listener : ĠView . On Touch Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġvar Ġm AppBar Layout Offset : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinternal Ġvar Ġm WebView : ĠCustom WebView ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġm Coordinator Layout : ĠCoord inator Layout ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġm AppBar Layout : ĠApp Bar Layout ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġvar Ġm Animator : ĠAn imator Set ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġm Anim ating In : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ property Ġ Ġhide Delay Ġthe Ġdelay Ġin Ġmillis Ġto Ġhide Ġthe Ġscrollbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġhide Delay : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm H iding Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Handle Normal Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Handle Pressed Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Bar Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Touch Target Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Bar Inset : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Hide Override : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Show Left : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" R tl Hard coded ") ĊĠĠĠĠĠĠĠ Ġset ( show Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . is Show Left Ġ!= Ġshow Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġshow Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Bar Color And Inset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Handle Colors And Inset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Hidden Translation X Ġ*= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout Params Ġas ĠFrame Layout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . gravity Ġ= ĠGr avity . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . gravity Ġ= ĠGr avity . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġis Scroll Enabled Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġhandle Pressed Color : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Color Int ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Handle Pressed Color ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle Pressed Color Ġ= Ġcolor Pressed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Handle Colors And Inset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġhandle Normal Color : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Color Int ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Handle Normal Color ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor Normal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle Normal Color Ġ= Ġcolor Normal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Handle Colors And Inset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ property Ġ Ġscroll Bar Color ĠScroll Ġbar Ġcolor . ĠAlpha Ġwill Ġbe Ġset Ġto Ġ~ 2 2 % Ġto Ġmatch Ġstock Ġscrollbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġscroll Bar Color : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Color Int ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Bar Color ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġscroll Bar Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bar Color Ġ= Ġscroll Bar Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Bar Color And Inset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ property Ġ Ġtouch Target Width ĠIn Ġpixels , Ġless Ġthan Ġor Ġequal Ġto Ġ 4 8 dp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtouch Target Width : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Touch Target Width ĊĠĠĠĠĠĠĠ Ġset ( touch Target Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Touch Target Width Ġ= Ġtouch Target Width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeight Dp Ġ= Ġcontext . convert Dp To Px ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bar Inset Ġ= Ġm Touch Target Width Ġ- Ġeight Dp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfort y E ight Dp Ġ= Ġcontext . convert Dp To Px ( 4 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Touch Target Width Ġ> Ġfort y E ight Dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Touch Ġtarget Ġwidth Ġcannot Ġbe Ġlarger Ġthan Ġ 4 8 dp !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bar . layout Params Ġ= ĠFrame Layout . LayoutParams ( touch Target Width , ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠGr avity Compat . END ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle . layout Params Ġ= ĠFrame Layout . LayoutParams ( touch Target Width , ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠGr avity Compat . END ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Handle Colors And Inset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Bar Color And Inset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ property Ġis H iding Enabled Ġwhether Ġhiding Ġis Ġenabled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis H iding Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm H iding Enabled ĊĠĠĠĠĠĠĠ Ġset ( h iding Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm H iding Enabled Ġ= Ġhiding Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h iding Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Auto Hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġm Hide : ĠRunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Handle . is Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Animator ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Animator Ġ= ĠAn imator Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator 2 Ġ= ĠObject Animator . of Float ( this @ WebView Fast Scroller , ĠView . TRANSL ATION _ X , Ġm Hidden Translation X . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator 2 . interpol ator Ġ= ĠFast Out Linear In Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator 2 . duration Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay ( anim ator 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġscroll Changed Listener : ĠOn Scroll Changed Listener Ġ= Ġ{ Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> Ġshow ( true ) Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . WebView Fast Scroller , Ġdef Style Attr , Ġdef Style Res ) ĊĊĠĠĠĠĠĠĠ Ġm Bar Color Ġ= Ġa . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . WebView Fast Scroller _ fs _ bar Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Utils . getColor From Theme Res ( context , ĠR . attr . color Control Normal )) ĊĊĠĠĠĠĠĠĠ Ġm Handle Normal Color Ġ= Ġa . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . WebView Fast Scroller _ fs _ handle Normal Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Utils . getColor From Theme Res ( context , ĠR . attr . color Control Normal )) ĊĊĠĠĠĠĠĠĠ Ġm Handle Pressed Color Ġ= Ġa . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . WebView Fast Scroller _ fs _ handle Pressed Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Utils . getColor From Theme Res ( context , ĠR . attr . color Accent )) ĊĊĠĠĠĠĠĠĠ Ġm Touch Target Width Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . WebView Fast Scroller _ fs _ touch Target Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . convert Dp To Px ( 2 4 )) ĊĊĠĠĠĠĠĠĠ Ġhide Delay Ġ= Ġa . getInt ( R . style able . WebView Fast Scroller _ fs _ hide Delay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ AUTO _ HIDE _ DELAY ) ĊĊĠĠĠĠĠĠĠ Ġm H iding Enabled Ġ= Ġa . getBoolean ( R . style able . WebView Fast Scroller _ fs _ h iding Enabled , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĊĠĠĠĠĠĠĠ Ġval Ġfort y E ight Dp Ġ= Ġcontext . convert Dp To Px ( 4 8 ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( fort y E ight Dp , ĠViewGroup . LayoutParams . MATCH _ PARENT ) ĊĊĠĠĠĠĠĠĠ Ġadd View ( m Bar ) ĊĠĠĠĠĠĠĠ Ġadd View ( m Handle ) ĊĊĠĠĠĠĠĠĠ Ġtouch Target Width Ġ= Ġm Touch Target Width ĊĊĠĠĠĠĠĠĠ Ġm Min Scroll Handle Height Ġ= Ġfort y E ight Dp ĊĊĠĠĠĠĠĠĠ Ġval Ġeight Dp Ġ= ĠgetContext (). convert Dp To Px ( 8 ) ĊĠĠĠĠĠĠĠ Ġm Hidden Translation X Ġ= Ġ( if Ġ( is Show Left ) Ġ- 1 Ġelse Ġ 1 ) Ġ* Ġeight Dp ĊĊĠĠĠĠĠĠĠ Ġm Handle . setOn Touch Listener ( object Ġ: ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Initial Bar Height : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Last Pressed Y Adjust ed To Initial : ĠFloat Ġ= Ġ 0 . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView , Ġev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠMotion Event . obtain ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġevent . action Mask ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . offset Location ( 0 f , Ġ(- m AppBar Layout Offset ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm On Touch Listener ?. on Touch ( v , Ġevent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle . is Pressed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// m RecyclerView . stop Scroll (); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnested Scroll Axis Ġ= ĠView Compat . SCROLL _ AXIS _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Scroll Axis Ġ= Ġnested Scroll Axis Ġor ĠView Compat . SCROLL _ AXIS _ VERTICAL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WebView !!. web View . start Nested Scroll ( nested Scroll Axis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Bar Height Ġ= Ġm Bar . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Pressed Y Adjust ed To Initial Ġ= Ġevent . y Ġ+ Ġm Handle . y Ġ+ Ġm Bar . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Handle Pressed Y Ġ= Ġevent . y Ġ+ Ġm Handle . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar Height Ġ= Ġm Bar . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Handle Pressed Y Adjust ed To Initial Ġ= Ġnew Handle Pressed Y Ġ+ Ġ( m Initial Bar Height Ġ- Ġbar Height ) Ġ+ Ġm Bar . y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Pressed Y From Last Adjust ed To Initial Ġ= Ġnew Handle Pressed Y Adjust ed To Initial Ġ- Ġm Last Pressed Y Adjust ed To Initial ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Y Ġ= Ġ( delta Pressed Y From Last Adjust ed To Initial Ġ/ Ġm Initial Bar Height Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m WebView !!. compute Vertical Scroll Range Method () Ġ+ Ġif Ġ( m AppBar Layout Ġ== Ġnull ) Ġ 0 Ġelse Ġm AppBar Layout !!. total Scroll Range ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġcompute Delta Scale ( event )). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoord inator Ġ= Ġm Coordinator Layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Bar Ġ= Ġm AppBar Layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! AppData . touch _ scrollbar _ fixed _ toolbar . get () Ġ&& Ġcoord inator Ġ!= Ġnull Ġ&& Ġapp Bar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġapp Bar . layout Params Ġas ĠCoord inator Layout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehavior Ġ= Ġparams . behavior Ġas ĠApp Bar Layout . Behavior ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehavior ?. on Nested Pre Scroll ( coordinator , Ġapp Bar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ WebView Fast Scroller , Ġ 0 , Ġd Y , ĠInt Array ( 2 ), ĠView Compat . TYPE _ TO UCH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Rv Scroll ( d Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Pressed Y Adjust ed To Initial Ġ= Ġnew Handle Pressed Y Adjust ed To Initial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Pressed Y Adjust ed To Initial Ġ= Ġ- 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WebView !!. web View . stop Nested Scroll () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle . is Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Auto Hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġtranslation X Ġ= Ġm Hidden Translation X . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompute Delta Scale ( e : ĠMotion Event ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġm WebView !!. web View . width ĊĠĠĠĠĠĠĠ Ġval Ġscrollbar X Ġ= Ġif Ġ( is Show Left ) Ġx Ġelse Ġx Ġ+ Ġget Width () ĊĠĠĠĠĠĠĠ Ġvar Ġscale Ġ= ĠMath . abs ( width Ġ- Ġscrollbar X Ġ+ Ġm WebView !!. web View . x Ġ- Ġe . raw X ) Ġ/ Ġwidth ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ< Ġ 0 . 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( scale Ġ> Ġ 0 . 9 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġscale ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Handle Colors And Inset () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠState List Drawable () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . add State ( View . PRES SED _ ENABLED _ STATE _ SET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Handle Pressed Color ), Ġm Bar Inset , Ġ 0 , Ġ 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . add State ( View . EMPTY _ STATE _ SET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Handle Normal Color ), Ġm Bar Inset , Ġ 0 , Ġ 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . add State ( View . PRES SED _ ENABLED _ STATE _ SET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Handle Pressed Color ), Ġ 0 , Ġ 0 , Ġm Bar Inset , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . add State ( View . EMPTY _ STATE _ SET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Handle Normal Color ), Ġ 0 , Ġ 0 , Ġm Bar Inset , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Handle . background Ġ= Ġdrawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Bar Color And Inset () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġif Ġ(! is Show Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Bar Color ), Ġm Bar Inset , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Drawable ( Color Drawable ( m Bar Color ), Ġ 0 , Ġ 0 , Ġm Bar Inset , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawable . alpha Ġ= Ġ 2 2 ĊĠĠĠĠĠĠĠ Ġm Bar . background Ġ= Ġdrawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach WebView ( web View : ĠCustom WebView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm WebView Ġ= ĠwebView ĊĠĠĠĠĠĠĠ ĠwebView . set ScrollBar Listener ( scroll Changed Listener ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Scroll Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . web View . is Vertical ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetach WebView () Ġ{ ĊĠĠĠĠĠĠĠ Ġm WebView ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . remove Callbacks ( m Hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ScrollBar Listener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm WebView Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach AppBar Layout ( coordinator Layout : ĠCoord inator Layout , Ġapp Bar Layout : ĠApp Bar Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Coordinator Layout Ġ= Ġcoord inator Layout ĊĠĠĠĠĠĠĠ Ġm AppBar Layout Ġ= Ġapp Bar Layout ĊĊĠĠĠĠĠĠĠ Ġapp Bar Layout . add On Offset Changed Listener Ġ{ Ġ_, Ġvertical Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġlayout Params Ġas ĠViewGroup . Margin LayoutParams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm AppBar Layout Offset Ġ= Ġ- vertical Offset ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset LayoutParams ( layout Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Handle Touch Listener ( listener : ĠView . On Touch Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On Touch Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġthe Ġfast Ġsc roller Ġand Ġhide Ġafter Ġdelay ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate Ġwhether Ġto Ġanimate Ġshowing Ġthe Ġsc roller ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow ( animate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĊĠĠĠĠĠĠĠ Ġpost ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Hide Override ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Runnable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Anim ating In Ġ&& Ġtranslation X Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Animator ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Animator Ġ= ĠAn imator Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠObject Animator . of Float ( this @ WebView Fast Scroller , ĠView . TRANSL ATION _ X , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= ĠLinear Out Slow In Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Anim ating In Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Anim ating In Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay ( anim ator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Auto Hide () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġpost Auto Hide () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġm WebView ĊĠĠĠĠĠĠĠ Ġif Ġ( web View Ġ!= Ġnull Ġ&& Ġm H iding Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . view . remove Callbacks ( m Hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . view . post Delayed ( m Hide , Ġhide Delay . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġm WebView Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġapp Bar Scroll Range Ġ= Ġm AppBar Layout ?. total Scroll Range Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġscroll Offset Ġ= ĠwebView . compute Vertical Scroll Offset Method () Ġ+ Ġm AppBar Layout Offset ĊĠĠĠĠĠĠĠ Ġval Ġvertical Scroll Range Ġ= ĠwebView . compute Vertical Scroll Range Method () Ġ+ Ġapp Bar Scroll Range ĊĊĠĠĠĠĠĠĠ Ġval Ġbar Height Ġ= Ġm Bar . height ĊĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġscroll Offset . toFloat () Ġ/ Ġ( vertical Scroll Range Ġ- Ġbar Height ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcalculated Handle Height Ġ= Ġ( bar Height . toFloat () Ġ/ Ġvertical Scroll Range Ġ* Ġbar Height ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( calculated Handle Height Ġ< Ġm Min Scroll Handle Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculated Handle Height Ġ= Ġm Min Scroll Handle Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( calculated Handle Height Ġ>= Ġbar Height Ġ|| Ġ! web View . is Scroll able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X Ġ= Ġm Hidden Translation X . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Hide Override Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Hide Override Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġratio Ġ* Ġ( bar Height Ġ- Ġcalculated Handle Height ) Ġ+ Ġm AppBar Layout Offset Ġ- Ġapp Bar Scroll Range ĊĊĠĠĠĠĠĠĠ Ġm Handle . layout ( m Handle . left , Ġy . toInt (), Ġm Handle . right , Ġy . toInt () Ġ+ Ġcalculated Handle Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġupdate Rv Scroll ( d Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm WebView ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll By ( 0 , Ġd Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Scroll Enabled ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Scroll Enabled Ġ!= Ġenable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Scroll Enabled Ġ= Ġenable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WebView ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WebView ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ AUTO _ HIDE _ DELAY Ġ= Ġ 1 5 0 0 ĊĠĠĠ Ġ} Ċ } Ċ