package Ġapp . if ny as . idp . view . main Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ 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 P ics 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 . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Custom Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . google . vr . sdk . widgets . p ano . Vr Pan orama View Ċ Ċ class ĠP ics Fragment Ġ: ĠFragment ( R . layout . fragment _ p ics ) Ġ{ ĊĊĠĠĠ Ġ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 P ics 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 (" image ") ĊĠĠĠĠĠĠĠ Ġ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 @ P ics Fragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Grid . setOnClickListener Ġ{ Ġopen Grid () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Full . setOnClickListener Ġ{ Ġfull Toggle ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Random . setOnClickListener Ġ{ Ġvm . random ize () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Maps . setOnClickListener Ġ{ Ġvm . maps () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Web . setOnClickListener Ġ{ Ġvm . web () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Shoot . setOnClickListener Ġ{ Ġshoot P ics () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Vm () Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġset Place View ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfu . create Share Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ P ics Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace . value ?. title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Place View ( place : ĠPlace ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbegin Ġtransition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfu . begin Transition ( lay Root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Toggle ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Place Image . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap (). load ( place ?. image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions (). disk Cache Strategy ( Disk Cache Strategy . ALL )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠCustom Target < Bitmap >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Cle ared ( placeholder : ĠDrawable ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap >? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠV r Pan orama View . Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Type Ġ= ĠV r Pan orama View . Options . TYPE _ MON O ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Image From Bitmap ( resource , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġdetails ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Place Title . text Ġ= Ġfu . html ToString ( place ?. title Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Place Desc . text Ġ= Ġfu . html ToString ( place ?. desc Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġend Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Toggle ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 Ġ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 Ġ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 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgrid Clicked ( place : ĠPlace ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgrid Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġvm . grid Clicked ( place ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshoot P ics () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhide Ġnavigation Ġbar ĊĠĠĠĠĠĠĠ Ġfu . set FullScreen () ĊĊĠĠĠĠĠĠĠ Ġ// Ġshoot ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhide Ġdetails ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . lay Details . visibility Ġ= ĠView . IN VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshoot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . shoot () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn Ġdetails ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . lay Details . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . img Place Image . resume Rendering () ĊĠĠĠĠĠĠĠ Ġfu . clean Vr View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbinding . img Place Image . pause Rendering () ĊĠĠĠĠĠĠĠ Ġfull Toggle ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġvm . clear () ĊĠĠĠ Ġ} Ċ }