package Ġcom . jel uch u . navigation Ċ Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroidx . annotation . Id Res Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . style . Absolute Size Span Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġcom . jel uch u . navigation . utils . Utils Ċ import Ġcom . mapbox . api . directions . v 5 . models . Banner Instructions Ċ import Ġcom . mapbox . api . directions . v 5 . models . Directions Response Ċ import Ġcom . mapbox . api . directions . v 5 . models . Directions Route Ċ import Ġcom . mapbox . geojson . Point Ċ import Ġcom . mapbox . mapbox sdk . Map box Ċ import Ġcom . mapbox . mapbox sdk . camera . Camera Position Ċ import Ġcom . mapbox . mapbox sdk . geometry . LatLng Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . Navigation View Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . Navigation View Options Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . On Navigation Ready Callback Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . listeners . Banner Instructions Listener Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . listeners . Instruction List Listener Ċ import Ġcom . mapbox . services . android . navigation . ui . v 5 . listeners . Navigation Listener Ċ import Ġcom . mapbox . services . android . navigation . v 5 . navigation . Navigation Route Ċ import Ġcom . mapbox . services . android . navigation . v 5 . route progress . Progress ChangeListener Ċ import Ġcom . mapbox . services . android . navigation . v 5 . route progress . Route Progress Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Response Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠOn Navigation Ready Callback , ĠNavigation Listener , ĊĠĠĠ ĠProgress ChangeListener , ĠInstruction List Listener , ĠBanner Instructions Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġnavigation View : ĠNavigation View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsp acer : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġspeed Widget : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġbottom Sheet Visible Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġinstruction List Shown Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠMap box . getInstance ( this , ĠgetString ( R . string . access _ token )) ĊĠĠĠĠĠĠĠ Ġset Theme ( R . style . Theme _ AppCompat _ Light _ No ActionBar ) ĊĠĠĠĠĠĠĠ Ġinit Night Mode () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġnavigation View Ġ= ĠfindViewById ( R . id . navigation View ) ĊĠĠĠĠĠĠĠ Ġspeed Widget Ġ= ĠfindViewById ( R . id . speed _ limit ) ĊĠĠĠĠĠĠĠ Ġsp acer Ġ= ĠfindViewById ( R . id . spacer ) ĊĠĠĠĠĠĠĠ Ġset Speed Widget Anchor ( R . id . summary Bottom Sheet ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinitial Position Ġ= ĠCamera Position . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. target ( LatLng ( ORIGIN . latitude (), ĠOR IGIN . longitude ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. zoom ( INITIAL _ ZO OM . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġnavigation View !!. initialize ( this , Ġinitial Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation Ready ( isRunning : ĠBoolean ) Ġ{ Ġfetch Route () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Cancel Navigation () Ġ{ Ġfinish () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Navigation Finished () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Navigation Running () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Progress Change ( location : ĠLocation , Ġroute Progress : ĠRoute Progress ) Ġ{ Ġset Speed ( location ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Restore InstanceState ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Instruction List Visibility Changed ( shown : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstruction List Shown Ġ= Ġshown ĊĠĠĠĠĠĠĠ Ġspeed Widget !!. visibility Ġ= Ġif Ġ( shown ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwill Display ( instructions : ĠBanner Instructions ): ĠBanner Instructions Ġ= Ġinstructions ĊĊĠĠĠ Ġprivate Ġfun Ġstart Navigation ( directions Route : ĠDirection s Route ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠNavigation View Options . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigation Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directions Route ( directions Route ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. should Sim ulate Route ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. progress ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. instruction List Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. banner Instructions Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. offline Routing Tiles Path ( obtain Offline Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. offline Routing Tiles Version ( obtain Offline Tile Version ()) ĊĠĠĠĠĠĠĠ Ġset Bottom Sheet Callback ( options ) ĊĊĠĠĠĠĠĠĠ Ġnavigation View !!. start Navigation ( options . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobtain Offline Directory (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffline Ġ= ĠEnvironment . get External Storage Public Directory (" Offline ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! offline . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Offline Ġdirectory Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffline . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoffline . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobtain Offline Tile Version (): ĠString ? Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ). getString ( getString ( R . string . offline _ version _ key ), Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Route () Ġ{ ĊĠĠĠĠĠĠĠ ĠNavigation Route . builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. accessToken ( getString ( R . string . access _ token )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. origin ( ORIGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. destination ( DEST INATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. altern atives ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Route ( object Ġ: ĠUtils . Simpl ified Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Directions Response >, Ġresponse : ĠResponse < Directions Response >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Route Ġ= Ġresponse . body () !!. routes ()[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Navigation ( directions Route ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Speed Widget Anchor (@ Id Res Ġres : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġsp acer !!. layout Params Ġas ĠCoord inator Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . anchor Id Ġ= Ġres ĊĠĠĠĠĠĠĠ Ġsp acer !!. layout Params Ġ= Ġlayout Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Bottom Sheet Callback ( options : ĠNavigation View Options . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . bottom Sheet Callback ( object Ġ: ĠBottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ HIDDEN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Speed Widget Anchor ( R . id . re center Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ EXP AN DED Ġ-> Ġbottom Sheet Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ SET TL ING Ġ-> Ġif Ġ(! bottom Sheet Visible ) Ġ{ Ġset Speed Widget Anchor ( R . id . summary Bottom Sheet ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Night Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnight Mode Ġ= Ġretrieve Night Mode From Preferences () ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( night Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Night Mode From Preferences (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpreferences . getInt ( getString ( R . string . current _ night _ mode ), ĠAppCompat Delegate . MODE _ N IGHT _ AUTO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Night Mode To Preferences ( night Mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . put Int ( getString ( R . string . current _ night _ mode ), Ġnight Mode ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Speed ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠString . format ("% d \ n K PH ", Ġ( location . speed Ġ* Ġ 1 . 6 0 9 3 4 4 ). toInt ()) ĊĠĠĠĠĠĠĠ Ġval Ġmp h Text Size Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . mph _ text _ size ) ĊĠĠĠĠĠĠĠ Ġval Ġspeed Text Size Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . speed _ text _ size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( string ) ĊĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Size Span ( mph Text Size ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . length Ġ- Ġ 4 , Ġstring . length , ĠSp anned . SPAN _ INCL USIVE _ INCL USIVE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Size Span ( speed Text Size ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġstring . length Ġ- Ġ 3 , ĠSp anned . SPAN _ INCL USIVE _ INCL USIVE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġspeed Widget !!. text Ġ= Ġsp ann able String ĊĠĠĠĠĠĠĠ Ġif Ġ(! instruction List Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Widget !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. onStart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Low Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Low Memory () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Low Memory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! navigation View !!. on Back Pressed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġnavigation View !!. on Destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Finish ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Night Mode To Preferences ( AppCompat Delegate . MODE _ N IGHT _ AUTO ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ AUTO ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠOR IGIN Ġ= ĠPoint . from Lng Lat (- 3 . 6 4 9 7 8 9 , Ġ 4 0 . 4 4 7 6 6 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEST INATION Ġ= ĠPoint . from Lng Lat (- 3 . 6 4 5 2 2 6 , Ġ 4 0 . 4 4 9 2 1 5 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINITIAL _ ZO OM Ġ= Ġ 1 6 ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ