/* Ġ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 . filter by definition expression ord is play filter Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . esri . arc gis runtime . Arc GIS Runtime Environment Ċ import Ġcom . esri . arc gis runtime . data . Query Parameters Ċ import Ġcom . esri . arc gis runtime . data . Service Feature Table Ċ import Ġcom . esri . arc gis runtime . geometry . Point Ċ import Ġcom . esri . arc gis runtime . geometry . Spatial References Ċ import Ġcom . esri . arc gis runtime . layers . Display Filter Ċ import Ġcom . esri . arc gis runtime . layers . Feature Layer Ċ import Ġcom . esri . arc gis runtime . layers . Manual Display Filter Definition Ċ import Ġcom . esri . arc gis runtime . load able . Load Status Ċ import Ġcom . esri . arc gis runtime . mapping . Arc GIS Map Ċ import Ġcom . esri . arc gis runtime . mapping . Base map Style Ċ import Ġcom . esri . arc gis runtime . mapping . View point Ċ import Ġcom . esri . arc gis runtime . mapping . view . MapView Ċ import Ġcom . esri . arc gis runtime . sample . filter by definition expression ord is play filter . databinding . Activity Main Binding ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠMainActivity :: class . java . simple Name ĊĊĠĠĠ Ġprivate Ġval Ġactivity Main Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfeature Count TV : ĠTextView Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . feature Count TV ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġexpression Button : ĠButton Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . expression Button ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġfilter Button : ĠButton Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . filter Button ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġreset Button : ĠButton Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . reset Button ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmap View : ĠMap View Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Main Binding . map View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( activity Main Binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġauthentication Ġwith Ġan ĠAPI Ġkey Ġor Ġnamed Ġuser Ġis Ġrequired Ġto Ġaccess Ġbase maps Ġand Ġother ĊĠĠĠĠĠĠĠ Ġ// Ġlocation Ġservices ĊĠĠĠĠĠĠĠ ĠArc GIS Runtime Environment . set ApiKey ( Build Config . API _ KEY ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe ĠFeature Layer Ġusing ĠFeature Table Ġcreated Ġfrom Ġthe ĠURL Ġto Ġan ĠArc GIS Ġfeature Ġservice ĊĠĠĠĠĠĠĠ Ġval Ġfeature Layer Ġ= ĠFeature Layer ( Service Feature Table (" https :// services 2 . arc gis . com / ZQ g QT uo yB rt mo Gd P / arc gis / rest / services / SF _ 3 1 1 _ Incident s / Feature Server / 0 ")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġmap Ġto Ġbe Ġdisplayed Ġin Ġthe Ġlayout 's ĠMap View ĊĠĠĠĠĠĠĠ Ġ// Ġwith Ġthe ĠBase map Type Ġtopo graphic ĊĠĠĠĠĠĠĠ Ġval Ġtopo graphic Map Ġ= ĠArc GIS Map ( Base map Style . AR CG IS _ TO PO GRAPH IC ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// add Ġa Ġfeature Ġlayer Ġto Ġthe Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperational Layers . add ( feature Layer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġtopo graphic Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview point Ġ= ĠView point ( Point (- 1 2 2 . 4 4 0 1 , Ġ 3 7 . 7 7 2 2 , ĠSpatial References . get W gs 8 4 ()), Ġ 1 0 0 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset View point ( view point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrun Ġcount Features () Ġwhen ĠMap View Ġis Ġfinished Ġmoving ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Navigation Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Navig ating ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Features ( feature Layer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpression Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Layer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġdisplay Ġfilter Ġdefinition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Filter Definition Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġdefinition Ġexpression Ġto Ġshow Ġspecific Ġfeatures Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Expression Ġ= Ġ" req _ Type Ġ= Ġ' Tree ĠMaint enance Ġor ĠDamage '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Features ( feature Layer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfilter Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Layer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable Ġthe Ġfeature Ġlayer Ġdefinition Ġexpression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Expression Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġdisplay Ġfilter Ġand Ġdisplay Ġfilter Ġdefinition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreq _ type Ġhere Ġis Ġone Ġof Ġthe Ġpublished Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdam aged Trees Ġ= ĠDisplay Filter (" D am aged ĠTre es ", Ġ" req _ type ĠLIKE Ġ'% Tree ĠMaint enance %' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġdisplay Ġfilter Ġdefinition Ġon Ġthe Ġlayer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Filter Definition Ġ= ĠManual Display Filter Definition ( dam aged Trees , ĠlistOf ( dam aged Trees )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Features ( feature Layer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreset Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Layer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable Ġthe Ġfeature Ġlayer Ġdefinition Ġexpression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Expression Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġdisplay Ġfilter Ġdefinition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Filter Definition Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Features ( feature Layer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe Ġtotal Feature Count Ġfrom Ġthe Ġ[ feature Layer ]' s Ġcurrent ĊĠĠĠĠ Ġ* Ġfeature Table Ġin Ġthe Ġ[ map View ]' s Ġextent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcount Features ( feature Layer : ĠFeature Layer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġextent Ġof Ġthe Ġcurrent Ġview point , Ġreturn Ġif Ġno Ġvalid Ġextent . ĊĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġmap View . getCurrent View point ( View point . Type . BOUND ING _ GEOMETRY ). target Geometry . extent Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe ĠUI Ġwith Ġthe Ġcount Ġof Ġfeatures Ġin Ġthe Ġextent ĊĠĠĠĠĠĠĠ Ġval Ġquery Parameters Ġ= ĠQuery Parameters (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry Ġ= Ġextent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfeature Count Future Ġ= Ġfeature Layer . feature Table . query Feature Count Async ( query Parameters ) ĊĠĠĠĠĠĠĠ Ġfeature Count Future . add Done Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature Layer . feature Table . load Status Ġ== ĠLoad Status . LOADED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Feature Count Ġ= Ġfeature Count Future . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Count TV . text Ġ= Ġ" Current Ġfeature Ġcount : Ġ${ total Feature Count }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" Error Ġreceiving Ġtotal Ġfeature Ġcount : Ġ${ feature Layer . feature Table . load Error . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , ĠerrorMessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . pause () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmap View . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ } Ċ