package Ġp ext y . floating app . window čĊč Ċ import Ġandroid . content . Context č Ċ import Ġandroid . media . Media Metadata Retriever č Ċ import Ġandroid . media . MediaPlayer č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . view . Gravity č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . LinearLayout č Ċ import Ġandroid . widget . Video View č Ċ import Ġp ext y . utils . Utils čĊčĊč Ċ open Ġclass ĠVideo Window Ġ: ĠDynamic Window Ġ{ čĊĠĠĠ Ġprotected Ġconstructor ( čĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , čĊĠĠĠĠĠĠĠ Ġoriginal : ĠVideo Window čĊĠĠĠ Ġ) Ġ: Ġsuper Ġ( context , Ġoriginal ) Ġ{ čĊĠĠĠĠĠĠĠ Ġset Content ( video View ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġconstructor ( context : ĠContext , Ġ__ flags : ĠInt Ġ= Ġ 0 ) Ġ: Ġsuper ( čĊĠĠĠĠĠĠĠ Ġcontext , čĊĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠ Ġ" Video Ġplayer Ġwindow ", čĊĠĠĠĠĠĠĠ ĠFLAG _ ONLY _ CONTENT Ġor ĠFLAG _ RE SIZ ABLE Ġor ĠFLAG _ DR AGG ABLE _ BY _ CONTENT Ġor ĠFLAG _ NOT _ RE SIZ ABLE _ BY _ MOT ION Ġor Ġ__ flags čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġset Content ( video View ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFLAG _ INF IN ITE _ VIDEO _ LOOP Ġ= Ġ 1 Ġshl Ġ 1 5 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġvar Ġmedia Metadata Retriever : ĠMedia Metadata Retriever Ġ= ĠMedia Metadata Retriever () čĊĠĠĠ Ġprivate Ġvar Ġmedia Player : ĠMedia Player ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġ_ video Current Point Ġ= Ġ 0 čĊĠĠĠ Ġprivate Ġvar Ġvideo Start Point Ġ= Ġ 0 čĊĠĠĠ Ġprivate Ġvar Ġ_ is Video Did Not Play Ġ= Ġtrue čĊĠĠĠ Ġprivate Ġvar Ġ_ is Have Video Ġ= Ġfalse čĊčĊĠĠĠ Ġprivate Ġval Ġvideo View Ġ= ĠVideo View ( this . context ). apply Ġ{ čĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLinearLayout . LayoutParams ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , čĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT čĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġset On Prepared Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġset On Completion Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( have Flags ( FLAG _ INF IN ITE _ VIDEO _ LOOP )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Current Point Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġvideo Width : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( media Metadata Retriever . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ VIDEO _ WIDTH ) Ġ!= Ġnull ) Ġmedia Metadata Retriever . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ VIDEO _ WIDTH ) !!. toInt () Ġelse Ġ 0 čĊčĊĠĠĠ Ġval Ġvideo Height : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( media Metadata Retriever . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ VIDEO _ HEIGHT ) Ġ!= Ġnull ) Ġmedia Metadata Retriever . extract Metadata ( Media Metadata Retriever . METADATA _ KEY _ VIDEO _ HEIGHT ) !!. toInt () Ġelse Ġ 0 čĊčĊĠĠĠ Ġval Ġvideo Duration : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġvideo View . duration čĊčĊĠĠĠ Ġvar Ġvideo Current Point : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ video Current Point čĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Clone ) Ġprintln (" Have Video : Ġ${ is Have Video () }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Player Ġ!= Ġnull Ġ&& Ġ! is Video Did Not Play () Ġ&& Ġis Have Video ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ video Current Point Ġ= ĠUtils . by _ interval ( value , Ġ 0 , Ġvideo Duration ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. seek To (_ video Current Point . to Long (), ĠMedia Player . SEEK _ CLOSE ST ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġvideo Start Point Ġ= Ġvalue čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġis Video Did Not Play (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġ_ is Video Did Not Play čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġis Have Video (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġ_ is Have Video čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġis Playing (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġvideo View . is Playing čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġstart () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( is Have Video ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . start () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Video Did Not Play ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Current Point Ġ= Ġvideo Start Point čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Start Point Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Video Did Not Play Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġpause () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( is Have Video ()) Ġvideo View . pause () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġstop () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( is Have Video ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ video Current Point Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . stop Playback () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Video ( uri : ĠUri ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ_ is Have Video Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġvideo View . set Video URI ( uri ) čĊĠĠĠĠĠĠĠ Ġmedia Metadata Retriever . set DataSource ( context , Ġuri ) čĊčĊĠĠĠĠĠĠĠ Ġdynamic Window Ġas ĠVideo Window čĊĠĠĠĠĠĠĠ Ġif Ġ(! is Clone ) Ġdynamic Window . set Video ( uri ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( is Exists ()) Ġstart () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Video ( resourceId : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġset Video ( Uri . parse (" android . resource ://${ context . packageName }/ $ resourceId ")) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Size By Video Ratio ( width Half : ĠInt Ġ= Ġ 2 , Ġheight Half : ĠInt Ġ= Ġ 4 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( video Width Ġ> Ġvideo Height ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent : ĠFloat Ġ= Ġvideo Height . toFloat () Ġ/ Ġvideo Width . toFloat () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiv Ġ= Ġif Ġ( Utils . get Screen Orientation ( context ) Ġ== ĠUtils . OR IENTATION _ LAND SC APE ) Ġheight Half Ġelse Ġwidth Half čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġdisplay Metrics . width Pixels Ġ/ Ġdiv čĊĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ( min Width . toFloat () Ġ* Ġpercent ). toInt () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent : ĠFloat Ġ= Ġvideo Width . toFloat () Ġ/ Ġvideo Height . toFloat () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiv Ġ= Ġif Ġ( Utils . get Screen Orientation ( context ) Ġ== ĠUtils . OR IENTATION _ POR TRA IT ) Ġheight Half Ġelse Ġwidth Half čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġdisplay Metrics . height Pixels Ġ/ Ġdiv čĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ( min Height . toFloat () Ġ* Ġpercent ). toInt () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġcreate Dynamic Window (): ĠVideo Window Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠVideo Window ( context , Ġthis ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġ_ open () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper ._ open () čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( is Exists () Ġ&& Ġ! is Playing ()) Ġstart () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġ_ close () Ġ{ čĊĠĠĠĠĠĠĠ Ġstop () čĊčĊĠĠĠĠĠĠĠ Ġsuper ._ close () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġ_ main Loop () Ġ{ čĊĠĠĠĠĠĠĠ Ġ_ video Current Point Ġ= Ġvideo View . current Position čĊčĊĠĠĠĠĠĠĠ Ġsuper ._ main Loop () čĊĠĠĠ Ġ} č Ċ }