package Ġapp . if ny as . idp . view . main Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġapp . if ny as . idp . App . Companion . fu Ċ import Ġapp . if ny as . idp . R Ċ import Ġapp . if ny as . idp . databinding . Fragment V ids Binding Ċ import Ġapp . if ny as . idp . util . view Binding Ċ import Ġapp . if ny as . idp . view model . Main ViewModel Ċ import Ġapp if ny as idp . Place Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . google . vr . sdk . widgets . video . Vr Video View Ċ Ċ class ĠV ids Fragment Ġ: ĠFragment ( R . layout . fragment _ v ids ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġby Ġlazy Ġ{ Ġjava Class . simple Name Ġ} ĊĠĠĠ Ġprivate Ġval Ġvm : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Fragment V ids Binding :: bind ) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , Ġbundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , Ġbundle ) ĊĠĠĠĠĠĠĠ Ġinit Fun () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Fun () Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . init Data (" video ") ĊĠĠĠĠĠĠĠ Ġfu . clean Vr View () ĊĠĠĠĠĠĠĠ Ġinit Btn () ĊĠĠĠĠĠĠĠ Ġinit Vm () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Btn () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Clear . setOnClickListener Ġ{ Ġfull Toggle ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Back . setOnClickListener Ġ{ Ġactivity ?. on Back Pressed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn About . setOnClickListener Ġ{ Ġfu . create About Dialog ( this @ V ids Fragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Grid . setOnClickListener Ġ{ Ġopen Grid () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Full . setOnClickListener Ġ{ Ġfull Toggle ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Random . setOnClickListener Ġ{ Ġvr V id . pause Video (); Ġvm . random ize () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Maps . setOnClickListener Ġ{ Ġvm . maps () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Web . setOnClickListener Ġ{ Ġvm . web () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Shoot . setOnClickListener Ġ{ Ġplay Toggle ( null ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Vm () Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġset Place View ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Place View ( place : ĠPlace ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġtransition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfu . begin Transition ( lay Root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Toggle ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġvideo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġplace ?. image ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠV r Video View . Options (). apply Ġ{ Ġinput Type Ġ= ĠV r Video View . Options . TYPE _ MON O Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr V id . load Video ( Uri . parse ( uri ), Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr V id . play Video () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġdetails ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Place Title . text Ġ= Ġfu . html ToString ( place ?. title Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Place Desc . text Ġ= Ġfu . html ToString ( place ?. desc Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Shoot . tag Ġ= ĠR . drawable . ic _ outline _ play _ arrow _ 2 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġplay Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Toggle ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġend Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Toggle ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay Toggle ( is Play : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfu . begin Transition ( lay Root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Ġ= Ġis Play Ġ?: Ġ( btn Shoot . tag Ġ== ĠR . drawable . ic _ outline _ play _ arrow _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvr V id . apply Ġ{ Ġif Ġ( play ) Ġplay Video () Ġelse Ġpause Video () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Shoot . setImage Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play ) ĠR . drawable . ic _ outline _ pause _ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠR . drawable . ic _ outline _ play _ arrow _ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Shoot . tag Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play ) ĠR . drawable . ic _ outline _ pause _ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠR . drawable . ic _ outline _ play _ arrow _ 2 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgrid Clicked ( place : ĠPlace ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgrid Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġvm . grid Clicked ( place ) ĊĠĠĠĠĠĠĠ Ġ// activity ?. re create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Toggle ( is Load : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfu . begin Transition ( lay Root ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= Ġif Ġ( is Load ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlay Details . visibility Ġ= Ġif Ġ( is Load ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfull Toggle ( is Full : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfu . begin Transition ( lay Root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlay Details . visibility Ġ= Ġif Ġ( is Full ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Clear . visibility Ġ= Ġif Ġ( is Full ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgrid Dialog : ĠMaterial Dialog ĊĠĠĠ Ġprivate Ġfun Ġopen Grid () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: grid Dialog . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Dialog Ġ= Ġfu . create Grid Dialog ( this , Ġvm . places . value Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgrid Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . vr V id . resume Rendering () ĊĠĠĠĠĠĠĠ Ġfu . clean Vr View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbinding . vr V id . apply Ġ{ Ġpause Video (); Ġpause Rendering () Ġ} ĊĠĠĠĠĠĠĠ Ġfull Toggle ( false ) ĊĠĠĠĠĠĠĠ Ġplay Toggle ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġvm . clear () ĊĠĠĠ Ġ} Ċ }