package Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . ui . list Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . k yle cor ry . and rome da . alerts . Alerts Ċ import Ġcom . k yle cor ry . and rome da . alerts . toast Ċ import Ġcom . k yle cor ry . and rome da . core . filter Indices Ċ import Ġcom . k yle cor ry . and rome da . core . system . Geo Uri Ċ import Ġcom . k yle cor ry . and rome da . core . time . Timer Ċ import Ġcom . k yle cor ry . and rome da . core . try Or Nothing Ċ import Ġcom . k yle cor ry . and rome da . fragments . Bound Fragment Ċ import Ġcom . k yle cor ry . and rome da . g px . GP X Data Ċ import Ġcom . k yle cor ry . and rome da . pick ers . Pick ers Ċ import Ġcom . k yle cor ry . and rome da . preferences . Preferences Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . trail _ sense . databinding . Fragment Beacon List Binding Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . domain . Beacon Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . domain . Beacon Group Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . domain . I Beacon Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . commands .* Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . distance . Beacon Distance Calculator Factory Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . export . Beacon G px Converter Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . export . Beacon G px Importer Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . loading . Beacon Loader Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . persistence . Beacon Service Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . share . Beacon Sender Ċ import Ġcom . k yle cor ry . trail _ sense . navigation . be ac ons . infrastructure . sort . Nearest Beacon Sort Ċ import Ġcom . k yle cor ry . trail _ sense . shared . Custom Ui Utils Ċ import Ġcom . k yle cor ry . trail _ sense . shared . Format Service Ċ import Ġcom . k yle cor ry . trail _ sense . shared . User Preferences Ċ import Ġcom . k yle cor ry . trail _ sense . shared . alerts . IL o ading Indicator Ċ import Ġcom . k yle cor ry . trail _ sense . shared . alerts . View Loading Indicator Ċ import Ġcom . k yle cor ry . trail _ sense . shared . extensions . on Back Pressed Ċ import Ġcom . k yle cor ry . trail _ sense . shared . extensions . on IO Ċ import Ġcom . k yle cor ry . trail _ sense . shared . extensions . on Main Ċ import Ġcom . k yle cor ry . trail _ sense . shared . extensions . setOn Query Text Listener Ċ import Ġcom . k yle cor ry . trail _ sense . shared . from Ċ import Ġcom . k yle cor ry . trail _ sense . shared . io . I OF actory Ċ import Ġcom . k yle cor ry . trail _ sense . shared . lists . Group List Manager Ċ import Ġcom . k yle cor ry . trail _ sense . shared . permissions . alert No Camera Permission Ċ import Ġcom . k yle cor ry . trail _ sense . shared . permissions . request Camera Ċ import Ġcom . k yle cor ry . trail _ sense . shared . sensors . Sensor Service Ċ import Ġcom . k yle cor ry . trail _ sense . tools . qr . infrastructure . Beacon Q RE n coder Ċ import Ġjava . time . Instant ĊĊ Ċ class ĠBe acon List Fragment Ġ: ĠBound Fragment < Fragment Beacon List Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgps Ġby Ġlazy Ġ{ Ġsensor Service . get GPS () Ġ} ĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĠUser Preferences ( require Context ()) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĠĠĠ Ġprivate Ġval Ġsensor Service Ġby Ġlazy Ġ{ ĠSensor Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġformat Service Ġby Ġlazy Ġ{ ĠFormat Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġbe acon Service Ġby Ġlazy Ġ{ ĠBe acon Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġdistance Factory Ġby Ġlazy Ġ{ ĠBe acon Distance Calculator Factory ( beacon Service ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġbe acon Sort Ġby Ġlazy Ġ{ ĠNe arest Beacon Sort ( distance Factory , Ġgps :: location ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġbe acon Loader Ġby Ġlazy Ġ{ ĠBe acon Loader ( beacon Service , Ġprefs . navigation ) Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloading Indicator : ĠI Loading Indicator ĊĊĠĠĠ Ġprivate Ġval Ġlist Mapper Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠI Beacon ListItem Mapper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgps , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: handle Beacon Action , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: handle Beacon Group Action ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġinitial Location : ĠGeo Uri ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġg px Service Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠI OF actory (). create G px Service ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdelayed Update Ġ= ĠTimer Ġ{ ĊĠĠĠĠĠĠĠ Ġloading Indicator . hide () ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmanager : ĠGroup List Manager < I Beacon > ĊĠĠĠ Ġprivate Ġvar Ġlast Root : ĠI Beacon ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( require Arguments (). containsKey (" initial _ location ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Location Ġ= Ġrequire Arguments (). get Parcelable (" initial _ location ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġfind Nav Controller () ĊĊĠĠĠĠĠĠĠ Ġbinding . beacon Recycler . empty View Ġ= Ġbinding . beacon Empty Text ĊĠĠĠĠĠĠĠ Ġloading Indicator Ġ= ĠView Loading Indicator ( binding . loading ) ĊĠĠĠĠĠĠĠ Ġmanager Ġ= ĠGroup List Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Root ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġbe acon Sort . sort ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . search box . setOn Query Text Listener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . search ( binding . search box . query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmanager . onChange Ġ= Ġ{ Ġroot , Ġitems , Ġroot Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . beacon Recycler . set Items ( items , Ġlist Mapper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . beacon Recycler . scrollTo Position ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . beacon Title . title . text Ġ= Ġroot ?. name Ġ?: ĠgetString ( R . string . be ac ons ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinitial Location ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Location Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Beacon ( initial Location Ġ= Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . beacon Title . right Quick Action . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Export Be ac ons () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . create Menu . set Overlay ( binding . overlay Mask ) ĊĠĠĠĠĠĠĠ Ġbinding . create Menu . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ import _ qr _ beacon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Camera Ġ{ Ġhas Permission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Beacon From QR () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert No Camera Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ import _ g px _ be ac ons Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Be ac ons () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ create _ beacon _ group Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Beacon Group Command ( require Context (), Ġlifecycle Scope , Ġbe acon Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . execute ( manager . root ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ create _ beacon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Beacon ( group Ġ= Ġmanager . root ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . create Menu . setOn Hide Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . create Btn . setImage Resource ( R . drawable . ic _ add ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . create Menu . setOn Show Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . create Btn . setImage Resource ( R . drawable . ic _ cancel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . create Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility (! is Create Menu Open ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Back Pressed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Create Menu Open () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Create Menu Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! manager . up ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Create Menu Visibility ( is Showing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . create Menu . show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . create Menu . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Create Menu Open (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . create Menu . isVisible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Export Be ac ons () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg px Ġ= Ġget Export GP X () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPick ers . items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . export ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg px . way points . map Ġ{ Ġit . name Ġ?: Ġformat Service . format Location ( it . coordinate ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList ( g px . way points . size ) Ġ{ Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull Ġ&& Ġit . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Way points Ġ= Ġg px . way points . filter Indices ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexport ( g px . copy ( way points Ġ= Ġselected Way points )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmanager . clear ( false ) ĊĠĠĠĠĠĠĠ Ġloading Indicator . show () ĊĠĠĠĠĠĠĠ Ġif Ġ( gps . has Valid Reading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Location Update () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgps . start ( this :: on Location Update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading Indicator . hide () ĊĠĠĠĠĠĠĠ Ġgps . stop ( this :: on Location Update ) ĊĠĠĠĠĠĠĠ Ġdelayed Update . stop () ĊĠĠĠĠĠĠĠ Ġtry Or Nothing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Root Ġ= Ġmanager . root ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Location Update (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdelayed Update . once ( LOAD _ DELAY ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimport Beacon From QR () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġencoder Ġ= ĠBe acon Q RE n coder () ĊĠĠĠĠĠĠĠ ĠCustom Ui Utils . scan QR ( this , ĠgetString ( R . string . beacon _ qr _ import _ instructions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe acon Ġ= Ġencoder . decode ( it ) Ġ?: Ġreturn @ scan QR Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Beacon ( group Ġ= Ġmanager . root ?. id , Ġinitial Location Ġ= ĠGeo Uri . from ( beacon )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexport ( g px : ĠGP X Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexport File Ġ= Ġ" trail - sense -${ Instant . now (). epoch Second }. g px " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġg px Service . export ( g px , Ġexport File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . be ac ons _ exported , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg px . way points . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg px . way points . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . beacon _ export _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimport Be ac ons () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimporter Ġ= ĠBe acon G px Importer ( require Context ()) ĊĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg px Ġ= Ġg px Service . import () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġway points Ġ= Ġg px ?. way points Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPick ers . items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . import _ btn ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġway points . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ?: Ġformat Service . format Location ( it . coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList ( way points . size ) Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg px To Import Ġ= ĠGP X Data ( way points . filter Indices ( it ), Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġon IO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimporter . import ( g px To Import , Ġmanager . root ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlert s . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . be ac ons _ imported , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Export GP X (): ĠGP X Data Ġ= Ġon IO Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Ġ= Ġbe acon Service . get Be ac ons ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . root ?. id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Groups Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Depth Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Root Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġall . filter Is Instance < Beacon Group >() ĊĠĠĠĠĠĠĠ Ġval Ġbe ac ons Ġ= Ġall . filter Is Instance < Beacon >() ĊĊĠĠĠĠĠĠĠ ĠBe acon G px Converter (). to GP X ( be ac ons , Ġgroups ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Binding ( ĊĠĠĠĠĠĠĠ Ġlayout Inflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ? ĊĠĠĠ Ġ): ĠFragment Beacon List Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Beacon List Binding . inflate ( layout Inflater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Beacon ( ĊĠĠĠĠĠĠĠ Ġgroup : ĠLong ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġinitial Location : ĠGeo Uri ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġediting Beacon Id : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġbundle Of () ĊĊĠĠĠĠĠĠĠ Ġgroup ?. let Ġ{ Ġbundle . put Long (" initial _ group ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġinitial Location ?. let Ġ{ Ġbundle . put Parcelable (" initial _ location ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġediting Beacon Id ?. let Ġ{ Ġbundle . put Long (" edit _ beacon ", Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ beacon List Fragment _ to _ place Beacon Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġview Beacon ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġbundle Of (" beacon _ id " Ġto Ġid ) ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ beacon _ list _ to _ beacon Details Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate ( beacon : ĠBe acon ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreferences ( require Context ()). put Long (" last _ beacon _ id _ long ", Ġbe acon . id ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠConfirm Ġit Ġis Ġalways Ġnavigate Ġup Ġthat Ġgets Ġthere ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete ( beacon : ĠBe acon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠDelete Beacon Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Service ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . execute ( beacon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete ( group : ĠBe acon Group ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlert s . dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . delete ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . delete _ beacon _ group _ message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcancelled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon IO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Service . delete ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove ( beacon : ĠBe acon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠMove Beacon Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Service ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . execute ( beacon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove ( group : ĠBe acon Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMove Beacon Group Command ( require Context (), Ġlifecycle Scope , Ġbe acon Service ) Ġ{ Ġrefresh () Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . execute ( group ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Visibility ( beacon : ĠBe acon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Beacon Ġ= Ġbe acon . copy ( visible Ġ= Ġ! beacon . visible ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon IO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe acon Service . add ( new Beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrename ( group : ĠBe acon Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRename Beacon Group Command ( require Context (), Ġlifecycle Scope , Ġbe acon Service ) Ġ{ Ġrefresh () Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . execute ( group ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Beacon Group Action ( group : ĠBe acon Group , Ġaction : ĠBe acon Group Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Group Action . Open Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . open ( group . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Group Action . Edit Ġ-> Ġrename ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Group Action . Delete Ġ-> Ġdelete ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Group Action . Move Ġ-> Ġmove ( group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Beacon Action ( beacon : ĠBe acon , Ġaction : ĠBe acon Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . View Ġ-> Ġview Beacon ( beacon . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Edit Ġ-> Ġcreate Beacon ( editing Beacon Id Ġ= Ġbe acon . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Navigate Ġ-> Ġnavigate ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Delete Ġ-> Ġdelete ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Move Ġ-> Ġmove ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Toggle Visibility Ġ-> Ġtoggle Visibility ( beacon ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBe acon Action . Share Ġ-> ĠBe acon Sender ( this ). send ( beacon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOAD _ DELAY Ġ= Ġ 4 0 0 L ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ