/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠEs ri Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . esri . arc gis runtime . samples . view point clo udd ata offline Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġcom . esri . arc gis runtime . layers . PointCloud Layer Ċ import Ġcom . esri . arc gis runtime . load able . Load Status Ċ import Ġcom . esri . arc gis runtime . mapping . Arc GIS Scene Ċ import Ġcom . esri . arc gis runtime . mapping . Arc G IST iled Elevation Source Ċ import Ġcom . esri . arc gis runtime . mapping . Base map Ċ import Ġcom . esri . arc gis runtime . mapping . Surface Ċ import Ġcom . esri . arc gis runtime . mapping . view . Camera Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Tag Ġ= ĠMainActivity :: class . java . simple Name ĊĠĠĠ Ġprivate Ġval Ġpermissions Request Code Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġ_ permissions Ġ= ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġscene View . also Ġ{ Ġscene View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġcamera Ġand Ġinitial Ġcamera Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscene View . setView point Camera ( Camera ( 3 2 . 7 3 2 1 1 5 7 , Ġ- 1 1 7 . 1 5 0 0 7 2 , Ġ 4 5 2 . 2 8 2 7 7 4 , Ġ 2 5 . 4 8 1 5 3 3 , Ġ 7 8 . 0 9 4 5 8 5 9 , Ġ 0 . 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġscene Ġand Ġadd Ġit Ġto Ġthe Ġscene Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Arc GIS Scene ( Base map . create Imag ery ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscene View . scene Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġbase Ġsurface Ġwith Ġworld Ġelevation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Sources . add ( Arc G IST iled Elevation Source ( getString ( R . string . elevation _ source _ url ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġsurface Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġbase Ġsurface Ġof Ġthe Ġscene ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . base Surface Ġ= Ġsurface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequest Read Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest Ġread Ġexternal Ġstorage Ġfor ĠAPI Ġlevel Ġ 2 3 +. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrequest Read Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , Ġ_ permissions [ 0 ]) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate PointCloud Layer () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequest Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġ_ permissions , Ġpermissions Request Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġthe Ġpermissions Ġrequest Ġresponse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate PointCloud Layer () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReport Ġto Ġuser Ġthat Ġpermission Ġwas Ġdenied ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . read _ permission _ den ied _ message ). let Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( log Tag , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate PointCloud Layer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa ĠPoint Cloud Layer Ġto Ġthe Ġscene Ġby Ġpassing Ġthe ĠURI Ġof Ġthe Ġscene Ġlayer Ġpackage Ġto Ġthe Ġconstructor ĊĠĠĠĠĠĠĠ Ġval Ġpoint Cloud Layer Ġ= ĠPoint Cloud Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . get External Storage Directory (). toString () Ġ+ ĠgetString ( R . string . scene _ layer _ package _ location )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġlistener Ġto Ġperform Ġoperations Ġwhen Ġthe Ġload Ġstatus Ġof Ġthe ĠPoint Cloud Layer Ġchanges ĊĠĠĠĠĠĠĠ Ġpoint Cloud Layer . add Load Status Changed Listener Ġ{ Ġload Status Changed Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĠPoint Cloud Layer Ġloads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( load Status Changed Event . new Load Status Ġ== ĠLoad Status . LOADED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe ĠPoint Cloud Layer Ġto Ġthe Ġoperational Ġlayers Ġof Ġthe Ġscene ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscene View . scene . operation al Layers . add ( point Cloud Layer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( load Status Changed Event . new Load Status Ġ== ĠLoad Status . FAILED _ TO _ LOAD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġuser Ġthat Ġthe ĠPoint Cloud Layer Ġhas Ġfailed Ġto Ġload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . point _ cloud _ layer _ load _ failure _ message ). let Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( log Tag , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe ĠPoint Cloud Layer Ġasynchronously ĊĠĠĠĠĠĠĠ Ġpoint Cloud Layer . load Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġscene View . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġscene View . pause () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġscene View . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }