package Ġcom . mo kt ar . mv pk otlin Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . media . Audio Attributes Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view .* Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget .* Ċ import Ġandroidx . annotation . Check Result Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . annotation . Raw Res Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . mo kt ar . mv pk otlin . capt ions . Capt ions View Ċ import Ġcom . mo kt ar . mv pk otlin . helpers . Util Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġm ok tar Ċ Ġ*/ Ċ class ĠM Video Player Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠRelative Layout ( context , Ġattrs , Ġdef Style Attr ), ĊĠĠĠĠĠĠĠ ĠI Better Video Player , ĠTexture View . Surface Texture Listener , ĠMedia Player . On Prepared Listener , ĊĠĠĠĠĠĠĠ ĠMedia Player . On Buffer ing Update Listener , ĠMedia Player . On Completion Listener , ĊĠĠĠĠĠĠĠ ĠMedia Player . On Video Size Changed Listener , ĠMedia Player . OnError Listener , ĊĠĠĠĠĠĠĠ ĠView . OnClickListener , ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġhide Controls Duration : ĠInt Ġ= Ġ 2 0 0 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Player : ĠMedia Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġam : ĠAudio Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Surface : ĠSurface ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Sub View Text Size : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Sub View TextColor : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWindow Ġthat Ġholds Ġthe Ġplayer . ĠNe cessary Ġfor Ġsetting Ġbrightness . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Window : ĠWindow ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Controls Frame : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Progress Frame : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Click Frame : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Toolbar Frame : ĠView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Toolbar : ĠToolbar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Sub View : ĠCapt ions View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm ProgressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Position TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Forward : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Backward : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Texture View : ĠTexture View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Seek er : ĠSeek Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Bottom ProgressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Label Position : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Label Duration : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Btn Play Pause : ĠImage Button ĊĊĠĠĠ Ġprivate Ġvar Ġm Surface Available : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Prepared : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Was Playing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Initial Texture Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Initial Texture Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Handler : ĠHandler ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Source : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġheaders : ĠMap < String , ĠString > Ġ= ĠHashMap () ĊĊĠĠĠ Ġprivate Ġvar Ġm Callback : ĠVideo Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Progress Callback : ĠVideo Progress Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Play Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Pause Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Restart Drawable : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Title : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Loop Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Hide Controls On Play Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Show Total Duration Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Bottom ProgressBar Visibility Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Show Toolbar Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Gesture Type Ġ= ĠGest ure Type . No Gesture ĊĠĠĠ Ġprivate Ġvar Ġm Auto Play Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Controls Disabled Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Initial Position Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġm Double Tap Seek Duration : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġhide Controls Runnable : ĠRunnable Ġ= ĠRunnable Ġ{ Ġhide Controls () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġclick Frame Swipe Listener Ġ= Ġobject Ġ: ĠOn Swipe Touch Listener ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġdiff Time Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġfinal Time Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġstart Volume : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Volume : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġstart Brightness : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Brightness : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( dir : ĠOn Swipe Touch Listener . Direction , Ġdiff : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġswipe Ġis Ġnot Ġenabled , Ġmove Ġshould Ġnot Ġbe Ġevaluated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Gesture Type Ġ!= ĠGest ure Type . Swipe Gesture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . LEFT Ġ|| Ġdir Ġ== ĠOn Swipe Touch Listener . Direction . RIGHT ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġplayer Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Time Ġ= Ġif Ġ( player . duration Ġ<= Ġ 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . duration . toFloat () Ġ* Ġdiff Ġ/ Ġm Initial Texture Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 0 0 0 . toFloat () Ġ* Ġdiff Ġ/ Ġm Initial Texture Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Time Ġ*= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Time Ġ= Ġplayer . current Position Ġ+ Ġdiff Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( final Time Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Time Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( final Time Ġ> Ġplayer . duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Time Ġ= Ġplayer . duration . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Time Ġ= Ġfinal Time Ġ- Ġplayer . current Position ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Text Ġ= ĠUtil . get Duration String ( final Time . to Long (), Ġfalse ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ[" Ġ+ Ġ( if Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . LEFT ) Ġ"-" Ġelse Ġ"+ ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . get Duration String ( Math . abs ( diff Time ). to Long (), Ġfalse ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . text Ġ= Ġprogress Text ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Time Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial X Ġ>= Ġm Initial Texture Width Ġ/ Ġ 2 Ġ|| Ġm Window Ġ== Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdiff Volume : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfinal Volume : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Volume Ġ= Ġmax Volume . toFloat () Ġ* Ġdiff Ġ/ Ġ( m Initial Texture Height . toFloat () Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Volume Ġ= Ġ- diff Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Volume Ġ= Ġstart Volume Ġ+ Ġdiff Volume . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( final Volume Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Volume Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( final Volume Ġ> Ġmax Volume ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Volume Ġ= Ġmax Volume ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Text Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . volume ), Ġfinal Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . text Ġ= Ġprogress Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġam ?. set Stream Volume ( Audio Manager . STREAM _ M US IC , Ġfinal Volume , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( initial X Ġ< Ġm Initial Texture Width Ġ/ Ġ 2 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdiff Brightness : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfinal Brightness : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Brightness Ġ= Ġmax Brightness . toFloat () Ġ* Ġdiff Ġ/ Ġ( m Initial Texture Height . toFloat () Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Brightness Ġ= Ġ- diff Brightness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Brightness Ġ= Ġstart Brightness Ġ+ Ġdiff Brightness . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( final Brightness Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Brightness Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( final Brightness Ġ> Ġmax Brightness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Brightness Ġ= Ġmax Brightness ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Text Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . brightness ), Ġfinal Brightness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . text Ġ= Ġprogress Text ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġm Window ?. attributes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ?. screen Brightness Ġ= Ġfinal Brightness . toFloat () Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Window ?. attributes Ġ= Ġlayout ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Int ( B ET TER _ VIDEO _ PLAYER _ BR IGHT NESS , Ġfinal Brightness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Controls () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Gesture Type Ġ== ĠGest ure Type . Double Tap Gesture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseek Sec Ġ= Ġm Double Tap Seek Duration Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Forward . text Ġ= ĠString . format ( resources . getString ( R . string . seconds ), Ġseek Sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Backward . text Ġ= ĠString . format ( resources . getString ( R . string . seconds ), Ġseek Sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . x Ġ> Ġm Initial Texture Width Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Forward . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate View Fade ( it , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate View Fade ( it , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( getCurrent Position () Ġ+ Ġm Double Tap Seek Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Backward . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate View Fade ( it , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate View Fade ( it , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( getCurrent Position () Ġ- Ġm Double Tap Seek Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon After Move () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( final Time Ġ>= Ġ 0 Ġ&& Ġm Gesture Type Ġ== ĠGest ure Type . Swipe Gesture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( final Time . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Was Playing ) Ġm Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Before Move ( dir : ĠOn Swipe Touch Listener . Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Gesture Type Ġ!= ĠGest ure Type . Swipe Gesture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir Ġ== ĠOn Swipe Touch Listener . Direction . LEFT Ġ|| Ġdir Ġ== ĠOn Swipe Touch Listener . Direction . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Was Playing Ġ= Ġis Playing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Brightness Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Window ?. attributes ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Brightness Ġ= Ġ( it . screen Brightness Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Volume Ġ= Ġam ?. get Stream Max Volume ( Audio Manager . STREAM _ M US IC ) Ġ?: Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Volume Ġ= Ġam ?. get Stream Volume ( Audio Manager . STREAM _ M US IC ) Ġ?: Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRunnable Ġused Ġto Ġrun Ġcode Ġon Ġan Ġinterval Ġto Ġupdate Ġcounters Ġand Ġsee ker ĊĠĠĠ Ġprivate Ġval Ġm Update Counters Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Is Prepared ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġplayer . current Position . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdur Ġ= Ġplayer . duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ> Ġdur ) Ġpos Ġ= Ġdur ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Label Position . text Ġ= ĠUtil . get Duration String ( pos , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Show Total Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Label Duration . text Ġ= ĠUtil . get Duration String ( dur , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Label Duration . text Ġ= ĠUtil . get Duration String ( dur Ġ- Ġpos , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġpos . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġdur . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Seek er . progress Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Seek er . max Ġ= Ġduration ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . progress Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . max Ġ= Ġduration ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Callback ?. on Progress Update ( position , Ġduration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. post Delayed ( this , ĠUPDATE _ INTERVAL . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġattrs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . getString ( R . style able . M Video Player _ mvp _ source )?. let Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Source Ġ= ĠUri . parse ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . getString ( R . style able . M Video Player _ mvp _ title )?. let Ġ{ Ġtitle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play Drawable Ġ= Ġa . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ play Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Drawable Ġ= Ġa . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ pause Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Restart Drawable Ġ= Ġa . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ restart Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Controls Duration Ġ= Ġa . getInteger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ hide Controls Duration , Ġhide Controls Duration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Hide Controls On Play Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ hide Controls On Play , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Auto Play Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ auto Play , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Loop Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ loop , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Show Total Duration Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ show Total Duration , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar Visibility Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ show Bottom ProgressBar , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Gesture Type Ġ= ĠGest ure Type . values ()[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ gesture Type , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Show Toolbar Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ show Toolbar , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Controls Disabled Ġ= Ġa . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ disable Controls , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sub View Text Size Ġ= Ġa . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ caption Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Dimension Pixel Size ( R . dim en . b vp _ subtitle _ size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sub View TextColor Ġ= Ġa . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . M Video Player _ mvp _ caption Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( context , ĠR . color . mvp _ subtitle _ color )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Exception Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sub View Text Size Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . b vp _ subtitle _ size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Sub View TextColor Ġ= ĠContext Compat . getColor ( context , ĠR . color . mvp _ subtitle _ color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Play Drawable Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Play Drawable Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . mvp _ action _ play ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Pause Drawable Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Drawable Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . mvp _ action _ pause ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Restart Drawable Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Restart Drawable Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . mvp _ action _ restart ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Source ( source : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Source Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ!= Ġnull ) Ġprepare () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Source ( source : ĠUri , Ġheaders : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . headers Ġ= Ġheaders ĊĠĠĠĠĠĠĠ Ġset Source ( source ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Callback ( callback : ĠVideo Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Caption Load Listener ( listener : ĠCapt ions View . Capt ions View Load Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Sub View . set Capt ions View Load Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Progress Callback ( callback : ĠVideo Progress Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Progress Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Button Drawable ( type : ĠButton Type , Ġdrawable : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . Play Button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Playing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . Pause Button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Playing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton Type . Restart Button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . current Position Ġ>= Ġit . duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Hide Controls On Play ( hide : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Hide Controls On Play Ġ= Ġhide ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Auto Play ( auto Play : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Auto Play Ġ= Ġauto Play ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Swipe Gest ures () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Gesture Type Ġ= ĠGest ure Type . Swipe Gesture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Swipe Gest ures ( window : ĠWindow ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Gesture Type Ġ= ĠGest ure Type . Swipe Gesture ĊĠĠĠĠĠĠĠ Ġm Window Ġ= Ġwindow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Double Tap Gest ures ( seek : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Double Tap Seek Duration Ġ= Ġseek ĊĠĠĠĠĠĠĠ Ġm Gesture Type Ġ= ĠGest ure Type . Double Tap Gesture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisable Gest ures () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Gesture Type Ġ= ĠGest ure Type . No Gesture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate View Fade ( view : ĠView , Ġalpha : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Visibility Ġ= Ġif Ġ( alpha Ġ> Ġ 0 ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġview . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( alpha . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= Ġview Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Show Toolbar Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Show Toolbar Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġhide Toolbar With Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Initial Position ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Initial Position Ġ= Ġpos ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Surface Available Ġ|| Ġm Is Prepared ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġm Source ?. let Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Controls () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Pre paring ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set Surface ( m Surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . scheme Ġ== Ġ" http " Ġ|| Ġsource . scheme Ġ== Ġ" https ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Loading Ġweb ĠURI : Ġ$ source ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set DataSource ( context , Ġsource , Ġheaders ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Loading Ġlocal ĠURI : Ġ$ source ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set DataSource ( context , Ġsource , Ġheaders ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. prepare Async () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Controls Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Seek er . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . isEnabled Ġ= Ġenabled ĊĊĠĠĠĠĠĠĠ Ġval Ġdisabled Alpha Ġ= Ġ. 4 f ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . alpha Ġ= Ġif Ġ( enabled ) Ġ 1 f Ġelse Ġdisabled Alpha ĊĊĠĠĠĠĠĠĠ Ġm Click Frame . isEnabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Toggle Controls ( this , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Controls Disabled Ġ|| Ġis Controls Shown ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġm Controls Frame . animate (). cancel () ĊĠĠĠĠĠĠĠ Ġm Controls Frame . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Controls Frame . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Controls Frame . animate (). alpha ( 1 f ). translation Y ( 0 f ). set Listener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()). start () ĊĊĠĠĠĠĠĠĠ Ġval Ġsub View Parent Ġ= Ġm Sub View . parent Ġas ĠView ĊĠĠĠĠĠĠĠ Ġsub View Parent . animate (). cancel () ĊĠĠĠĠĠĠĠ Ġsub View Parent . translation Y Ġ= Ġm Controls Frame . height . toFloat () ĊĠĠĠĠĠĠĠ Ġsub View Parent . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Bottom ProgressBar Visibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . animate (). cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . animate (). alpha ( 0 f ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Show Toolbar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . animate (). cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . animate (). alpha ( 1 f ). set Listener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Toggle Controls ( this , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Controls Disabled Ġ|| Ġ! is Controls Shown ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġm Controls Frame . let Ġ{ Ġcontrols Frame Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Frame . animate (). cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Frame . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Frame . translation Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Frame . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Frame . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( controls Frame . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Controls Frame . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub View Parent Ġ= Ġm Sub View . parent Ġas ĠView ĊĠĠĠĠĠĠĠ Ġsub View Parent . animate (). cancel () ĊĠĠĠĠĠĠĠ Ġsub View Parent . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( m Controls Frame . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub View Parent . translation Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Bottom ProgressBar Visibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animate (). cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animate (). alpha ( 1 f ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhide Toolbar With Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Toolbar With Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Toolbar Frame . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . animate (). cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . animate (). alpha ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Frame . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Check Result ĊĠĠĠ Ġoverride Ġfun Ġis Controls Shown (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! m Controls Disabled Ġ&& Ġm Controls Frame . alpha Ġ> Ġ. 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Controls Disabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( is Controls Shown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Controls () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hide Controls Duration Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( hide Controls Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. post Delayed ( hide Controls Runnable , Ġhide Controls Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Controls () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Bottom ProgressBar Visibility ( is Showing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Bottom ProgressBar Visibility Ġ= Ġis Showing ĊĠĠĠĠĠĠĠ Ġif Ġ( is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenable Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Controls Disabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Click Frame . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Click Frame . setOn Touch Listener ( click Frame Swipe Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisable Controls () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Controls Disabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Controls Frame . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġm Toolbar Frame . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġm Click Frame . setOn Touch Listener ( null ) ĊĠĠĠĠĠĠĠ Ġm Click Frame . is Clickable Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Prepared (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player Ġ!= Ġnull Ġ&& Ġm Is Prepared ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Playing (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player ?. is Playing Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetCurrent Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player ?. current Position Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Duration (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Player ?. duration Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player ?. start () ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Started ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Handler Ġ== Ġnull ) Ġm Handler Ġ= ĠHandler () ĊĊĠĠĠĠĠĠĠ Ġm Handler ?. post ( m Update Counters ) ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( m Pause Drawable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġseek To ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. seek To ( pos . to Long (), ĠMedia Player . SEEK _ CLOSE ST ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. seek To ( pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Volume (@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġleft Volume : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġright Volume : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull Ġ|| Ġ! m Is Prepared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcannot Ġuse Ġset Volume ( float , Ġfloat ) Ġuntil Ġthe Ġplayer Ġis Ġprepared .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Player ?. set Volume ( left Volume , Ġright Volume ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Playing ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Paused ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( hide Controls Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( m Update Counters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( m Play Drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( hide Controls Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( m Update Counters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( m Pause Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Prepared Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Prepared Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Prepared Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ġm Player ?. release () Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Player Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( m Update Counters ) ĊĠĠĠĠĠĠĠ Ġm Handler Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġlog (" Released Ġplayer Ġand ĠHandler ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Capt ions ( source : ĠUri ?, Ġsub Mime : ĠCapt ions View . Sub Mime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Sub View . set Capt ions Source ( source , Ġsub Mime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Capt ions (@ Raw Res Ġres Id : ĠInt , Ġsub Mime : ĠCapt ions View . Sub Mime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Sub View . set Capt ions Source ( res Id , Ġsub Mime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Capt ions () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Capt ions ( null , ĠCapt ions View . Sub Mime . SUB R IP ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Toolbar (): ĠToolbar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Toolbar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface Texture : ĠSurface Texture , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Surface Ġtexture Ġavailable : Ġ% dx % d ", Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Initial Texture Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġm Initial Texture Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġm Surface Available Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Surface Ġ= ĠSurface ( surface Texture ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Prepared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Surface Ġtexture Ġavailable Ġand Ġmedia Ġplayer Ġis Ġprepared ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set Surface ( m Surface ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface Texture : ĠSurface Texture , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Surface Ġtexture Ġchanged : Ġ% dx % d ", Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ Ġadjust AspectRatio ( width , Ġheight , Ġit . video Width , Ġit . video Height ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface Texture : ĠSurface Texture ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Surface Ġtexture Ġdestroyed ") ĊĠĠĠĠĠĠĠ Ġm Surface Available Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Surface Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface Texture : ĠSurface Texture ) Ġ{} ĊĊĠĠĠ Ġ// ĠMedia Ġplayer Ġlisteners ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . J EL LY _ BE AN ) ĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( media Player : ĠMedia Player ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" on Prepared () ") ĊĠĠĠĠĠĠĠ Ġm ProgressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġshow Controls () ĊĠĠĠĠĠĠĠ Ġm Is Prepared Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Prepared ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Label Position . text Ġ= ĠUtil . get Duration String ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġm Label Duration . text Ġ= ĠUtil . get Duration String ( media Player . duration . to Long (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġm Seek er . progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Seek er . max Ġ= Ġmedia Player . duration ĊĠĠĠĠĠĠĠ Ġset Controls Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Auto Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Controls Disabled Ġ&& Ġm Hide Controls On Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. post Delayed ( hide Controls Runnable , Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Initial Position Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( m Initial Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Initial Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHack Ġto Ġshow Ġfirst Ġframe , Ġis Ġthere Ġanother Ġway ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Buffer ing Update ( media Player : ĠMedia Player , Ġpercent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Buffer ing : Ġ% d %% ", Ġpercent ) ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Buffer ing ( percent ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( percent Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Seek er . secondary Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . secondary Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġpercent Ġ/ Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecondary Progress Ġ= Ġ( m Seek er . max Ġ* Ġpercentage ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Seek er . secondary Progress Ġ= Ġsecondary Progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . secondary Progress Ġ= Ġsecondary Progress ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completion ( media Player : ĠMedia Player ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" on Completion () ") ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( m Restart Drawable ) ĊĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( m Update Counters ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Progress Ġ= Ġm Seek er . max ĊĊĠĠĠĠĠĠĠ Ġm Seek er . progress Ġ= Ġcurrent Progress ĊĠĠĠĠĠĠĠ Ġm Bottom ProgressBar . progress Ġ= Ġcurrent Progress ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Loop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Controls () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Callback ?. on Completion ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Size Changed ( media Player : ĠMedia Player , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Video Ġsize Ġchanged : Ġ% dx % d ", Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġadjust AspectRatio ( m Initial Texture Width , Ġm Initial Texture Height , Ġwidth , Ġheight ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( media Player : ĠMedia Player , Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( what Ġ== Ġ- 3 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠError Ġcode Ġ- 3 8 Ġhappens Ġon Ġsome ĠSamsung Ġdevices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġignore Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġerror Msg Ġ= Ġ" Pre paration / playback Ġerror Ġ($ what ): Ġ" ĊĠĠĠĠĠĠĠ Ġerror Msg Ġ+= Ġwhen Ġ( what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ IO Ġ-> Ġ" I / O Ġerror " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ MAL FOR MED Ġ-> Ġ" Malformed " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ NOT _ VALID _ FOR _ PROGRESS IVE _ PLAY BACK Ġ-> Ġ" Not Ġvalid Ġfor Ġprogress ive Ġplayback " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ SERVER _ DI ED Ġ-> Ġ" Server Ġdi ed " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ TIME D _ OUT Ġ-> Ġ" Timed Ġout " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . MEDIA _ ERROR _ UNSUPPORTED Ġ-> Ġ" Unsupported " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Unknown Ġerror " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow Error ( Exception ( error Msg )) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠView Ġevents ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġkeep Screen On Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġm Handler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġm Player Ġ= ĠMedia Player () ĊĠĠĠĠĠĠĠ Ġm Player ?. setOn Prepared Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Player ?. setOn Buffer ing Update Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Player ?. setOn Completion Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Player ?. setOn Video Size Changed Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Player ?. setOn Error Listener ( this ) ĊĠĠĠĠĠĠĠ Ġif ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set Audio Attributes ( Audio Attributes . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage ( Audio Attributes . USAGE _ MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType ( Audio Attributes . CONTENT _ TYPE _ MOV IE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Legacy Stream Type ( Audio Manager . STREAM _ M US IC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player ?. set Audio Stream Type ( Audio Manager . STREAM _ M US IC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġam Ġ= Ġcontext . getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ĊĊĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġand Ġadd ĠTexture View Ġfor Ġrendering ĊĠĠĠĠĠĠĠ Ġval Ġli Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġm Texture Frame Ġ= Ġli . inflate ( R . layout . b vp _ include _ surface , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġadd View ( m Texture Frame ) ĊĊĠĠĠĠĠĠĠ Ġm Texture View Ġ= Ġm Texture Frame . findViewById ( R . id . texture view ) ĊĠĠĠĠĠĠĠ Ġm Texture View . surface Texture Listener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġview Forward Ġ= Ġm Texture Frame . findViewById ( R . id . view _ forward ) ĊĠĠĠĠĠĠĠ Ġview Backward Ġ= Ġm Texture Frame . findViewById ( R . id . view _ backward ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġand Ġadd Ġprogress ĊĠĠĠĠĠĠĠ Ġm Progress Frame Ġ= Ġli . inflate ( R . layout . b vp _ include _ progress , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġm ProgressBar Ġ= Ġm Progress Frame . findViewById ( R . id . material _ progress _ bar ) ĊĠĠĠĠĠĠĠ Ġm Bottom ProgressBar Ġ= Ġm Progress Frame . findViewById ( R . id . progress Bar Bottom ) ĊĊĠĠĠĠĠĠĠ Ġm Position TextView Ġ= Ġm Progress Frame . findViewById ( R . id . position _ text view ) ĊĠĠĠĠĠĠĠ Ġm Position TextView . set Shadow Layer ( 3 f , Ġ 3 f , Ġ 3 f , ĠColor . BLACK ) ĊĠĠĠĠĠĠĠ Ġadd View ( m Progress Frame ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġand Ġadd Ġclick Ġframe Ġ( used Ġto Ġtoggle Ġcontrols ) ĊĠĠĠĠĠĠĠ Ġm Click Frame Ġ= ĠFrame Layout ( context ) ĊĊĠĠĠĠĠĠĠ Ġ( m Click Frame Ġas ĠFrame Layout ). foreground Ġ= ĠUtil . resolve Drawable ( context , ĠR . attr . selectable Item Background ) ĊĠĠĠĠĠĠĠ Ġadd View ( m Click Frame , ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġcontrols ĊĠĠĠĠĠĠĠ Ġm Controls Frame Ġ= Ġli . inflate ( R . layout . b vp _ include _ controls , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġm Controls Lp Ġ= ĠRelative Layout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġm Controls Lp . add Rule ( Relative Layout . ALIGN _ PARENT _ BOTTOM ) ĊĠĠĠĠĠĠĠ Ġadd View ( m Controls Frame , Ġm Controls Lp ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġtop bar ĊĠĠĠĠĠĠĠ Ġm Toolbar Frame Ġ= Ġli . inflate ( R . layout . b vp _ include _ top bar , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġm Toolbar Ġ= Ġm Toolbar Frame . findViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġm Toolbar . title Ġ= Ġm Title ĊĠĠĠĠĠĠĠ Ġm Toolbar Frame . visibility Ġ= Ġif Ġ( m Show Toolbar ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġadd View ( m Toolbar Frame ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġsub titles ĊĠĠĠĠĠĠĠ Ġval Ġm Sub titles Frame Ġ= Ġli . inflate ( R . layout . b vp _ include _ subtitle , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġm Sub titles Lp Ġ= ĠRelative Layout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġm Sub titles Lp . add Rule ( Relative Layout . AB O VE , ĠR . id . b vp _ include _ rel ativ el ayout ) ĊĠĠĠĠĠĠĠ Ġm Sub titles Lp . align With Parent Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġm Sub View Ġ= Ġm Sub titles Frame . findViewById ( R . id . subs _ box ) ĊĠĠĠĠĠĠĠ Ġm Player ?. let { Ġm Sub View . set Player ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Sub View . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġm Sub View Text Size . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Sub View . setTextColor ( m Sub View TextColor ) ĊĊĠĠĠĠĠĠĠ Ġadd View ( m Sub titles Frame , Ġm Sub titles Lp ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġcontrols ĊĠĠĠĠĠĠĠ Ġm Seek er Ġ= Ġm Controls Frame . findViewById ( R . id . see ker ) ĊĠĠĠĠĠĠĠ Ġm Seek er . setOn Seek Bar ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġm Label Position Ġ= Ġm Controls Frame . findViewById ( R . id . position ) ĊĠĠĠĠĠĠĠ Ġm Label Position . text Ġ= ĠUtil . get Duration String ( 0 , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġm Label Duration Ġ= Ġm Controls Frame . findViewById ( R . id . duration ) ĊĠĠĠĠĠĠĠ Ġm Label Duration . text Ġ= ĠUtil . get Duration String ( 0 , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġm Label Duration . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġm Btn Play Pause Ġ= Ġm Controls Frame . findViewById ( R . id . btn Play Pause ) ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġm Btn Play Pause . setImage Drawable ( m Play Drawable ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Controls Disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Controls () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Controls () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Bottom ProgressBar Visibility ( m Bottom ProgressBar Visibility ) ĊĠĠĠĠĠĠĠ Ġset Controls Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġprepare () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view . id Ġ== ĠR . id . btn Play Pause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Player ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Hide Controls On Play Ġ&& Ġ! m Controls Disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. post Delayed ( hide Controls Runnable , Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view . id Ġ== ĠR . id . duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Show Total Duration Ġ= Ġ! m Show Total Duration ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Position TextView . text Ġ= ĠUtil . get Duration String ( progress . to Long (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Was Playing Ġ= Ġis Playing () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Was Playing ) Ġm Player ?. pause () Ġ// Ġkeeps Ġthe Ġtime Ġupdater Ġrunning , Ġun like Ġpause () ĊĠĠĠĠĠĠĠ Ġm Position TextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Was Playing ) Ġm Player ?. start () ĊĠĠĠĠĠĠĠ Ġm Position TextView . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġlog (" Attached Ġto Ġwindow ") ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" m Player Ġnot Ġnull Ġon Ġattach ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġlog (" Detached Ġfrom Ġwindow ") ĊĠĠĠĠĠĠĠ Ġrelease () ĊĊĠĠĠĠĠĠĠ Ġm Handler ?. remove Callbacks ( m Update Counters ) ĊĠĠĠĠĠĠĠ Ġm Handler Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust AspectRatio ( view Width : ĠInt , Ġview Height : ĠInt , Ġvideo Width : ĠInt , Ġvideo Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaspect Ratio Ġ= Ġvideo Height . toDouble () Ġ/ Ġvideo Width ĊĠĠĠĠĠĠĠ Ġval Ġnew Width : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġnew Height : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Height Ġ> Ġ( view Width Ġ* Ġaspect Ratio ). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlimited Ġby Ġnarrow Ġwidth ; Ġrestrict Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Width Ġ= Ġview Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height Ġ= Ġ( view Width Ġ* Ġaspect Ratio ). toInt () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlimited Ġby Ġshort Ġheight ; Ġrestrict Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Width Ġ= Ġ( view Height Ġ/ Ġaspect Ratio ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height Ġ= Ġview Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġx off Ġ= Ġ( view Width Ġ- Ġnew Width ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġy off Ġ= Ġ( view Height Ġ- Ġnew Height ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġtx form Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġm Texture View . get Transform ( tx form ) ĊĠĠĠĠĠĠĠ Ġtx form . set Scale ( new Width . toFloat () Ġ/ Ġview Width , Ġnew Height . toFloat () Ġ/ Ġview Height ) ĊĠĠĠĠĠĠĠ Ġtx form . post Translate ( x off . toFloat (), Ġy off . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Texture View . set Transform ( tx form ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġthrow Error ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. onError ( this , Ġe ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Loop ( loop : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Loop Ġ= Ġloop ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠButton Type Ġ{ ĊĠĠĠĠĠĠĠ ĠPlay Button , ĠPause Button , ĠRestart Button ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠGest ure Type Ġ{ ĊĠĠĠĠĠĠĠ ĠNo Gesture , ĠSw ipe Gesture , ĠDouble Tap Gesture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB ET TER _ VIDEO _ PLAYER _ BR IGHT NESS Ġ= Ġ" B ET TER _ VIDEO _ PLAYER _ BR IGHT NESS " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUPDATE _ INTERVAL Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠUtilities ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġlog ( message : ĠString , Ġvar arg Ġargs : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" M Video Player ", ĠString . format ( message , Ġ* args )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ