package Ġcom . dan hd ue exo ict if . android generic adapter . ui . widgets Ċ Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . media . MediaPlayer . On Completion Listener Ċ import Ġandroid . media . MediaPlayer . On Prepared Listener Ċ import Ġandroid . view . Surface View Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . IN VISIBLE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Video View Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . utils . Constants Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġvideo Ġenabled ĠWeb Chrome Client . Ċ Ġ* Ġ@ param Ġactivity Non Video View ĠA ĠView Ġin Ġthe Ġactivity 's Ġlayout Ġthat Ġcontains Ġevery Ġother Ġview Ġthat Ġshould Ġbe Ġhidden Ġwhen Ġthe Ġvideo Ġgoes Ġfull - screen . Ċ Ġ* Ġ@ param Ġactivity Video View ĠA ĠViewGroup Ġin Ġthe Ġactivity 's Ġlayout Ġthat Ġwill Ġdisplay Ġthe Ġvideo . ĠTypically Ġyou Ġwould Ġlike Ġthis Ġto Ġfill Ġthe Ġwhole Ġlayout . Ċ Ġ* Ġ@ param Ġloading View ĠA ĠView Ġto Ġbe Ġshown Ġwhile Ġthe Ġvideo Ġis Ġloading Ġ( typ ically Ġonly Ġused Ġin ĠAPI Ġlevel Ġ< 1 1 ). ĠMust Ġbe Ġalready Ġinfl ated Ġand Ġnot Ġattached Ġto Ġa Ġparent Ġview . Ċ Ġ* Ġ@ param ĠwebView ĠThe Ġowner ĠVideo Enabled WebView . ĠPass ing Ġit Ġwill Ġenable Ġthe ĠVideo Enabled Web Chrome Client Ġto Ġdetect Ġthe ĠHTML 5 Ġvideo Ġended Ġevent Ġand Ġexit Ġfull - screen . Ċ Ġ* ĠNote : ĠThe Ġweb Ġpage Ġmust Ġonly Ġcontain Ġone Ġvideo Ġtag Ġin Ġorder Ġfor Ġthe ĠHTML 5 Ġvideo Ġended Ġevent Ġto Ġwork . ĠThis Ġcould Ġbe Ġimproved Ġif Ġneeded Ġ( see ĠJavascript Ġcode ). Ċ Ġ*/ Ċ open Ġclass ĠVideo Enable Web Chrome Client ( ĊĠĠĠ Ġvar Ġactivity Non Video View : ĠView ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġactivity Video View : ĠViewGroup ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġloading View : ĠView ? Ġ= Ġnull , ĊĠĠĠ Ġvar ĠwebView : ĠAdvanced WebView ? Ġ= Ġnull Ċ ) Ġ: ĠWeb Chrome Client (), ĠOn Prepared Listener , ĊĠĠĠ ĠOn Completion Listener , ĠMedia Player . OnError Listener Ġ{ ĊĊĠĠĠ Ġinterface ĠToggle d Fullscreen Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġtoggle d Fullscreen ( fullscreen : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġif Ġthe Ġvideo Ġis Ġbeing Ġdisplayed Ġusing Ġa Ġcustom Ġview Ġ( typ ically Ġfull - screen ) ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġit Ġthe Ġvideo Ġis Ġbeing Ġdisplayed Ġusing Ġa Ġcustom Ġview Ġ( typ ically Ġfull - screen ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Video Fullscreen Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġvideo View Container : ĠFrame Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvideo View Callback : ĠCustom View Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtoggle d Fullscreen Callback : ĠToggle d Fullscreen Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġa Ġcallback Ġthat Ġwill Ġbe Ġfired Ġwhen Ġthe Ġvideo Ġstarts Ġor Ġfinishes Ġdisplaying Ġusing Ġa Ġcustom Ġview Ġ( typ ically Ġfull - screen ) ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠA ĠVideo Enabled Web Chrome Client . Toggle d Fullscreen Callback Ġcallback ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset On Toggle d Fullscreen ( callback : ĠToggle d Fullscreen Callback ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle d Fullscreen Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Show Custom View ( view : ĠView ?, Ġcallback : ĠCustom View Callback ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠFrame Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġvideo Ġwants Ġto Ġbe Ġshown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfocused Child : ĠView Ġ= Ġview . focused Child ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġvideo Ġrelated Ġvariables ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Video Fullscreen Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Container Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHide Ġthe Ġnon - video Ġview , Ġadd Ġthe Ġvideo Ġview , Ġand Ġshow Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Non Video View ?. visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Video View ?. addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Video View ?. visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( focused Child Ġis ĠVideo View ) Ġ{ Ġ// Ġandroid . widget . Video View Ġ( typ ically ĠAPI Ġlevel Ġ< 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo View Ġ= Ġfocused Child Ġas ĠVideo View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġall Ġthe Ġrequired Ġevents ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . setOn Prepared Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . setOn Completion Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . setOn Error Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOther Ġclasses , Ġincluding : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- Ġandroid . webkit . HTML 5 Video FullScreen $ Video Surface View , Ġwhich Ġinherits Ġfrom Ġandroid . view . Surface View Ġ( typ ically ĠAPI Ġlevel Ġ 1 1 - 1 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- Ġandroid . webkit . HTML 5 Video FullScreen $ Video Texture View , Ġwhich Ġinherits Ġfrom Ġandroid . view . Texture View Ġ( typ ically ĠAPI Ġlevel Ġ 1 1 - 1 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- Ġcom . android . org . chromium . content . browser . Content Video View $ Video Surface View , Ġwhich Ġinherits Ġfrom Ġandroid . view . Surface View Ġ( typ ically ĠAPI Ġlevel Ġ 1 9 +) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle ĠHTML 5 Ġvideo Ġended Ġevent Ġonly Ġif Ġthe Ġclass Ġis Ġa ĠSurface View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTest Ġcase : ĠTexture View Ġof ĠS ony ĠX per ia ĠT ĠAPI Ġlevel Ġ 1 6 Ġdoesn 't Ġwork Ġfullscreen Ġwhen Ġloading Ġthe Ġjavascript Ġbelow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjs Is Enable Ġ= ĠwebView ?. settings ?. java Script Enabled Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( web View Ġ!= Ġnull Ġ&& Ġjs Is Enable Ġ&& Ġfocused Child Ġis ĠSurface View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġjavascript Ġcode Ġthat Ġdetect s Ġthe Ġvideo Ġend Ġand Ġnot ifies Ġthe ĠJavascript Ġinterface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjs Ġ= Ġ" javascript :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" var Ġ_ y tr p _ html 5 _ video _ last ;" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" var Ġ_ y tr p _ html 5 _ video Ġ= Ġdocument . getElementsByTagName (' video ')[ 0 ]; " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" if Ġ(_ y tr p _ html 5 _ video Ġ!= Ġundefined Ġ&& Ġ_ y tr p _ html 5 _ video Ġ!= Ġ_ y tr p _ html 5 _ video _ last ) Ġ{" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ"_ y tr p _ html 5 _ video _ last Ġ= Ġ_ y tr p _ html 5 _ video ;" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" function Ġ_ y tr p _ html 5 _ video _ ended () Ġ{" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotify Ġvideo Ġis Ġended Ġto Ġthe ĠAdvanced WebView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMust Ġmatch ĠJavascript Ġinterface Ġname Ġand Ġmethod Ġof ĠAdvanced WebView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ"${ Constants . WEB _ VIEW _ J AV AS CRIPT _ INTERFACE _ NAME }. notify Video End (); " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ"_ y tr p _ html 5 _ video . addEventListener (' ended ', Ġ_ y tr p _ html 5 _ video _ ended );" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġ+= Ġ" }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView ?. load Url ( js ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġfull - screen Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle d Fullscreen Callback ?. toggle d Fullscreen ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Show Custom View ( ĊĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠ Ġrequested Orientation : ĠInt , ĊĠĠĠĠĠĠĠ Ġcallback : ĠCustom View Callback ? ĊĠĠĠ Ġ) Ġ// ĠAvailable Ġin ĠAPI Ġlevel Ġ 1 4 +, Ġdeprecated Ġin ĠAPI Ġlevel Ġ 1 8 + ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġon Show Custom View ( view , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Hide Custom View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmethod Ġshould Ġbe Ġmanually Ġcalled Ġon Ġvideo Ġend Ġin Ġall Ġcases Ġbecause Ġit 's Ġnot Ġalways Ġcalled Ġautomatically . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmethod Ġmust Ġbe Ġmanually Ġcalled Ġon Ġback Ġkey Ġpress Ġ( from Ġthis Ġclass ' Ġon Back Pressed () Ġmethod ). ĊĠĠĠĠĠĠĠ Ġif Ġ( is Video Fullscreen ) Ġ{ Ġ// ĠHide Ġthe Ġvideo Ġview , Ġremove Ġit , Ġand Ġshow Ġthe Ġnon - video Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Video View ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Video View ?. remove View ( video View Container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Non Video View ?. visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall Ġback Ġ( only Ġin ĠAPI Ġlevel Ġ< 1 9 , Ġbecause Ġin ĠAPI Ġlevel Ġ 1 9 + Ġwith Ġch romium Ġweb view Ġit Ġcrashes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontain Ch romium : ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Callback ?. java Class ?. name ?. contains (". chromium .") Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video View Callback Ġ!= Ġnull Ġ&& Ġ! contain Ch romium ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Callback ?. on Custom View Hidden () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġvideo Ġrelated Ġvariables ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Video Fullscreen Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Container Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġfull - screen Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle d Fullscreen Callback ?. toggle d Fullscreen ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Video Loading Progress View (): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠVideo Ġwill Ġstart Ġloading ĊĠĠĠĠĠĠĠ Ġreturn Ġloading View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . get Video Loading Progress View () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( mp : ĠMedia Player ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠVideo Ġwill Ġstart Ġplaying , Ġonly Ġcalled Ġin Ġthe Ġcase Ġof Ġandroid . widget . Video View Ġ( typ ically ĠAPI Ġlevel Ġ< 1 1 ) ĊĠĠĠĠĠĠĠ Ġloading View ?. visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completion ( mp : ĠMedia Player ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠVideo Ġfinished Ġplaying , Ġonly Ġcalled Ġin Ġthe Ġcase Ġof Ġandroid . widget . Video View Ġ( typ ically ĠAPI Ġlevel Ġ< 1 1 ) ĊĠĠĠĠĠĠĠ Ġon Hide Custom View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( mp : ĠMedia Player , Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠError Ġwhile Ġplaying Ġvideo , Ġonly Ġcalled Ġin Ġthe Ġcase Ġof Ġandroid . widget . Video View Ġ( typ ically ĠAPI Ġlevel Ġ< 1 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse Ġ// ĠBy Ġreturning Ġfalse , Ġon Completion () Ġwill Ġbe Ġcalled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot ifies Ġthe Ġclass Ġthat Ġthe Ġback Ġkey Ġhas Ġbeen Ġpressed Ġby Ġthe Ġuser . ĊĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġcalled Ġfrom Ġthe ĠActivity 's Ġon Back Pressed (), Ġand Ġif Ġit Ġreturns Ġfalse , Ġthe Ġactivity Ġitself Ġshould Ġhandle Ġit . ĠOtherwise Ġdon 't Ġdo Ġanything . ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġtrue Ġif Ġthe Ġevent Ġwas Ġhandled , Ġand Ġfalse Ġif Ġwas Ġnot Ġ( video Ġview Ġis Ġnot Ġvisible ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Video Fullscreen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hide Custom View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ