/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . google . android . ex op layer 2 . ui Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroid . view . accessibility . Accessibility NodeInfo Ċ import Ġandroid . view . accessibility . Accessibility NodeInfo . Accessibility Action Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġcom . google . android . ex op layer 2 . util . Assertions Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Copy On Write Array Set Ċ Ċ /** Ċ Ġ* ĠA Ġtime Ġbar Ġthat Ġshows Ġa Ġcurrent Ġposition , Ġbuffered Ġposition , Ġduration Ġand Ġad Ġmarkers . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠA ĠDefault Time Bar Ġcan Ġbe Ġcustomized Ġby Ġsetting Ġattributes , Ġas Ġoutlined Ġbelow . Ċ Ġ* Ċ Ġ* Ġ< h 3 > Attributes </ h 3 > Ċ Ġ* Ċ Ġ* ĠThe Ġfollowing Ġattributes Ġcan Ġbe Ġset Ġon Ġa ĠDefault Time Bar Ġwhen Ġused Ġin Ġa Ġlayout ĠXML Ġfile : Ċ Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` bar _ height `** Ġ- ĠDimension Ġfor Ġthe Ġheight Ġof Ġthe Ġtime Ġbar . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ BAR _ HEIGHT _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` touch _ target _ height `** Ġ- ĠDimension Ġfor Ġthe Ġheight Ġof Ġthe Ġarea Ġin Ġwhich Ġtouch Ċ Ġ* Ġinteractions Ġwith Ġthe Ġtime Ġbar Ġare Ġhandled . ĠIf Ġno Ġheight Ġis Ġspecified , Ġthis Ġalso Ġdetermines Ċ Ġ* Ġthe Ġheight Ġof Ġthe Ġview . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ TO UCH _ TARGET _ HEIGHT _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` ad _ marker _ width `** Ġ- ĠDimension Ġfor Ġthe Ġwidth Ġof Ġany Ġad Ġmarkers Ġshown Ġon Ġthe Ċ Ġ* Ġbar . ĠAd Ġmarkers Ġare Ġsuper imp osed Ġon Ġthe Ġtime Ġbar Ġto Ġshow Ġthe Ġtimes Ġat Ġwhich Ġads Ġwill Ġplay . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ AD _ MARKER _ WIDTH _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` scr ub ber _ enabled _ size `** Ġ- ĠDimension Ġfor Ġthe Ġdiameter Ġof Ġthe Ġcircular Ġscr ub ber Ċ Ġ* Ġhandle Ġwhen Ġscr ub bing Ġis Ġenabled Ġbut Ġnot Ġin Ġprogress . ĠSet Ġto Ġzero Ġif Ġno Ġscr ub ber Ġhandle Ċ Ġ* Ġshould Ġbe Ġshown . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ SCR UB BER _ ENABLED _ SIZE _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` scr ub ber _ disabled _ size `** Ġ- ĠDimension Ġfor Ġthe Ġdiameter Ġof Ġthe Ġcircular Ġscr ub ber Ċ Ġ* Ġhandle Ġwhen Ġscr ub bing Ġisn 't Ġenabled . ĠSet Ġto Ġzero Ġif Ġno Ġscr ub ber Ġhandle Ġshould Ġbe Ġshown . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ SCR UB BER _ DISABLED _ SIZE _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` scr ub ber _ drag ged _ size `** Ġ- ĠDimension Ġfor Ġthe Ġdiameter Ġof Ġthe Ġcircular Ġscr ub ber Ċ Ġ* Ġhandle Ġwhen Ġscr ub bing Ġis Ġin Ġprogress . ĠSet Ġto Ġzero Ġif Ġno Ġscr ub ber Ġhandle Ġshould Ġbe Ġshown . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ SCR UB BER _ DR AG GED _ SIZE _ DP ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` scr ub ber _ drawable `** Ġ- ĠOptional Ġreference Ġto Ġa Ġdrawable Ġto Ġdraw Ġfor Ġthe Ċ Ġ* Ġscr ub ber Ġhandle . ĠIf Ġset , Ġthis Ġoverrides Ġthe Ġdefault Ġbehavior , Ġwhich Ġis Ġto Ġdraw Ġa Ġcircle Ġfor Ċ Ġ* Ġthe Ġscr ub ber Ġhandle . Ċ Ġ* Ġ Ġ* Ġ**` play ed _ color `** Ġ- ĠColor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġrepresenting Ġmedia Ċ Ġ* Ġbefore Ġthe Ġcurrent Ġplayback Ġposition . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Play ed Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ PLAY ED _ COLOR ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` scr ub ber _ color `** Ġ- ĠColor Ġfor Ġthe Ġscr ub ber Ġhandle . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Sc rub ber Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġsee Ġ[. getDefault Sc rub ber Color ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` buffered _ color `** Ġ- ĠColor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ċ Ġ* Ġplayed Ġposition Ġup Ġto Ġthe Ġcurrent Ġbuffered Ġposition . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Buffered Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġsee Ġ[. getDefault Buffered Color ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` un play ed _ color `** Ġ- ĠColor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ċ Ġ* Ġbuffered Ġposition . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Un play ed Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġsee Ġ[. getDefault Un play ed Color ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` ad _ marker _ color `** Ġ- ĠColor Ġfor Ġun play ed Ġad Ġmarkers . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Ad Marker Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġ[. DEFAULT _ AD _ MARKER _ COLOR ] Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ**` play ed _ ad _ marker _ color `** Ġ- ĠColor Ġfor Ġplayed Ġad Ġmarkers . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCorre sponding Ġmethod : Ġ[. set Play ed Ad Marker Color ] Ċ Ġ* Ġ Ġ* ĠDefault : Ġsee Ġ[. getDefault Play ed Ad Marker Color ] Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ open Ġclass ĠDefault Time Bar Ċ /** ĠCreates Ġa Ġnew Ġtime Ġbar . Ġ Ġ*/ Ċ // ĠSup press Ġwarnings Ġdue Ġto Ġusage Ġof ĠView Ġmethods Ġin Ġthe Ġconstructor . Ċ ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠView ( context , Ġattrs ), ĠTime Bar Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġseek Bounds : ĠRect ĊĠĠĠ Ġprotected Ġval ĠprogressBar : ĠRect ĊĠĠĠ Ġprotected Ġval Ġbuffered Bar : ĠRect ĊĠĠĠ Ġprotected Ġval Ġscr ub ber Bar : ĠRect ĊĠĠĠ Ġprotected Ġval Ġplayed Paint : ĠPaint ĊĠĠĠ Ġprotected Ġval Ġbuffered Paint : ĠPaint ĊĠĠĠ Ġprotected Ġval Ġun play ed Paint : ĠPaint ĊĠĠĠ Ġprotected Ġval Ġad Marker Paint : ĠPaint ĊĠĠĠ Ġprotected Ġval Ġplayed Ad Marker Paint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Paint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Drawable : ĠDrawable ? ĊĠĠĠ Ġprivate Ġval Ġbar Height : ĠInt ĊĠĠĠ Ġprivate Ġval Ġtouch Target Height : ĠInt ĊĠĠĠ Ġprotected Ġval Ġad Marker Width : ĠInt ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Enabled Size : ĠInt ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Disabled Size : ĠInt ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Drag ged Size : ĠInt ĊĠĠĠ Ġprivate Ġval Ġscr ub ber Padding : ĠInt ĊĠĠĠ Ġprivate Ġval Ġfine Sc rub Y Threshold : ĠInt ĊĠĠĠ Ġprivate Ġval Ġformat Builder : ĠStringBuilder ĊĠĠĠ Ġprivate Ġval Ġformatter : ĠFormatter ĊĠĠĠ Ġprivate Ġval Ġstop Sc rub bing Runnable : ĠRunnable ĊĠĠĠ Ġprivate Ġval Ġlisteners : ĠCopy On Write Array Set < Time Bar . On Sc rub Listener > ĊĠĠĠ Ġprivate Ġval Ġlocation On Screen : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġtouch Position : ĠPoint ĊĊĠĠĠ Ġprivate Ġvar Ġkey Count Increment : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġkey Time Increment : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast Co arse Sc rub X Position : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġscr ub bing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġscr ub Position : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġduration : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġposition : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġbuffered Position : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġvar Ġad Group Count : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġvar Ġad Group Times Ms : ĠLong Array ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġplayed Ad Groups : ĠBoolean Array ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġscr ub ber Position : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( progress Bar . width () Ġ<= Ġ 0 Ġ|| Ġduration Ġ== ĠC . TIME _ UN SET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġscr ub ber Bar . width () Ġ* Ġduration Ġ/ ĠprogressBar . width () ĊĊĠĠĠ Ġprivate Ġval Ġprogress Text : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠUtil . getString For Time ( format Builder , Ġformatter , Ġposition ) ĊĊĠĠĠ Ġprivate Ġval Ġposition Increment : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( key Time Increment Ġ== ĠC . TIME _ UN SET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ== ĠC . TIME _ UN SET ) Ġ 0 Ġelse Ġduration Ġ/ Ġkey Count Increment ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Time Increment ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġbuffered Bar Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġscr ub ber Bar Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġplayed Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġbuffered Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġun play ed Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġad Marker Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġplayed Ad Marker Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġscr ub ber Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġscr ub ber Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlisteners Ġ= ĠCopy On Write Array Set () ĊĠĠĠĠĠĠĠ Ġlocation On Screen Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġtouch Position Ġ= ĠPoint () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġthe Ġdimensions Ġand Ġpaint s Ġfor Ġdrawn Ġelements . ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= Ġres . display Metrics ĊĠĠĠĠĠĠĠ Ġfine Sc rub Y Threshold Ġ= Ġdp To Px ( display Metrics , ĠF INE _ SCR UB _ Y _ THRESHOLD _ DP ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Bar Height Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ BAR _ HEIGHT _ DP ) ĊĠĠĠĠĠĠĠ Ġvar Ġdefault Touch Target Height Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ TO UCH _ TARGET _ HEIGHT _ DP ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Ad Marker Width Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ AD _ MARKER _ WIDTH _ DP ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Sc rub ber Enabled Size Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ SCR UB BER _ ENABLED _ SIZE _ DP ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Sc rub ber Disabled Size Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ SCR UB BER _ DISABLED _ SIZE _ DP ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Sc rub ber Drag ged Size Ġ= Ġdp To Px ( display Metrics , ĠDEFAULT _ SCR UB BER _ DR AG GED _ SIZE _ DP ) ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Default Time Bar , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drawable Ġ= Ġa . get Drawable ( R . style able . Default Time Bar _ scr ub ber _ drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawable Layout Direction ( scr ub ber Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Touch Target Height Ġ= ĠMath . max ( scr ub ber Drawable . minimum Height , Ġdefault Touch Target Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar Height Ġ= Ġa . get Dimension Pixel Size ( R . style able . Default Time Bar _ bar _ height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Bar Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Target Height Ġ= Ġa . get Dimension Pixel Size ( R . style able . Default Time Bar _ touch _ target _ height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Touch Target Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad Marker Width Ġ= Ġa . get Dimension Pixel Size ( R . style able . Default Time Bar _ ad _ marker _ width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ad Marker Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Enabled Size Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Default Time Bar _ scr ub ber _ enabled _ size , Ġdefault Sc rub ber Enabled Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Disabled Size Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Default Time Bar _ scr ub ber _ disabled _ size , Ġdefault Sc rub ber Disabled Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drag ged Size Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Default Time Bar _ scr ub ber _ drag ged _ size , Ġdefault Sc rub ber Drag ged Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayed Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ play ed _ color , ĠDEFAULT _ PLAY ED _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscr ub ber Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ scr ub ber _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Sc rub ber Color ( play ed Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ buffered _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Buffered Color ( play ed Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun play ed Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ un play ed _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Un play ed Color ( play ed Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġad Marker Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ ad _ marker _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ AD _ MARKER _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayed Ad Marker Color Ġ= Ġa . getInt ( R . style able . Default Time Bar _ play ed _ ad _ marker _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Play ed Ad Marker Color ( ad Marker Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayed Paint . color Ġ= Ġplayed Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Paint . color Ġ= Ġscr ub ber Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Paint . color Ġ= Ġbuffered Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun play ed Paint . color Ġ= Ġun play ed Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad Marker Paint . color Ġ= Ġad Marker Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayed Ad Marker Paint . color Ġ= Ġplayed Ad Marker Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar Height Ġ= Ġdefault Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Target Height Ġ= Ġdefault Touch Target Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad Marker Width Ġ= Ġdefault Ad Marker Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Enabled Size Ġ= Ġdefault Sc rub ber Enabled Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Disabled Size Ġ= Ġdefault Sc rub ber Disabled Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drag ged Size Ġ= Ġdefault Sc rub ber Drag ged Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayed Paint . color Ġ= ĠDEFAULT _ PLAY ED _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Paint . color Ġ= ĠgetDefault Sc rub ber Color ( DEFAULT _ PLAY ED _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Paint . color Ġ= ĠgetDefault Buffered Color ( DEFAULT _ PLAY ED _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun play ed Paint . color Ġ= ĠgetDefault Un play ed Color ( DEFAULT _ PLAY ED _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad Marker Paint . color Ġ= ĠDEFAULT _ AD _ MARKER _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drawable Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġformat Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġformatter Ġ= ĠFormatter ( format Builder , ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġstop Sc rub bing Runnable Ġ= ĠRunnable Ġ{ Ġstop Sc rub bing (/* Ġcanceled = Ġ*/ false ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Padding Ġ= Ġ( scr ub ber Drawable . minimum Width Ġ+ Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Padding Ġ= Ġ( Math . max ( scr ub ber Disabled Size , ĠMath . max ( scr ub ber Enabled Size , Ġscr ub ber Drag ged Size )) Ġ+ Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġduration Ġ= ĠC . TIME _ UN SET ĊĠĠĠĠĠĠĠ Ġkey Time Increment Ġ= ĠC . TIME _ UN SET ĊĠĠĠĠĠĠĠ Ġkey Count Increment Ġ= ĠDEFAULT _ INCREMENT _ COUNT ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 1 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaybe Set Important For Accessibility V 1 6 () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġrepresenting Ġmedia Ġbefore Ġthe Ġplayback Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplayed Color ĠThe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġrepresenting Ġmedia Ġbefore Ġthe ĊĠĠĠĠ Ġ* Ġplayback Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Play ed Color (@ Color Int Ġplayed Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayed Paint . color Ġ= Ġplayed Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġthe Ġscr ub ber Ġhandle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġscr ub ber Color ĠThe Ġcolor Ġfor Ġthe Ġscr ub ber Ġhandle . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Sc rub ber Color (@ Color Int Ġscr ub ber Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscr ub ber Paint . color Ġ= Ġscr ub ber Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ġplayed Ġposition Ġup Ġto Ġthe ĊĠĠĠĠ Ġ* Ġcurrent Ġbuffered Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbuffered Color ĠThe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ġplayed ĊĠĠĠĠ Ġ* Ġposition Ġup Ġto Ġthe Ġcurrent Ġbuffered Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Buffered Color (@ Color Int Ġbuffered Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffered Paint . color Ġ= Ġbuffered Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ġplayed Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġun play ed Color ĠThe Ġcolor Ġfor Ġthe Ġportion Ġof Ġthe Ġtime Ġbar Ġafter Ġthe Ġcurrent Ġplayed ĊĠĠĠĠ Ġ* Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Un play ed Color (@ Color Int Ġun play ed Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġun play ed Paint . color Ġ= Ġun play ed Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġun play ed Ġad Ġmarkers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġad Marker Color ĠThe Ġcolor Ġfor Ġun play ed Ġad Ġmarkers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Ad Marker Color (@ Color Int Ġad Marker Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġad Marker Paint . color Ġ= Ġad Marker Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcolor Ġfor Ġplayed Ġad Ġmarkers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplayed Ad Marker Color ĠThe Ġcolor Ġfor Ġplayed Ġad Ġmarkers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Play ed Ad Marker Color (@ Color Int Ġplayed Ad Marker Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayed Ad Marker Paint . color Ġ= Ġplayed Ad Marker Color ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTime Bar Ġimplementation . ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠTime Bar . On Sc rub Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( listener : ĠTime Bar . On Sc rub Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Key Time Increment ( time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertions . check Argument ( time Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġkey Count Increment Ġ= ĠC . INDEX _ UN SET ĊĠĠĠĠĠĠĠ Ġkey Time Increment Ġ= Ġtime ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Key Count Increment ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertions . check Argument ( count Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġkey Count Increment Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġkey Time Increment Ġ= ĠC . TIME _ UN SET ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Position ( position : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . position Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġprogress Text ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Buffered Position ( buffered Position : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . buffered Position Ġ= Ġbuffered Position ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Duration ( duration : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub bing Ġ&& Ġduration Ġ== ĠC . TIME _ UN SET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Duration (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Ad Group Times Ms ( ad Group Times Ms : ĠLong Array ?, Ġplayed Ad Groups : ĠBoolean Array ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad Group Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertions . check Argument ( ad Group Count Ġ== Ġ 0 Ġ|| Ġad Group Times Ms Ġ!= Ġnull Ġ&& Ġplayed Ad Groups Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġthis . ad Group Count Ġ= Ġad Group Count ĊĠĠĠĠĠĠĠ Ġthis . ad Group Times Ms Ġ= Ġad Group Times Ms ĊĠĠĠĠĠĠĠ Ġthis . play ed Ad Groups Ġ= Ġplayed Ad Groups ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠView Ġmethods . ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub bing Ġ&& Ġ! enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġdraw Time Bar ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Play head ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled Ġ|| Ġduration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtouch Position Ġ= Ġresolve Relative Touch Position ( event ) ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġtouch Position . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġtouch Position . y ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġif Ġ( isIn Seek Bar ( x . toFloat (), Ġy . toFloat ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Sc rub ber ( x . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Sc rub bing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub Position Ġ= Ġscr ub ber Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġif Ġ( scr ub bing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġfine Sc rub Y Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative X Ġ= Ġx Ġ- Ġlast Co arse Sc rub X Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Sc rub ber (( last Co arse Sc rub X Position Ġ+ Ġrelative X Ġ/ ĠF INE _ SCR UB _ RATIO ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Co arse Sc rub X Position Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Sc rub ber ( x . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub Position Ġ= Ġscr ub ber Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Sc rub Move ( this , Ġscr ub Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġif Ġ( scr ub bing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing ( event . action Ġ== ĠMotion Event . ACTION _ CANCEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}// ĠDo Ġnothing . ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition Increment Ġ= Ġposition Increment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DP AD _ LEFT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Increment Ġ= Ġ- position Increment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scr ub Increment ally ( position Increment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callbacks ( stop Sc rub bing Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( stop Sc rub bing Runnable , ĠSTOP _ SCR UB B ING _ TIMEOUT _ MS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFall Ġthrough . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DP AD _ RIGHT Ġ-> Ġif Ġ( scr ub Increment ally ( position Increment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callbacks ( stop Sc rub bing Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( stop Sc rub bing Runnable , ĠSTOP _ SCR UB B ING _ TIMEOUT _ MS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . KEYCODE _ DP AD _ CENTER , ĠKeyEvent . KEYCODE _ ENTER Ġ-> Ġif Ġ( scr ub bing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callbacks ( stop Sc rub bing Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing Runnable . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}// ĠDo Ġnothing . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrawable StateChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . drawable StateChanged () ĊĠĠĠĠĠĠĠ Ġupdate Drawable State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġjump Draw ables To Current State () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . jump Draw ables To Current State () ĊĠĠĠĠĠĠĠ Ġscr ub ber Drawable ?. jump To Current State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠView . Measure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Target Height ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . EX ACT LY ) Ġheight Size Ġelse ĠMath . min ( touch Target Height , Ġheight Size ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( View . Measure Spec . getSize ( width Measure Spec ), Ġheight ) ĊĠĠĠĠĠĠĠ Ġupdate Drawable State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġright Ġ- Ġleft ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbottom Ġ- Ġtop ĊĠĠĠĠĠĠĠ Ġval Ġbar Y Ġ= Ġ( height Ġ- Ġtouch Target Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġseek Left Ġ= Ġpadding Left ĊĠĠĠĠĠĠĠ Ġval Ġseek Right Ġ= Ġwidth Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġval Ġprogress Y Ġ= Ġbar Y Ġ+ Ġ( touch Target Height Ġ- Ġbar Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġseek Bounds . set ( seek Left , Ġbar Y , Ġseek Right , Ġbar Y Ġ+ Ġtouch Target Height ) ĊĠĠĠĠĠĠĠ ĠprogressBar . set ( seek Bounds . left Ġ+ Ġscr ub ber Padding , Ġprogress Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bounds . right Ġ- Ġscr ub ber Padding , Ġprogress Y Ġ+ Ġbar Height ) ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon R tl Properties Changed ( layout Direction : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Drawable Ġ!= Ġnull Ġ&& Ġset Drawable Layout Direction ( scr ub ber Drawable , Ġlayout Direction )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility Event ( event : ĠAccessibility Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility Event ( event ) ĊĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠAccessibility Event . TYPE _ VIEW _ SELECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . text . add ( progress Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . className Ġ= ĠACC ES SI B ILITY _ CLASS _ NAME ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 2 1 ) ĊĠĠĠ Ġoverride Ġfun Ġon Initialize Accessibility NodeInfo ( info : ĠAccessibility NodeInfo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Initialize Accessibility NodeInfo ( info ) ĊĠĠĠĠĠĠĠ Ġinfo . className Ġ= ĠACC ES SI B ILITY _ CLASS _ NAME ĊĠĠĠĠĠĠĠ Ġinfo . content Description Ġ= Ġprogress Text ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 2 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addAction ( Accessibility Action . ACTION _ SCROLL _ FORWARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addAction ( Accessibility Action . ACTION _ SCROLL _ BACK WARD ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Util . SDK _ INT Ġ>= Ġ 1 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addAction ( Accessibility NodeInfo . ACTION _ SCROLL _ FORWARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . addAction ( Accessibility NodeInfo . ACTION _ SCROLL _ BACK WARD ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( 1 6 ) ĊĠĠĠ Ġoverride Ġfun Ġperform Accessibility Action ( action : ĠInt , Ġargs : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( super . perform Accessibility Action ( action , Ġargs )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠAccessibility NodeInfo . ACTION _ SCROLL _ BACK WARD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scr ub Increment ally (- position Increment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( action Ġ== ĠAccessibility NodeInfo . ACTION _ SCROLL _ FORWARD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scr ub Increment ally ( position Increment )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Sc rub bing ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsend Accessibility Event ( Accessibility Event . TYPE _ VIEW _ SELECTED ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInternal Ġmethods . ĊĊĠĠĠ Ġ@ Target Api ( 1 6 ) ĊĠĠĠ Ġprivate Ġfun Ġmaybe Set Important For Accessibility V 1 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( important For Accessibility Ġ== ĠView . IMPORTANT _ FOR _ ACC ES SI B ILITY _ AUTO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimportant For Accessibility Ġ= ĠView . IMPORTANT _ FOR _ ACC ES SI B ILITY _ YES ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Sc rub bing () Ġ{ ĊĠĠĠĠĠĠĠ Ġscr ub bing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġparent ?. request Dis allow Intercept Touch Event ( true ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Sc rub Start ( this , Ġscr ub ber Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Sc rub bing ( c anceled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscr ub bing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġparent ?. request Dis allow Intercept Touch Event ( false ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Sc rub Stop ( this , Ġscr ub ber Position , Ġcanceled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffered Bar . set ( progress Bar ) ĊĠĠĠĠĠĠĠ Ġscr ub ber Bar . set ( progress Bar ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Sc rub ber Time Ġ= Ġif Ġ( scr ub bing ) Ġscr ub Position Ġelse Ġposition ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Pixel Width Ġ= Ġ( progress Bar . width () Ġ* Ġbuffered Position Ġ/ Ġduration ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Bar . right Ġ= ĠMath . min ( progress Bar . left Ġ+ Ġbuffered Pixel Width , ĠprogressBar . right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscr ub ber Pixel Position Ġ= Ġ( progress Bar . width () Ġ* Ġnew Sc rub ber Time Ġ/ Ġduration ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Bar . right Ġ= ĠMath . min ( progress Bar . left Ġ+ Ġscr ub ber Pixel Position , ĠprogressBar . right ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Bar . right Ġ= ĠprogressBar . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Bar . right Ġ= ĠprogressBar . left ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate ( seek Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġposition Sc rub ber ( x Position : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscr ub ber Bar . right Ġ= ĠUtil . constr ain Value ( x Position . toInt (), ĠprogressBar . left , ĠprogressBar . right ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Relative Touch Position ( motion Event : ĠMotion Event ): ĠPoint Ġ{ ĊĠĠĠĠĠĠĠ Ġget Location On Screen ( location On Screen ) ĊĠĠĠĠĠĠĠ Ġtouch Position . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event . raw X . toInt () Ġ- Ġlocation On Screen [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Event . raw Y . toInt () Ġ- Ġlocation On Screen [ 1 ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġtouch Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Seek Bar ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġseek Bounds . contains ( x . toInt (), Ġy . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġdraw Time Bar ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠprogressBar Height Ġ= ĠprogressBar . height () ĊĠĠĠĠĠĠĠ Ġval Ġbar Top Ġ= ĠprogressBar . center Y () Ġ- ĠprogressBar Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġbar Bottom Ġ= Ġbar Top Ġ+ ĠprogressBar Height ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( progress Bar . left . toFloat (), Ġbar Top . toFloat (), ĠprogressBar . right . toFloat (), Ġbar Bottom . toFloat (), Ġun play ed Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġbuffered Left Ġ= Ġbuffered Bar . left ĊĠĠĠĠĠĠĠ Ġval Ġbuffered Right Ġ= Ġbuffered Bar . right ĊĠĠĠĠĠĠĠ Ġval Ġprogress Left Ġ= ĠMath . max ( Math . max ( progress Bar . left , Ġbuffered Right ), Ġscr ub ber Bar . right ) ĊĠĠĠĠĠĠĠ Ġif Ġ( progress Left Ġ< ĠprogressBar . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( progress Left . toFloat (), Ġbar Top . toFloat (), ĠprogressBar . right . toFloat (), Ġbar Bottom . toFloat (), Ġun play ed Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffered Left Ġ= ĠMath . max ( buffered Left , Ġscr ub ber Bar . right ) ĊĠĠĠĠĠĠĠ Ġif Ġ( buffered Right Ġ> Ġbuffered Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( buffered Left . toFloat (), Ġbar Top . toFloat (), Ġbuffered Right . toFloat (), Ġbar Bottom . toFloat (), Ġbuffered Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Bar . width () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( scr ub ber Bar . left . toFloat (), Ġbar Top . toFloat (), Ġscr ub ber Bar . right . toFloat (), Ġbar Bottom . toFloat (), Ġplayed Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ad Group Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġad Group Times Ms Ġ= ĠAssertions . checkNotNull ( this . ad Group Times Ms ) ĊĠĠĠĠĠĠĠ Ġval Ġplayed Ad Groups Ġ= ĠAssertions . checkNotNull ( this . play ed Ad Groups ) ĊĠĠĠĠĠĠĠ Ġval Ġad Marker Offset Ġ= Ġad Marker Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġad Group Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġad Group Time Ms Ġ= ĠUtil . constr ain Value ( ad Group Times Ms [ i ], Ġ 0 , Ġduration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Position Offset Ġ= Ġ( progress Bar . width () Ġ* Ġad Group Time Ms Ġ/ Ġduration ). toInt () Ġ- Ġad Marker Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Left Ġ= ĠprogressBar . left Ġ+ ĠMath . min ( progress Bar . width () Ġ- Ġad Marker Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . max ( 0 , Ġmarker Position Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= Ġif Ġ( play ed Ad Groups [ i ]) Ġplayed Ad Marker Paint Ġelse Ġad Marker Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( marker Left . toFloat (), Ġbar Top . toFloat (), Ġ( marker Left Ġ+ Ġad Marker Width ). toFloat (), Ġbar Bottom . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Play head ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġplay head X Ġ= ĠUtil . constr ain Value ( scr ub ber Bar . right , Ġscr ub ber Bar . left , ĠprogressBar . right ) ĊĠĠĠĠĠĠĠ Ġval Ġplay head Y Ġ= Ġscr ub ber Bar . center Y () ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Drawable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscr ub ber Size Ġ= Ġif Ġ( scr ub bing Ġ|| Ġis Focused ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drag ged Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) Ġscr ub ber Enabled Size Ġelse Ġscr ub ber Disabled Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay head Radius Ġ= Ġscr ub ber Size Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( play head X . toFloat (), Ġplay head Y . toFloat (), Ġplay head Radius . toFloat (), Ġscr ub ber Paint ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscr ub ber Drawable Width Ġ= Ġscr ub ber Drawable . intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscr ub ber Drawable Height Ġ= Ġscr ub ber Drawable . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drawable . setBounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay head X Ġ- Ġscr ub ber Drawable Width Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay head Y Ġ- Ġscr ub ber Drawable Height Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay head X Ġ+ Ġscr ub ber Drawable Width Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay head Y Ġ+ Ġscr ub ber Drawable Height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscr ub ber Drawable . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Drawable State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub ber Drawable Ġ!= Ġnull Ġ&& Ġscr ub ber Drawable . is State ful ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġscr ub ber Drawable . setState ( drawable State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIncrement ally Ġscr ub s Ġthe Ġposition Ġby Ġ` position Change `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Change ĠThe Ġchange Ġin Ġthe Ġscr ub ber Ġposition , Ġin Ġmilliseconds . ĠMay Ġbe Ġnegative . ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġwhether Ġthe Ġscr ub ber Ġposition Ġchanged . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscr ub Increment ally ( position Change : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscr ub ber Position Ġ= Ġscr ub ber Position ĊĠĠĠĠĠĠĠ Ġscr ub Position Ġ= ĠUtil . constr ain Value ( scr ub ber Position Ġ+ Ġposition Change , Ġ 0 , Ġduration ) ĊĠĠĠĠĠĠĠ Ġif Ġ( scr ub Position Ġ== Ġscr ub ber Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! scr ub bing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Sc rub bing () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Sc rub Move ( this , Ġscr ub Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Drawable Layout Direction ( drawable : ĠDrawable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUtil . SDK _ INT Ġ>= Ġ 2 3 Ġ&& Ġset Drawable Layout Direction ( drawable , Ġlayout Direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġheight Ġfor Ġthe Ġtime Ġbar , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ BAR _ HEIGHT _ DP Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġheight Ġfor Ġthe Ġtouch Ġtarget , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TO UCH _ TARGET _ HEIGHT _ DP Ġ= Ġ 2 6 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġwidth Ġfor Ġad Ġmarkers , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ AD _ MARKER _ WIDTH _ DP Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġdiameter Ġfor Ġthe Ġscr ub ber Ġwhen Ġenabled , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ SCR UB BER _ ENABLED _ SIZE _ DP Ġ= Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġdiameter Ġfor Ġthe Ġscr ub ber Ġwhen Ġdisabled , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ SCR UB BER _ DISABLED _ SIZE _ DP Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġdiameter Ġfor Ġthe Ġscr ub ber Ġwhen Ġdrag ged , Ġin Ġdp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ SCR UB BER _ DR AG GED _ SIZE _ DP Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġcolor Ġfor Ġthe Ġplayed Ġportion Ġof Ġthe Ġtime Ġbar . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ PLAY ED _ COLOR Ġ= Ġ- 0 x 1 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġcolor Ġfor Ġad Ġmarkers . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ AD _ MARKER _ COLOR Ġ= Ġ- 0 x 4 d 0 0 0 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġthreshold Ġin Ġd ps Ġabove Ġthe Ġbar Ġat Ġwhich Ġtouch Ġevents Ġtrigger Ġfine Ġscr ub Ġmode . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠF INE _ SCR UB _ Y _ THRESHOLD _ DP Ġ= Ġ- 5 0 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġratio Ġby Ġwhich Ġtimes Ġare Ġreduced Ġin Ġfine Ġscr ub Ġmode . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠF INE _ SCR UB _ RATIO Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtime Ġafter Ġwhich Ġthe Ġscr ub bing Ġlistener Ġis Ġnotified Ġthat Ġscr ub bing Ġhas Ġstopped Ġafter ĊĠĠĠĠĠĠĠĠ Ġ* Ġperforming Ġan Ġincremental Ġscr ub Ġusing Ġkey Ġinput . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTOP _ SCR UB B ING _ TIMEOUT _ MS : ĠLong Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ INCREMENT _ COUNT Ġ= Ġ 2 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe ĠAndroid ĠSDK Ġview Ġthat Ġmost Ġclosely Ġre semb les Ġthis Ġcustom Ġview . ĠUsed Ġas Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġclass Ġname Ġfor Ġaccessibility . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠACC ES SI B ILITY _ CLASS _ NAME Ġ= Ġ" android . widget . Seek Bar " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Drawable Layout Direction ( drawable : ĠDrawable , Ġlayout Direction : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUtil . SDK _ INT Ġ>= Ġ 2 3 Ġ&& Ġdrawable . setLayout Direction ( layout Direction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Sc rub ber Color ( play ed Color : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 0 x 1 0 0 0 0 0 0 Ġor Ġplayed Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Un play ed Color ( play ed Color : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 x 3 3 0 0 0 0 0 0 Ġor Ġ( play ed Color Ġand Ġ 0 x 0 0 FFFFFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Buffered Color ( play ed Color : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 0 x 3 4 0 0 0 0 0 0 Ġor Ġ( play ed Color Ġand Ġ 0 x 0 0 FFFFFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Play ed Ad Marker Color ( ad Marker Color : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 x 3 3 0 0 0 0 0 0 Ġor Ġ( ad Marker Color Ġand Ġ 0 x 0 0 FFFFFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdp To Px ( display Metrics : ĠDisplay Metrics , Ġd ps : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( d ps Ġ* Ġdisplay Metrics . density Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ