package Ġcom . e agle . gallery . pro . activities Ċ Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . View Ċ import Ġandroid . view . Window Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroid . widget . Seek Bar Ċ import Ġcom . google . vr . sdk . widgets . video . Vr Video EventListener Ċ import Ġcom . google . vr . sdk . widgets . video . Vr Video View Ċ import Ġcom . e agle . commons . extensions .* Ċ import Ġcom . e agle . commons . helpers . PERMISSION _ WRITE _ STORAGE Ċ import Ġcom . e agle . gallery . pro . R Ċ import Ġcom . e agle . gallery . pro . extensions .* Ċ import Ġcom . e agle . gallery . pro . helpers . MIN _ SKIP _ LENGTH Ċ import Ġcom . e agle . gallery . pro . helpers . PATH Ċ import Ġkotlinx . android . synt hetic . main . activity _ pan orama _ video .* Ċ import Ġkotlinx . android . synt hetic . main . bottom _ video _ time _ holder .* Ċ import Ġjava . io . File Ċ Ċ open Ġclass ĠPan orama Video Activity Ġ: Ġcom . e agle . gallery . pro . activities . Simple Activity (), ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠ Ġprivate Ġval ĠCAR DB O ARD _ DISPLAY _ MODE Ġ= Ġ 3 ĊĊĠĠĠ Ġprivate Ġvar Ġm Is Fullscreen Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Explore Enabled Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Is Rendering Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Playing Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Drag ged Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Play On Ready Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Duration Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Curr Time Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Timer Handler Ġ= ĠHandler () ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Dynamic Theme Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrequest Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ pan orama _ video ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĊĠĠĠĠĠĠĠ Ġcheck Not ch Support () ĊĠĠĠĠĠĠĠ Ġhandle Permission ( PERMISSION _ WRITE _ STORAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Intent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . no _ storage _ permissions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġvr _ video _ view . resume Rendering () ĊĠĠĠĠĠĠĠ Ġm Is Rendering Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( config . black Background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Status bar Color ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= Ġresources . getColor ( R . color . circle _ black _ background ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġvr _ video _ view . pause Rendering () ĊĠĠĠĠĠĠĠ Ġm Is Rendering Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Rendering ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr _ video _ view . shutdown () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Changing Configurations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġintent . getString Extra ( PATH ) ĊĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . invalid _ image _ path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Buttons () ĊĠĠĠĠĠĠĠ Ġintent . remove Extra ( PATH ) ĊĊĠĠĠĠĠĠĠ Ġvideo _ curr _ time . setOnClickListener Ġ{ Ġskip ( false ) Ġ} ĊĠĠĠĠĠĠĠ Ġvideo _ duration . setOnClickListener Ġ{ Ġskip ( true ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠV r Video View . Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . input Type Ġ= ĠV r Video View . Options . TYPE _ MON O ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr _ video _ view . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Video ( Uri . from File ( File ( path )), Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Video () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fl ing ing Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pure Touch Tracking ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġcustom Ġbuttons Ġso Ġwe Ġcan Ġposition Ġthem Ġand Ġtoggle Ġvisibility Ġas Ġdesired ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fullscreen Button Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Info Button Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Transition View Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ster eo Mode Button Enabled ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset EventListener ( object Ġ: ĠV r Video EventListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Success () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Duration Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Duration ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Play On Ready Ġ|| Ġconfig . autoplay Videos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Play On Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Playing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresume Video () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . setImage Resource ( R . drawable . ic _ play _ outline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . be Visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completion () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Completed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Play Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Toast ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwindow . decor View . setOn System Ui Visibility ChangeListener Ġ{ Ġvisibility Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Fullscreen Ġ= Ġvisibility Ġand ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Button Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġsetup Buttons () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Duration ( duration : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Duration Ġ= Ġ( duration Ġ/ Ġ 1 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġvideo _ seek bar . max Ġ= Ġm Duration ĊĠĠĠĠĠĠĠ Ġvideo _ duration . text Ġ= Ġm Duration . get Formatted Duration () ĊĠĠĠĠĠĠĠ Ġset Video Progress ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is Playing Ġ&& Ġ! m Is Drag ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Curr Time Ġ= Ġ( vr _ video _ view !!. current Position Ġ/ Ġ 1 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ seek bar . progress Ġ= Ġm Curr Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ curr _ time . text Ġ= Ġm Curr Time . get Formatted Duration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Timer Handler . post Delayed ( this , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Play Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Playing Ġ= Ġ! m Is Playing ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresume Video () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Video () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresume Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . setImage Resource ( R . drawable . ic _ pause _ outline ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Curr Time Ġ== Ġm Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Video Progress ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Play On Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvr _ video _ view . play Video () ĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġvr _ video _ view . pause Video () ĊĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . setImage Resource ( R . drawable . ic _ play _ outline ) ĊĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Video Progress ( seconds : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvr _ video _ view . seek To ( seconds Ġ* Ġ 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġvideo _ seek bar . progress Ġ= Ġseconds ĊĠĠĠĠĠĠĠ Ġm Curr Time Ġ= Ġseconds ĊĠĠĠĠĠĠĠ Ġvideo _ curr _ time . text Ġ= Ġseconds . get Formatted Duration () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvideo Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Curr Time Ġ= Ġ( vr _ video _ view . duration Ġ/ Ġ 1 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġvideo _ seek bar . progress Ġ= Ġvideo _ seek bar . max ĊĠĠĠĠĠĠĠ Ġvideo _ curr _ time . text Ġ= Ġm Duration . get Formatted Duration () ĊĠĠĠĠĠĠĠ Ġpause Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġright Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġbottom Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has NavBar ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ+= Ġnavigation Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ+= Ġnavigation Bar Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ+= Ġnavigation Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvideo _ time _ holder . set Padding ( 0 , Ġ 0 , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġvideo _ time _ holder . background Ġ= Ġresources . get Drawable ( R . drawable . gradient _ background ) ĊĠĠĠĠĠĠĠ Ġvideo _ time _ holder . on Global Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Bottom Margin Ġ= Ġvideo _ time _ holder . height Ġ- Ġresources . get Dimension ( R . dim en . video _ player _ play _ pause _ size ). toInt () Ġ- Ġresources . get Dimension ( R . dim en . activity _ margin ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( explore . layout Params Ġas ĠRelative Layout . LayoutParams ). bottom Margin Ġ= Ġnew Bottom Margin ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( card board . layout Params Ġas ĠRelative Layout . LayoutParams ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Margin Ġ= Ġnew Bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Margin Ġ= Ġnavigation Bar Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplore . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvideo _ toggle _ play _ pause . setImage Resource ( R . drawable . ic _ play _ outline ) ĊĊĠĠĠĠĠĠĠ Ġcard board . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr _ video _ view . displayMode Ġ= ĠCAR DB O ARD _ DISPLAY _ MODE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexplore . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Explore Enabled Ġ= Ġ! m Is Explore Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr _ video _ view . set Pure Touch Tracking ( m Is Explore Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplore . setImage Resource ( if Ġ( m Is Explore Enabled ) ĠR . drawable . ic _ explore Ġelse ĠR . drawable . ic _ explore _ off ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Button Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Alpha Ġ= Ġif Ġ( m Is Fullscreen ) Ġ 0 f Ġelse Ġ 1 f ĊĠĠĠĠĠĠĠ ĠarrayOf ( card board , Ġexplore ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . animate (). alpha ( new Alpha ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠarrayOf ( card board , Ġexplore , Ġvideo _ toggle _ play _ pause , Ġvideo _ curr _ time , Ġvideo _ duration ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Clickable Ġ= Ġ! m Is Fullscreen ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvideo _ seek bar . setOn Seek Bar ChangeListener ( if Ġ( m Is Fullscreen ) Ġnull Ġelse Ġthis ) ĊĠĠĠĠĠĠĠ Ġvideo _ time _ holder . animate (). alpha ( new Alpha ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Fullscreen Ġ= Ġ! m Is Fullscreen ĊĠĠĠĠĠĠĠ Ġtoggle Button Visibility () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Fullscreen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide System UI ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow System UI ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġskip ( forward : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( forward Ġ&& Ġm Curr Time Ġ== Ġm Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcurr Ġ= Ġvr _ video _ view . current Position ĊĠĠĠĠĠĠĠ Ġval Ġtwo Percent s Ġ= ĠMath . max (( vr _ video _ view . duration Ġ/ Ġ 5 0 ). toInt (), ĠMIN _ SKIP _ LENGTH ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Progress Ġ= Ġif Ġ( forward ) Ġcurr Ġ+ Ġtwo Percent s Ġelse Ġcurr Ġ- Ġtwo Percent s ĊĠĠĠĠĠĠĠ Ġval Ġround Progress Ġ= ĠMath . round ( new Progress Ġ/ Ġ 1 0 0 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġlimited Progress Ġ= ĠMath . max ( Math . min ( vr _ video _ view . duration . toInt (), Ġround Progress ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġset Video Progress ( limited Progress ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Play Pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Video Progress ( progress ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvr _ video _ view . pause Video () ĊĠĠĠĠĠĠĠ Ġm Is Drag ged Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Playing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġresume Video () ĊĠĠĠĠĠĠĠ Ġm Is Drag ged Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ