/* ĠCopyright Ġ 2 0 2 2 Ġ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 . sample . show device location using indo or position ing Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . esri . arc gis runtime . data . Feature Table Ċ import Ġcom . esri . arc gis runtime . data . Service Feature Table Ċ import Ġcom . esri . arc gis runtime . data . Query Parameters Ċ import Ġcom . esri . arc gis runtime . data . Feature Ċ import Ġcom . esri . arc gis runtime . data . Field Ċ import Ġcom . esri . arc gis runtime . data . Arc GIS Feature Table Ċ import Ġcom . esri . arc gis runtime . data . Query Parameters . OrderBy Ċ import Ġcom . esri . arc gis runtime . layers . Feature Layer Ċ import Ġcom . esri . arc gis runtime . load able . Load Status Ċ import Ġcom . esri . arc gis runtime . location . In do ors Location DataSource Ċ import Ġcom . esri . arc gis runtime . location . Location DataSource Ċ import Ġcom . esri . arc gis runtime . location . Location DataSource . Status Changed Listener Ċ import Ġcom . esri . arc gis runtime . mapping . Arc GIS Map Ċ import Ġcom . esri . arc gis runtime . mapping . Layer List Ċ import Ġcom . esri . arc gis runtime . mapping . view . Location Display Ċ import Ġcom . esri . arc gis runtime . mapping . view . MapView Ċ import Ġcom . esri . arc gis runtime . portal . Portal Ċ import Ġcom . esri . arc gis runtime . portal . Portal Item Ċ import Ġcom . esri . arc gis runtime . sample . show device location using indo or position ing . databinding . Activity Main Binding Ċ import Ġcom . esri . arc gis runtime . security . User Credential Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util . UUID Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠLocation DataSource . Location Changed Listener , ĊĠĠĠ ĠStatus Changed Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠMainActivity :: class . java . simple Name ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Floor : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠProvides Ġan Ġin door Ġor Ġout door Ġposition Ġbased Ġon Ġdevice Ġsensor Ġdata Ġ( radio , ĠGPS , Ġmotion Ġsensors ). ĊĠĠĠ Ġprivate Ġvar Ġm In do ors Location DataSource : ĠIn do ors Location DataSource ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġactivity Main Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmap View : ĠMap View Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . map View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠprogressBar : ĠProgress Bar Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . progress Bar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠtextView : ĠTextView Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . textView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( activity Main Binding . root ) ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġfor Ġlocation Ġpermissions ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġpermissions Ġis Ġallowed , Ġthe Ġdevice 's Ġcurrent Ġlocation Ġis Ġshown ĊĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġup Ġthe Ġconnection Ġbetween Ġthe Ġdevice Ġand Ġthe Ġportal Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconnect To Portal () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġportal Ġurl Ġand Ġthe Ġcredentials Ġneeded ĊĠĠĠĠĠĠĠ Ġval Ġportal Ġ= ĠPortal (" https :// vi enn ard c . maps . arc gis . com /", Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Ġ= ĠUser Credential (" tester _ vi enn ard c ", Ġ" password . testing 1 2 3 4 5 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġportal Item Ġ= ĠPortal Item ( portal , Ġ" 8 9 f 8 8 7 6 4 c 2 9 b 4 8 2 1 8 3 6 6 8 5 5 d 7 7 1 7 d 2 6 6 ") ĊĠĠĠĠĠĠĠ Ġsetup Map ( portal Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġ[ map View ] Ġusing Ġthe Ġ[ portal Item ] Ġthen Ġinvokes Ġ[ load Tables ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Map ( portal Item : ĠPortal Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . map Ġ= ĠArc GIS Map ( portal Item ) ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap View . map ĊĠĠĠĠĠĠĠ Ġmap . add Done Loading Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map View . map . load Status Ġ== ĠLoad Status . LOADED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Tables Ġ= Ġmap . tables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġthe Ġportal Item Ġcontains Ġfeature Tables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature Tables . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Load Tables ( feature Tables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Map Ġdoes Ġnot Ġcontain Ġfeature Ġtables " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Error Ġloading Ġmap : Ġ" Ġ+ Ġmap . load Error . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġloading Ġmap : Ġ" Ġ+ Ġmap . load Error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġup Ġthe ĠResults Callback Ġfor Ġwhen Ġall Ġtables Ġare Ġloaded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠsetUp Load Tables ( feature Tables : ĠMutable List < Feature Table >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġportal Item Ġcontains Ġfeature Tables , Ġso Ġperform Ġload Ġon Ġeach Ġfeature Table ĊĠĠĠĠĠĠĠ Ġload Tables ( feature Tables , Ġobject Ġ: ĠResults Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġthe Ġdata Ġsource Ġusing Ġthe Ġfeature Ġtables , Ġthen Ġstart Ġthe Ġdata Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup In do ors Location DataSource ( feature Tables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( exception : ĠException ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Failed Ġto Ġload Ġfeature Ġtables : Ġ" Ġ+ Ġ( exception ?. message Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe cursively Ġloads Ġeach Ġ[ feature Tables ] Ġand Ġcalls Ġ[ results Callback ] Ġonce Ġeach Ġtable Ġis Ġloaded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Tables ( ĊĠĠĠĠĠĠĠ Ġfeature Tables : ĠMutable List < Feature Table >, ĊĠĠĠĠĠĠĠ Ġresults Callback : ĠResults Callback ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġfeature Tables . iterator () ĊĠĠĠĠĠĠĠ Ġif Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable . add Done Loading Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table . load Status Ġ== ĠLoad Status . LOADED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġthe Ġfirst Ġtable Ġfrom Ġthe Ġfeature Tables Ġlist Ġsince Ġit Ġis Ġloaded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Feature Tables Ġ= Ġfeature Tables . sub List ( 1 , Ġfeature Tables . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecursively Ġcall Ġload Tables () Ġwith Ġthe Ġupdated Ġlist Ġof Ġfeature Tables Ġto Ġload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tables ( new Feature Tables , Ġresults Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Callback . onError ( table . load Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable . load Async () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonce Ġall Ġfeature Tables Ġis Ġloaded Ġthe Ġfeature Tables Ġlist Ġwill Ġbe Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Callback . on Success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġthe Ġ[ m In do ors Location DataSource ] Ġusing Ġthe Ġposition ing Table ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup In do ors Location DataSource ( feature Tables : ĠList < Feature Table >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġposition ing Table Ġneeds Ġto Ġbe Ġpresent ĊĠĠĠĠĠĠĠ Ġval Ġposition ing Table Ġ= Ġfeature Tables . first OrNull Ġ{ Ġit . tableName . equals (" ips _ position ing ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( position ing Table Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Feature Table Ġ= Ġposition ing Table Ġas ĠService Feature Table ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġmultiple Ġentries Ġare Ġavailable , ĠIn do ors Location DataSource Ġconstructor Ġfunction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlooks Ġup Ġthe Ġentry Ġwith Ġthe Ġmost Ġrecent Ġdate Ġand Ġtakes Ġthis Ġposition ing Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġquery Parameters Ġto Ġgrab Ġone Ġresult . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Created FieldName Ġ= Ġget Date Created FieldName ( service Feature Table . fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Created FieldName Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" The Ġservice Ġtable Ġdoes Ġnot Ġcontain Ġ\" Date Created \" Ġfields ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Parameters Ġ= ĠQuery Parameters (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Features Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Clause Ġ= Ġ" 1 Ġ= Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind Ġand Ġsort Ġout Ġthe ĠorderBy Fields Ġby Ġmost Ġrecent Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Fields . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Created FieldName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Parameters . SortOrder . DESC ENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperform Ġsearch Ġquery Ġusing Ġthe Ġquery Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Future Ġ= Ġservice Feature Table . query Features Async ( query Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Future . add Done Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Iterator : ĠIterator < Feature > Ġ= Ġresult Future . get (). iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġservice Feature Table Ġcontains Ġposition ing Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠID Ġthat Ġidentifies Ġa Ġrow Ġin Ġthe Ġposition ing Ġtable . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglobal ID Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Iterator . next (). attributes [ service Feature Table . global Id Field ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition ing Id Ġ= ĠUUID . fromString ( global ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetting Ġup ĠIn do ors Location DataSource Ġwith Ġposition ing , Ġpath ways Ġtables Ġand Ġposition ing ĠID . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġposition ing Table Ġ- Ġthe Ġ" ips _ position ing " Ġfeature Ġtable Ġfrom Ġan ĠI PS - enabled Ġmap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpath ways Table Ġ- ĠAn ĠArc GIS Feature Table Ġthat Ġcontains Ġpath ways Ġas Ġper Ġthe ĠArc GIS ĠIn do ors ĠInformation ĠModel . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetting Ġthis Ġproperty Ġenables Ġpath Ġsn apping Ġof Ġlocations Ġprovided Ġby Ġthe ĠIn do ors Location DataSource . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġposition ing ID Ġ- Ġan ĠID Ġwhich Ġidentifies Ġa Ġspecific Ġrow Ġin Ġthe Ġposition ing Table Ġthat Ġshould Ġbe Ġused Ġfor Ġsetting Ġup ĠI PS . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm In do ors Location DataSource Ġ= ĠIn do ors Location DataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Feature Table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetPath ways Table (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ing Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġthe Ġlocation Ġdisplay Ġ( blue Ġdot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Location Display () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" The Ġposition ing Ġtable Ġcontain Ġno Ġdata ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Position ing ĠTable Ġnot Ġfound Ġin ĠFeature Tables " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġthe Ġexact Ġformatting Ġof Ġthe Ġname Ġ" Date Created " Ġin Ġthe Ġlist Ġof ĠService Feature Table Ġfields . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Date Created FieldName ( fields : ĠList < Field >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġfields . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Date Created ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Case Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ|| Ġit . name . equals (" Date _ Created ", Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfield ?. name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe ĠPath ways Table ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetPath ways Table (): ĠArc GIS Feature Table ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath ways Feature Layer Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . map . operation al Layers . first OrNull Ġ{ Ġit . name . equals (" Path ways ") Ġ} Ġas ? ĠFeature Layer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpath ways Feature Layer ?. feature Table Ġas ? ĠArc GIS Feature Table ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġpath ways Ġtable Ġnot Ġfound Ġin Ġmap 's Ġoperational Layers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Path ways Table Ġnot Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv okes Ġwhen Ġthe Ġapp Ġis Ġclosed Ġor ĠLocation DataSource Ġis Ġstopped . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstop Location Display () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . location Display . stop () ĊĠĠĠĠĠĠĠ Ġmap View . location Display . location DataSource . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Status Changed Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Location Changed Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġthe Ġlocation Ġlisteners , Ġthe Ġnavigation Ġmode , Ġand Ġdisplay 's Ġthe Ġdevices Ġlocation Ġas Ġa Ġblue Ġdot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Location Display () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Display : ĠLocation Display Ġ= Ġmap View . location Display . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Pan Mode Ġ= ĠLocation Display . Auto Pan Mode . NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation DataSource Ġ= Ġm In do ors Location DataSource ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġthese Ġlisteners Ġwill Ġreceive Ġlocation , Ġheading Ġand Ġstatus Ġupdates Ġfrom Ġthe Ġlocation Ġdata Ġsource . ĊĠĠĠĠĠĠĠ Ġlocation Display . location DataSource . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Status Changed Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Location Changed Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġasynchronously Ġstart Ġof Ġthe Ġlocation Ġdisplay , ĊĠĠĠĠĠĠĠ Ġ// Ġwhich Ġwill Ġin - turn Ġstart ĠIn do ors Location DataSource Ġto Ġstart Ġreceiving ĠI PS Ġupdates . ĊĠĠĠĠĠĠĠ Ġlocation Display . start Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġdata Ġreceived Ġon Ġa Ġ[ location Changed Event ] ĊĠĠĠĠ Ġ* Ġlike Ġcurrent Floor , Ġposition Source , Ġtransmit ter Count , Ġnetwork Count Ġand Ġhorizontal Accuracy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlocation Changed ( location Changed Event : ĠLocation DataSource . Location Changed Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġlocation Ġproperties Ġof Ġthe ĠLocation DataSource ĊĠĠĠĠĠĠĠ Ġval Ġlocation Properties Ġ= Ġlocation Changed Event ?. location ?. additional Source Properties ĊĠĠĠĠĠĠĠ Ġif Ġ( location Properties Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Location DataSource Ġdoes Ġnot Ġhave Ġany Ġproperty - fields ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Location DataSource Ġdoes Ġnot Ġhave Ġany Ġproperty - fields ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġinformation Ġabout Ġthe Ġlocation Ġof Ġthe Ġdevice ĊĠĠĠĠĠĠĠ Ġval Ġfloor Ġ= Ġ( location Properties [" floor "] Ġ?: Ġ""). toString () ĊĠĠĠĠĠĠĠ Ġval Ġposition Source Ġ= Ġ( location Properties [ Location DataSource . Location . KEY _ POSITION _ SOURCE ] Ġ?: Ġ""). toString () ĊĠĠĠĠĠĠĠ Ġval Ġtransmit ter Count Ġ= Ġ( location Properties [" transmit ter Count "] Ġ?: Ġ""). toString () ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Count Ġ= Ġ( location Properties [ Location DataSource . Location . KEY _ S ATELLITE _ COUNT ] Ġ?: Ġ""). toString () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġcurrent Ġfloor Ġhasn 't Ġbeen Ġset Ġor Ġif Ġthe Ġfloor Ġhas Ġchanged ĊĠĠĠĠĠĠĠ Ġval Ġnew Floor Ġ= Ġfloor . toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Floor Ġ== Ġnull Ġ|| Ġcurrent Floor Ġ!= Ġnew Floor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Floor Ġ= Ġnew Floor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġthe Ġfloor Ġlayer Ġwith Ġthe Ġnew Floor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Layers () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġup Ġthe Ġmessage Ġwith Ġfloor Ġproperties Ġto Ġbe Ġdisplayed Ġto Ġthe ĠtextView ĊĠĠĠĠĠĠĠ Ġvar Ġlocation Properties Message Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Floor : Ġ$ floor , ĠPosition - source : Ġ$ position Source , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Horizontal - accuracy : Ġ" Ġ+ Ġlocation Changed Event . location . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDecimal Format (". ## "). format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . horizontal Accuracy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġ" m , Ġ" ĊĠĠĠĠĠĠĠ Ġif Ġ( position Source Ġ== ĠLocation DataSource . Location . POSITION _ SOURCE _ GN SS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Properties Message Ġ+= Ġ" S atellite - count : Ġ$ network Count " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( position Source Ġ== Ġ" BLE ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Properties Message Ġ+= Ġ" Transmit ter - count : Ġ$ transmit ter Count " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġlocation Properties Message ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġup Ġthe Ġfloor Ġlayer Ġwhen Ġthe Ġdevice Ġlocation Ġis Ġupdated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Layers () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġlayer 's Ġdefinition Ġexpress Ġwith Ġthe Ġcurrent Ġfloor ĊĠĠĠĠĠĠĠ Ġval Ġlayer List : ĠLayer List Ġ= Ġmap View . map . operation al Layers ĊĠĠĠĠĠĠĠ Ġlayer List . forEach Ġ{ Ġlayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġlayer . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layer Ġis ĠFeature Layer Ġ&& Ġ( name Ġ== Ġ" Details " Ġ|| Ġname Ġ== Ġ" Units " Ġ|| Ġname Ġ== Ġ" Levels ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . definition Expression Ġ= Ġ" VERTICAL _ ORDER Ġ= Ġ$ current Floor " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġstatus Ġchanges Ġof ĠIn do ors Location DataSource Ġusing Ġthe Ġ[ status Changed Event ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġstatus Changed ( status Changed Event : ĠLocation DataSource . Status Changed Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( status Changed Event ?. status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation DataSource . Status . START ING Ġ-> ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation DataSource . Status . STARTED Ġ-> ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation DataSource . Status . FAILED _ TO _ START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġstart ĠIn do ors Location DataSource ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Failed Ġto Ġstart ĠIn do ors Location DataSource ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation DataSource . Status . STOP PED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Location Display () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" In do ors Location DataSource Ġstopped Ġdue Ġto Ġan Ġinternal Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" In do ors Location DataSource Ġstopped Ġdue Ġto Ġan Ġinternal Ġerror ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġfor Ġlocation Ġpermissions , Ġif Ġnot Ġreceived Ġthen Ġrequest Ġfor Ġone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Code Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġrequest Permissions Ġ= ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġrequest Permissions , Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġalready Ġgiven , Ġso Ġno Ġneed Ġto Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect To Portal () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠResult Ġof Ġthe Ġuser Ġfrom Ġlocation Ġpermissions Ġrequest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < 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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġlocation Ġpermissions Ġaccepted , Ġstart Ġsetting Ġup ĠIn do ors Location DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect To Portal () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Location Ġpermission Ġis Ġnot Ġgranted " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinterface ĠResults Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonSuccess () ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( exception : ĠException ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . pause () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmap View . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Location Display () ĊĠĠĠĠĠĠĠ Ġmap View . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ } Ċ