package Ġcom . tom tom . time to leave Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġcom . google . android . gms . location . Location Request Ċ import Ġcom . tom tom . online . sdk . common . location . LatLng Ċ import Ġcom . tom tom . online . sdk . common . permission . Android Permission Checker Ċ import Ġcom . tom tom . online . sdk . location . F used Location Source Ċ import Ġcom . tom tom . online . sdk . location . Location Source Ċ import Ġcom . tom tom . online . sdk . location . Location Update Listener Ċ import Ġcom . tom tom . online . sdk . routing . route . description . Travel Mode Ċ import Ġcom . tom tom . online . sdk . search . Online Search Api Ċ import Ġcom . tom tom . online . sdk . search . Search Api Ċ import Ġcom . tom tom . online . sdk . search . data . fuzzy . F uzzy Search QueryBuilder Ċ import Ġcom . tom tom . online . sdk . search . data . fuzzy . F uzzy Search Response Ċ import Ġcom . tom tom . online . sdk . search . data . reverse geo coder . Reverse Geo coder Full Address Ċ import Ġcom . tom tom . online . sdk . search . data . reverse geo coder . Reverse Geo coder Search QueryBuilder Ċ import Ġcom . tom tom . online . sdk . search . data . reverse geo coder . Reverse Geo coder Search Response Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . ob servers . Disposable Single Observer Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠLocation Update Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRE PAR ATION _ FIRST _ OPT Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRE PAR ATION _ SECOND _ OPT Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRE PAR ATION _ TH IRD _ OPT Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ DEP ART URE _ LAT L NG Ġ= ĠLat Lng ( 5 2 . 3 7 6 3 6 8 , Ġ 4 . 9 0 8 1 1 3 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ DEST INATION _ LAT L NG Ġ= ĠLat Lng ( 5 2 . 3 0 7 6 8 6 5 , Ġ 4 . 7 6 7 4 2 4 0 9 9 9 9 9 9 7 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ P ICK ER _ DIALOG _ TAG Ġ= Ġ" Time Picker " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARR IVE _ TIME _ A HEAD _ HOUR S Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO COMPLETE _ SEARCH _ DELAY _ M ILL IS Ġ= Ġ 6 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO COMPLETE _ SEARCH _ THRESHOLD Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ 2 4 H _ FORMAT Ġ= Ġ" HH : mm " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ 1 2 H _ FORMAT Ġ= Ġ" hh : mm " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSEARCH _ FU ZZ Y _ L VL _ MIN Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ REQUEST _ LOCATION Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcal Ar rive At : ĠCalendar Ġ= ĠCalendar . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( Calendar . HOUR , ĠARR IVE _ TIME _ A HEAD _ HOUR S ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Api : ĠSearch Api ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Source : ĠLocation Source ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Adapter : ĠArray Adapter < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Autocomplete List : ĠMutable List < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Results Map : ĠMutable Map < String , ĠLat Lng > ĊĠĠĠ Ġprivate Ġval Ġsearch Timer Handler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġvar Ġsearch Runnable : ĠRunnable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtravel Mode Selected Ġ= ĠTr avel Mode . TR U CK ĊĠĠĠ Ġprivate Ġvar Ġar rival TimeIn Millis : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlat Lng Current Position : ĠLat Lng ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlat Lng Depart ure Ġ= ĠDEFAULT _ DEP ART URE _ LAT L NG ĊĠĠĠ Ġprivate Ġvar Ġlat Lng Destination Ġ= ĠDEFAULT _ DEST INATION _ LAT L NG ĊĠĠĠ Ġprivate Ġvar Ġpreparation Time Selected Ġ= ĠPRE PAR ATION _ FIRST _ OPT ĊĊĠĠĠ Ġprivate Ġval Ġuser Preferred Hour Pattern : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( DateFormat . is 2 4 Hour Format ( application Context )) ĠTIME _ 2 4 H _ FORMAT Ġelse ĠTIME _ 1 2 H _ FORMAT ĊĊĠĠĠ Ġprivate Ġval ĠcurrentTime In Millis : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcalendar . time In Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġinit Tom Tom Services () ĊĠĠĠĠĠĠĠ Ġ// init Toolbar Settings () ĊĠĠĠĠĠĠĠ Ġinit Search Fields WithDefault Values () ĊĠĠĠĠĠĠĠ Ġinit Where Section () ĊĠĠĠĠĠĠĠ Ġinit By When Section () ĊĠĠĠĠĠĠĠ Ġinit Start Section () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġreset Days In Ar rive At () ĊĠĠĠĠĠĠĠ Ġval Ġchecker Ġ= ĠAndroid Permission Checker . create Location Checker ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! checker . if Not All Permission Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Source . activate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Changed ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lat Lng Current Position Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng Current Position Ġ= ĠLat Lng ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Source . deactivate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ toolbar , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Item Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Item Ġ== ĠR . id . toolbar _ menu _ help ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Help Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Tom Tom Services () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Api Ġ= ĠOnline Search Api . create ( this , ĠBuild Config . SEARCH _ API _ KEY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Toolbar Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( custom _ toolbar Ġas ĠToolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Display Home As Up Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Display Show Home Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Search Fields WithDefault Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Location Source () ĊĠĠĠĠĠĠĠ Ġ// init Depart ure With DefaultValue () ĊĠĠĠĠĠĠĠ Ġ// init Destination With DefaultValue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Location Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermission Checker Ġ= ĠAndroid Permission Checker . create Location Checker ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Checker . if Not All Permission Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Source Ġ= ĠF used Location Source ( this , ĠLocation Request . create ()) ĊĠĠĠĠĠĠĠ Ġlocation Source . add Location Update Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 Ġ( request Code Ġ== ĠPER MISSION _ REQUEST _ LOCATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ>= Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 1 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Source . activate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . location _ permissions _ den ied , ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Depart ure With DefaultValue () Ġ{ ĊĠĠĠĠĠĠĠ Ġlat Lng Depart ure Ġ= ĠDEFAULT _ DEP ART URE _ LAT L NG ĊĠĠĠĠĠĠĠ Ġset Address For Location ( lat Lng Depart ure , Ġat v _ main _ depart ure _ location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Destination With DefaultValue () Ġ{ ĊĠĠĠĠĠĠĠ Ġlat Lng Destination Ġ= ĠDEFAULT _ DEST INATION _ LAT L NG ĊĠĠĠĠĠĠĠ Ġset Address For Location ( lat Lng Destination , Ġat v _ main _ destination _ location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Help On First Run () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preference Name Ġ= ĠgetString ( R . string . shared _ preference _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġshared Preference Is First Run Ġ= ĠgetString ( R . string . shared _ preference _ first _ run ) ĊĠĠĠĠĠĠĠ Ġval Ġis First Run Ġ= Ġget SharedPreferences ( shared Preference Name , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( shared Preference Is First Run , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Help Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget SharedPreferences ( shared Preference Name , ĠContext . MODE _ PRIVATE ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ( shared Preference Is First Run , Ġfalse ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Where Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Autocomplete List Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġsearch Results Map Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġsearch Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter ( this , Ġandroid . R . layout . simple _ dropdown _ item _ 1 line , Ġsearch Autocomplete List ) ĊĊĠĠĠĠĠĠĠ Ġset Text Watcher To Auto Complete Field ( at v _ main _ depart ure _ location , Ġbutton _ depart ure _ clear ) ĊĠĠĠĠĠĠĠ Ġset Clear Button To Autocomplete Field ( at v _ main _ depart ure _ location , Ġbutton _ depart ure _ clear ) ĊĠĠĠĠĠĠĠ Ġset Text Watcher To Auto Complete Field ( at v _ main _ destination _ location , Ġbutton _ destination _ clear ) ĊĠĠĠĠĠĠĠ Ġset Clear Button To Autocomplete Field ( at v _ main _ destination _ location , Ġbutton _ destination _ clear ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Text Watcher To Auto Complete Field ( ĊĠĠĠĠĠĠĠ Ġauto Complete TextView : ĠAuto Complete TextView , ĊĠĠĠĠĠĠĠ Ġimage Button : ĠImage Button ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauto Complete TextView . setAdapter ( search Adapter ) ĊĠĠĠĠĠĠĠ Ġauto Complete TextView . add TextChanged Listener ( object Ġ: ĠBase Text Watcher () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Runnable ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Timer Handler . remove Callbacks ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . length Ġ>= ĠAUTO COMPLETE _ SEARCH _ THRESHOLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Runnable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRunnable Ġ{ Ġsearch Address ( s . toString (), Ġauto Complete TextView ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Timer Handler . post Delayed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Runnable !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAUTO COMPLETE _ SEARCH _ DELAY _ M ILL IS . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Button . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġauto Complete TextView . setOn ItemClickListener Ġ{ Ġparent , Ġview , Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġparent . getItem At Position ( position ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Complete TextView Ġ=== Ġat v _ main _ depart ure _ location ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng Depart ure Ġ= Ġsearch Results Map [ item ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( auto Complete TextView Ġ=== Ġat v _ main _ destination _ location ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng Destination Ġ= Ġsearch Results Map [ item ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch Address ( search Word : ĠString , Ġauto Complete TextView : ĠAuto Complete TextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Api . search ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF uzzy Search QueryBuilder ( search Word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Language ( Locale . getDefault (). to Language Tag ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Type A head ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Min F uzzy Level ( SEARCH _ FU ZZ Y _ L VL _ MIN ). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠDis posable Single Observer < F uzzy Search Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( fuzzy Search Response : ĠF uzzy Search Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! fuzzy Search Response . results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Autocomplete List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Results Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Complete TextView Ġ=== Ġat v _ main _ depart ure _ location Ġ&& Ġlat Lng Current Position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Location Title Ġ= ĠgetString ( R . string . main _ current _ position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Autocomplete List . add ( current Location Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Results Map [ current Location Title ] Ġ= Ġlat Lng Current Position !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġfuzzy Search Response . results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress String Ġ= Ġresult . address . free form Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Autocomplete List . add ( address String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Results Map [ address String ] Ġ= Ġresult . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Adapter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addAll ( search Autocomplete List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . filter . filter ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġe . localized Message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Address For Location ( ĊĠĠĠĠĠĠĠ Ġlocation : ĠLat Lng , ĊĠĠĠĠĠĠĠ Ġauto Complete TextView : ĠAuto Complete TextView ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Api . reverse Geo coding ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReverse Geo coder Search QueryBuilder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠDis posable Single Observer < Reverse Geo coder Search Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( reverse Geo coder Search Response : ĠReverse Geo coder Search Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses List Ġ= Ġreverse Geo coder Search Response . addresses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! addresses List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( addresses List [ 0 ] Ġas ĠReverse Geo coder Full Address ). address . free form Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Complete TextView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setText ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dismiss DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . toast _ error _ message _ error _ getting _ location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . localized Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . toast _ error _ message _ error _ getting _ location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . localized Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Clear Button To Autocomplete Field ( ĊĠĠĠĠĠĠĠ Ġauto Complete TextView : ĠAuto Complete TextView , ĊĠĠĠĠĠĠĠ Ġimage Button : ĠImage Button ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Complete TextView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit By When Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Timer Display () ĊĠĠĠĠĠĠĠ Ġtext _ view _ main _ ar rive _ at _ hour . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime Picker Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show ( support FragmentManager , ĠTIME _ P ICK ER _ DIALOG _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Timer Display () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtv Ar rive At Hour String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate Format . format ( user Preferred Hour Pattern , Ġcal Ar rive At . time In Millis ) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġtext _ view _ main _ ar rive _ at _ hour . text Ġ= Ġtv Ar rive At Hour String ĊĠĠĠĠĠĠĠ Ġset Tv Ar rive AtA m Pm ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate Format . is 2 4 Hour Format ( application Context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Ar rive At . get ( Calendar . AM _ PM ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Tv Ar rive AtA m Pm ( is 2 4 Hour Format : ĠBoolean , Ġindicator : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is 2 4 Hour Format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ main _ ar rive _ at _ am _ pm . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ main _ ar rive _ at _ am _ pm . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Am Pm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indicator Ġ== ĠCalendar . AM ) ĠgetString ( R . string . main _ am _ value ) Ġelse ĠgetString ( R . string . main _ pm _ value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ main _ ar rive _ at _ am _ pm . text Ġ= Ġstr Am Pm ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Pre paration Button ( pre paration Button : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpreparation Button . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġelevation Button Pressed Ġ= Ġresources . get Dimension ( R . dim en . main _ elevation _ button _ pressed ) ĊĠĠĠĠĠĠĠ Ġpreparation Button . elevation Ġ= Ġelevation Button Pressed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Start Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton _ main _ start . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime In Millis Ġ= ĠcurrentTime In Millis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar rival TimeIn Millis Ġ= Ġget Arrival TimeIn Millis () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( depart ure File d IsEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// init Depart ure With DefaultValue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( destination Field IsEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// init Destination With DefaultValue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentTime In Millis Ġ>= Ġar rival TimeIn Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Ar rive At . add ( Calendar . DAY _ OF _ MONTH , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar rival TimeIn Millis Ġ= Ġget Arrival TimeIn Millis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠCount down Activity . prepare Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , Ġlat Lng Depart ure , Ġlat Lng Destination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtravel Mode Selected , Ġar rival TimeIn Millis , Ġpreparation Time Selected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠtextView IsEmpty ( textView : ĠAuto Complete TextView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠtextView . text . toString (). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdepart ure File d IsEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠtextView IsEmpty ( at v _ main _ depart ure _ location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestination Field IsEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠtextView IsEmpty ( at v _ main _ destination _ location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Arrival TimeIn Millis (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcal Ar rive At . time In Millis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Days In Ar rive At () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcal Ar rive At . set ( Calendar . DAY _ OF _ MONTH , Ġcalendar . get ( Calendar . DAY _ OF _ MONTH )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Keyboard ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( view . application Window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Help Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhelp Intent Ġ= ĠIntent ( this @ MainActivity , ĠHelp Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( help Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġabstract Ġinner Ġclass ĠBase Text Watcher Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠ Ġ} Ċ } Ċ