/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 0 6 Ġ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 . orange . ess entials . ot b . ui . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view .* Ċ import Ġandroid . widget .* Ċ import Ġandroid . widget . Seek Bar . On Seek Bar ChangeListener Ċ import Ġcom . orange . ess entials . ot b . R Ċ import Ġcom . orange . ess entials . ot b . logger . Logger Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠA Ġview Ġcontaining Ġcontrols Ġfor Ġa ĠMedia Player . ĠTypically Ġcontains Ġthe Ċ Ġ* Ġbuttons Ġlike Ġ" Play / Pause ", Ġ" Rew ind ", Ġ" Fast ĠForward " Ġand Ġa Ġprogress Ċ Ġ* Ġslider . ĠIt Ġtakes Ġcare Ġof Ġsynchron izing Ġthe Ġcontrols Ġwith Ġthe Ġstate Ċ Ġ* Ġof Ġthe ĠMedia Player . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġway Ġto Ġuse Ġthis Ġclass Ġis Ġto Ġinstantiate Ġit Ġprogram atically . Ċ Ġ* ĠThe ĠMedia Controller Ġwill Ġcreate Ġa Ġdefault Ġset Ġof Ġcontrols Ċ Ġ* Ġand Ġput Ġthem Ġin Ġa Ġwindow Ġfloating Ġabove Ġyour Ġapplication . ĠSpecific ally , Ċ Ġ* Ġthe Ġcontrols Ġwill Ġfloat Ġabove Ġthe Ġview Ġspecified Ġwith Ġset Anchor View (). Ċ Ġ* ĠThe Ġwindow Ġwill Ġdis appear Ġif Ġleft Ġidle Ġfor Ġthree Ġseconds Ġand Ġre appear Ċ Ġ* Ġwhen Ġthe Ġuser Ġto uches Ġthe Ġanchor Ġview . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠFunctions Ġlike Ġshow () Ġand Ġhide () Ġhave Ġno Ġeffect Ġwhen ĠMedia Controller Ċ Ġ* Ġis Ġcreated Ġin Ġan Ġxml Ġlayout . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠMedia Controller Ġwill Ġhide Ġand Ċ Ġ* Ġshow Ġthe Ġbuttons Ġaccording Ġto Ġthese Ġrules : Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ ĠThe Ġ" previous " Ġand Ġ" next " Ġbuttons Ġare Ġhidden Ġuntil Ġset Prev Next Listeners () Ċ Ġ* Ġhas Ġbeen Ġcalled Ċ Ġ* Ġ Ġ* Ġ ĠThe Ġ" previous " Ġand Ġ" next " Ġbuttons Ġare Ġvisible Ġbut Ġdisabled Ġif Ċ Ġ* Ġset Prev Next Listeners () Ġwas Ġcalled Ġwith Ġnull Ġlisteners Ċ Ġ* Ġ Ġ* Ġ ĠThe Ġ" rewind " Ġand Ġ" fast forward " Ġbuttons Ġare Ġshown Ġunless Ġrequested Ċ Ġ* Ġotherwise Ġby Ġusing Ġthe ĠMedia Controller ( Context , Ġboolean ) Ġconstructor Ċ Ġ* Ġwith Ġthe Ġboolean Ġset Ġto Ġfalse Ċ Ġ* Ċ Ġ*/ Ċ class ĠVideo Controller View Ġ: ĠFrame Layout Ġ{ ĊĊĠĠĠ Ġinternal Ġvar Ġm Format Builder : ĠStringBuilder ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġm Formatter : ĠFormatter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Player : ĠMedia Player Control ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Anchor : ĠViewGroup ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Root : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Progress : ĠProgress Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm EndTime : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Time : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Showing : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġm Dragging : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Use Fast Forward : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm From Xml : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Listeners Set : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Next Listener : ĠView . OnClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Prev Listener : ĠView . OnClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Pause Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm F fwd Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Rew Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Next Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Prev Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠĠĠ Ġprivate ĠImage Button Ġm Fullscreen Button ; ĊĠĠĠ Ġprivate Ġval Ġm Handler Ġ= ĠMessage Handler ( this ) ĊĠĠĠ Ġprivate Ġval Ġm Pause Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Pause Resume () ĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/* private Ġval Ġm Fullscreen Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Toggle Fullscreen () ĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠ Ġ}*/ ĊĠĠĠ Ġ// ĠThere Ġare Ġtwo Ġscenarios Ġthat Ġcan Ġtrigger Ġthe Ġseek Ġbar Ġlistener Ġto Ġtrigger : ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠThe Ġfirst Ġis Ġthe Ġuser Ġusing Ġthe Ġtouch Ġpad Ġto Ġadjust Ġthe Ġposition Ġof Ġthe ĊĠĠĠ Ġ// Ġseek Ġbar 's Ġthumb . ĠIn Ġthis Ġcase ĠonStart Tracking Touch Ġis Ġcalled Ġfollowed Ġby ĊĠĠĠ Ġ// Ġa Ġnumber Ġof Ġon Progress Changed Ġnotifications , Ġcon clude d Ġby Ġon Stop Tracking Touch . ĊĠĠĠ Ġ// ĠWe 're Ġsetting Ġthe Ġfield Ġ" m Dragging " Ġto Ġtrue Ġfor Ġthe Ġduration Ġof Ġthe Ġdragging ĊĠĠĠ Ġ// Ġsession Ġto Ġavoid Ġjumps Ġin Ġthe Ġposition Ġin Ġcase Ġof Ġongoing Ġplayback . ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠThe Ġsecond Ġscenario Ġinvolves Ġthe Ġuser Ġoperating Ġthe Ġscroll Ġball , Ġin Ġthis ĊĠĠĠ Ġ// Ġcase Ġthere ĠW ON ' T ĠBE ĠonStart Tracking Touch / on Stop Tracking Touch Ġnotifications , ĊĠĠĠ Ġ// Ġwe Ġwill Ġsimply Ġapply Ġthe Ġupdated Ġposition Ġwithout Ġsus pending Ġregular Ġupdates . ĊĠĠĠ Ġprivate Ġval Ġm Seek Listener Ġ= Ġobject Ġ: ĠOn Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( bar : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( 3 6 0 0 0 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dragging Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBy Ġremoving Ġthese Ġpending Ġprogress Ġmessages Ġwe Ġmake Ġsure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġa ) Ġwe Ġwon 't Ġupdate Ġthe Ġprogress Ġwhile Ġthe Ġuser Ġadjust s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġseek bar Ġand Ġb ) Ġonce Ġthe Ġuser Ġis Ġdone Ġdragging Ġthe Ġthumb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġwill Ġpost Ġone Ġof Ġthese Ġmessages Ġto Ġthe Ġqueue Ġagain Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġensures Ġthat Ġthere Ġwill Ġbe Ġexactly Ġone Ġmessage Ġqueued Ġup . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . remove Messages ( SHOW _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( bar : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom user : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! from user ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġnot Ġinterested Ġin Ġprogram matically Ġgenerated Ġchanges Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġprogress Ġbar 's Ġposition . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġm Player !!. duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Position Ġ= Ġduration Ġ* Ġprogress Ġ/ Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player !!. seek To ( new Position . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Time Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Time !!. text Ġ= Ġstring For Time ( new Position . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( bar : ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthat Ġprogress Ġis Ġproperly Ġupdated Ġin Ġthe Ġfuture , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġcall Ġto Ġshow () Ġdoes Ġnot Ġguarantee Ġthis Ġbecause Ġit Ġis Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op Ġif Ġwe Ġare Ġalready Ġshowing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . send Empty Message ( SHOW _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Rew ind Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ OnClickListener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġm Player !!. current Position ĊĠĠĠĠĠĠĠ Ġpos Ġ-= Ġ 5 0 0 0 Ġ// Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġm Player !!. seek To ( pos ) ĊĠĠĠĠĠĠĠ Ġset Progress () ĊĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Fast Forward Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ OnClickListener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġm Player !!. current Position ĊĠĠĠĠĠĠĠ Ġpos Ġ+= Ġ 1 5 0 0 0 Ġ// Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġm Player !!. seek To ( pos ) ĊĠĠĠĠĠĠĠ Ġset Progress () ĊĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Root Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġm Use Fast Forward Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm From Xml Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠLogger . i ( TAG , ĠTAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġuse Fast Forward : ĠBoolean ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġm Use Fast Forward Ġ= Ġuse Fast Forward ĊĊĠĠĠĠĠĠĠ ĠLogger . i ( TAG , ĠTAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . i ( TAG , ĠTAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Controller View ( m Root Ġas ĠView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset MediaPlayer ( player : ĠMedia Player Control ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠĠĠĠĠ Ġ// Ġupdate FullScreen (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġview Ġthat Ġacts Ġas Ġthe Ġanchor Ġfor Ġthe Ġcontrol Ġview . ĊĠĠĠĠ Ġ* ĠThis Ġcan Ġfor Ġexample Ġbe Ġa ĠVideo View , Ġor Ġyour ĠActivity 's Ġmain Ġview . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġview ĠThe Ġview Ġto Ġwhich Ġto Ġanchor Ġthe Ġcontroller Ġwhen Ġit Ġis Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Anchor View ( view : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Anchor Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġval Ġframe Params Ġ= ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġremove All Views () ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġmake Controller View () ĊĠĠĠĠĠĠĠ Ġadd View ( v , Ġframe Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġthe Ġview Ġthat Ġholds Ġthe Ġwidgets Ġthat Ġcontrol Ġplayback . ĊĠĠĠĠ Ġ* ĠDerived Ġclasses Ġcan Ġoverride Ġthis Ġto Ġcreate Ġtheir Ġown . ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcontroller Ġview . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ hide ĠThis Ġdoesn 't Ġwork Ġas Ġadvert ised ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Controller View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= ĠmContext !!. getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġm Root Ġ= Ġinf late . inflate ( R . layout . ot b _ medi ac ont roller , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġinit Controller View ( m Root Ġas ĠView ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġm Root Ġas ĠView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Controller View ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Pause Button Ġ= Ġv . findViewById ( R . id . pause ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Pause Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. setOnClickListener ( m Pause Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġm Fullscreen Button Ġ= Ġ( Image Button ) Ġv . findViewById ( R . id . fullscreen ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( m Fullscreen Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġm Fullscreen Button . request Focus (); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġm Fullscreen Button . setOnClickListener ( m Fullscreen Listener ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm F fwd Button Ġ= Ġv . findViewById ( R . id . ff wd ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mF fwd Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm F fwd Button !!. setOnClickListener ( m Fast Forward Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m From Xml ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm F fwd Button !!. visibility Ġ= Ġif Ġ( m Use Fast Forward ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Rew Button Ġ= Ġv . findViewById ( R . id . rew ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Rew Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew Button !!. setOnClickListener ( m Rew ind Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m From Xml ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew Button !!. visibility Ġ= Ġif Ġ( m Use Fast Forward ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠBy Ġdefault Ġthese Ġare Ġhidden . ĠThey Ġwill Ġbe Ġenabled Ġwhen Ġset Prev Next Listeners () Ġis Ġcalled ĊĠĠĠĠĠĠĠ Ġm Next Button Ġ= Ġv . findViewById ( R . id . next ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Next Button Ġ!= Ġnull Ġ&& Ġ! m From Xml Ġ&& Ġ! m Listeners Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Next Button !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Prev Button Ġ= Ġv . findViewById ( R . id . prev ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Prev Button Ġ!= Ġnull Ġ&& Ġ! m From Xml Ġ&& Ġ! m Listeners Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Prev Button !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Progress Ġ= Ġv . findViewById < Seek Bar >( R . id . medi ac ont roller _ progress ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Progress Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Progress Ġis ĠSeek Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsee ker Ġ= Ġm Progress Ġas ĠSeek Bar ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsee ker !!. setOn Seek Bar ChangeListener ( m Seek Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. max Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm EndTime Ġ= Ġv . findViewById ( R . id . time ) ĊĠĠĠĠĠĠĠ ĠmCurrent Time Ġ= Ġv . findViewById ( R . id . time _ current ) ĊĠĠĠĠĠĠĠ Ġm Format Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġm Formatter Ġ= ĠFormatter ( m Format Builder , ĠLocale . getDefault ()) ĊĊĠĠĠĠĠĠĠ Ġinstall Prev Next Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDisable Ġpause Ġor Ġseek Ġbuttons Ġif Ġthe Ġstream Ġcannot Ġbe Ġpaused Ġor Ġseek ed . ĊĠĠĠĠ Ġ* ĠThis Ġrequires Ġthe Ġcontrol Ġinterface Ġto Ġbe Ġa ĠMedia Player Control Ext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdisable Unsupported Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pause Button Ġ!= Ġnull Ġ&& Ġ! m Player !!. can Pause ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Rew Button Ġ!= Ġnull Ġ&& Ġ! m Player !!. can Seek Backward ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mF fwd Button Ġ!= Ġnull Ġ&& Ġ! m Player !!. can Seek Forward ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm F fwd Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIn compatible Class Change Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġwere Ġgiven Ġan Ġold Ġversion Ġof Ġthe Ġinterface , Ġthat Ġdoesn 't Ġhave ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġcan Pause / can Seek XYZ Ġmethods . ĠThis Ġis ĠOK , Ġit Ġjust Ġmeans Ġwe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġthe Ġmedia Ġcan Ġbe Ġpaused Ġand Ġseek ed , Ġand Ġso Ġwe Ġdon 't Ġdisable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġbuttons . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġthe Ġcontroller Ġon Ġscreen . ĠIt Ġwill Ġgo Ġaway ĊĠĠĠĠ Ġ* Ġautomatically Ġafter Ġ' timeout ' Ġmilliseconds Ġof Ġin activity . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout ĠThe Ġtimeout Ġin Ġmilliseconds . ĠUse Ġ 0 Ġto Ġshow ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġcontroller Ġuntil Ġhide () Ġis Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġshow ( timeout : ĠInt Ġ= Ġs Default Timeout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Showing Ġ&& Ġm Anchor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pause Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Unsupported Buttons () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt lp Ġ= ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Anchor !!. addView ( this , Ġt lp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Showing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġupdate FullScreen (); ĊĠĠĠĠĠĠĠ Ġ// Ġcause Ġthe Ġprogress Ġbar Ġto Ġbe Ġupdated Ġeven Ġif Ġm Showing ĊĠĠĠĠĠĠĠ Ġ// Ġwas Ġalready Ġtrue . Ġ ĠThis Ġhappens , Ġfor Ġexample , Ġif Ġwe 're ĊĠĠĠĠĠĠĠ Ġ// Ġpaused Ġwith Ġthe Ġprogress Ġbar Ġshowing Ġthe Ġuser Ġhits Ġplay . ĊĠĠĠĠĠĠĠ Ġm Handler . send Empty Message ( SHOW _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġm Handler . obtain Message ( FA DE _ OUT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( timeout Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . remove Messages ( FA DE _ OUT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . sendMessage Delayed ( msg , Ġtimeout . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthe Ġcontroller Ġfrom Ġthe Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Anchor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Anchor !!. remove View ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . remove Messages ( SHOW _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . w (" Media Controller ", Ġ" already Ġremoved ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Showing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstring For Time ( time Ms : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtotal Seconds Ġ= Ġtime Ms Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġtotal Seconds Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġtotal Seconds Ġ/ Ġ 6 0 Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġtotal Seconds Ġ/ Ġ 3 6 0 0 ĊĊĠĠĠĠĠĠĠ Ġm Format Builder ?. set Length ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Formatter ?. format ("% d :% 0 2 d :% 0 2 d ", Ġhours , Ġminutes , Ġseconds ). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Formatter ?. format ("% 0 2 d :% 0 2 d ", Ġminutes , Ġseconds ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Progress (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull Ġ|| Ġm Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm Player !!. current Position ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġm Player !!. duration ĊĠĠĠĠĠĠĠ Ġif Ġ( m Progress Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuse Ġlong Ġto Ġavoid Ġoverflow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġ 1 0 0 0 L Ġ* Ġposition Ġ/ Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. progress Ġ= Ġpos . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġm Player !!. buffer Percentage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. secondary Progress Ġ= Ġpercent Ġ* Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m EndTime Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm EndTime !!. text Ġ= Ġstring For Time ( duration ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Current Time Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Time !!. text Ġ= Ġstring For Time ( position ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġpublic Ġvoid Ġupdate FullScreen () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( m Root Ġ== Ġnull Ġ|| Ġm Fullscreen Button Ġ== Ġnull Ġ|| Ġm Player Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( m Player . is FullScreen ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġm Fullscreen Button . setImage Resource ( R . drawable . ot b _ ic _ media _ fullscreen _ shrink ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġm Fullscreen Button . setImage Resource ( R . drawable . ot b _ ic _ media _ fullscreen _ stretch ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Track ball Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch KeyEvent ( event : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠkeyCode Ġ= Ġevent . keyCode ĊĠĠĠĠĠĠĠ Ġval Ġunique Down Ġ= Ġevent . repeat Count Ġ== Ġ 0 Ġ&& Ġevent . action Ġ== ĠKeyEvent . ACTION _ DOWN ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ HEAD SE TH O OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ MEDIA _ PLAY _ PAUSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ SPACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unique Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Pause Resume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Pause Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ MEDIA _ PLAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unique Down Ġ&& Ġ! m Player !!. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player !!. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ MEDIA _ STOP Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ MEDIA _ PAUSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unique Down Ġ&& Ġm Player !!. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Player !!. pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ DOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ UP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ VOLUME _ M UTE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġshow Ġthe Ġcontrols Ġfor Ġvolume Ġadjustment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch KeyEvent ( event ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ|| ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ MENU ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unique Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow ( s Default Timeout ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch KeyEvent ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Pause Play () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Root Ġ== Ġnull Ġ|| Ġm Pause Button Ġ== Ġnull Ġ|| Ġm Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Player !!. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. setImage Resource ( R . drawable . ot b _ ic _ media _ pause ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. setImage Resource ( R . drawable . ot b _ ic _ media _ play ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Pause Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Player !!. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player !!. pause () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Player !!. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Pause Play () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* private Ġfun Ġdo Toggle Fullscreen () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Player !!. toggle FullScreen () ĊĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Pause Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Pause Button !!. isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( mF fwd Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm F fwd Button !!. isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Rew Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rew Button !!. isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Next Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Next Button !!. isEnabled Ġ= Ġenabled Ġ&& Ġm Next Listener Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Prev Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Prev Button !!. isEnabled Ġ= Ġenabled Ġ&& Ġm Prev Listener Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Progress Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisable Unsupported Buttons () ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinstall Prev Next Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Next Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Next Button !!. setOnClickListener ( m Next Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Next Button !!. isEnabled Ġ= Ġm Next Listener Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Prev Button Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Prev Button !!. setOnClickListener ( m Prev Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Prev Button !!. isEnabled Ġ= Ġm Prev Listener Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Prev Next Listeners ( next : ĠView . OnClickListener , Ġprev : ĠView . OnClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Next Listener Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġm Prev Listener Ġ= Ġprev ĊĠĠĠĠĠĠĠ Ġm Listeners Set Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Prev Next Listeners () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Next Button Ġ!= Ġnull Ġ&& Ġ! m From Xml ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Next Button !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Prev Button Ġ!= Ġnull Ġ&& Ġ! m From Xml ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Prev Button !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMedia Player Control Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġstart () ĊĠĠĠĠĠĠĠ Ġfun Ġpause () ĊĠĠĠĠĠĠĠ Ġval Ġduration : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Position : ĠInt ĊĠĠĠĠĠĠĠ Ġfun Ġseek To ( pos : ĠInt ) ĊĠĠĠĠĠĠĠ Ġval Ġis Playing : ĠBoolean ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Percentage : ĠInt ĊĠĠĠĠĠĠĠ Ġfun Ġcan Pause (): ĠBoolean ĊĠĠĠĠĠĠĠ Ġfun Ġcan Seek Backward (): ĠBoolean ĊĠĠĠĠĠĠĠ Ġfun Ġcan Seek Forward (): ĠBoolean ĊĠĠĠĠĠĠĠ Ġval Ġis FullScreen : ĠBoolean ĊĠĠĠĠĠĠĠ Ġfun Ġtoggle FullScreen () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMessage Handler Ġinternal Ġconstructor ( view : ĠVideo Controller View ) Ġ: ĠHandler () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm View : ĠWeak Reference < Video Controller View > ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Ġ= ĠWeak Reference ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( me sg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġme sg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġm View . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull Ġ|| Ġview . m Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFA DE _ OUT Ġ-> Ġview . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSHOW _ PROGRESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ= Ġview . set Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view . m Dragging Ġ&& Ġview . is Showing Ġ&& Ġview . m Player !!. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġobtain Message ( SHOW _ PROGRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage Delayed ( msg , Ġ( 1 0 0 0 Ġ- Ġpos Ġ% Ġ 1 0 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Video Controller View " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġs Default Timeout Ġ= Ġ 3 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFA DE _ OUT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSHOW _ PROGRESS Ġ= Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ /** Ċ Ġ* ĠShow Ġthe Ġcontroller Ġon Ġscreen . ĠIt Ġwill Ġgo Ġaway Ċ Ġ* Ġautomatically Ġafter Ġ 3 Ġseconds Ġof Ġin activity . Ċ Ġ*/