package Ġcom . example . cup cake . calcul ations Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ Ċ class ĠTr avel Functions : ĠViewModel () Ġ{ ĊĠĠĠ Ġ// Starting Ġpoint ĊĠĠĠ Ġprivate Ġvar Ġ_ start Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġstart : ĠLive Data < String > Ġ= Ġ_ start ĊĊĠĠĠ Ġ// End Ġpoint ĊĠĠĠ Ġprivate Ġvar Ġ_ end Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġend : ĠLive Data < String > Ġ= Ġ_ end ĊĊĠĠĠ Ġ// Start Ġlatitude Ġvalue ĊĠĠĠ Ġprivate Ġvar Ġ_ lat Val Start Ġ= ĠMutable LiveData ( 0 . 0 ) ĊĠĠĠ Ġval Ġlat Val Start : ĠLive Data < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ lat Val Start ĊĊĠĠĠ Ġ// End Ġlatitude Ġvalue ĊĠĠĠ Ġprivate Ġvar Ġ_ lat Val End Ġ= ĠMutable LiveData ( 0 . 0 ) ĊĠĠĠ Ġval Ġlat Val End : ĠLive Data < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ lat Val End ĊĊĠĠĠ Ġ// Start Ġlongitude Ġvalue ĊĠĠĠ Ġprivate Ġvar Ġ_ long Val Start Ġ= ĠMutable LiveData ( 0 . 0 ) ĊĠĠĠ Ġval Ġlong Val Start : ĠLive Data < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ long Val Start ĊĊĠĠĠ Ġ// End Ġlongitude Ġvalue ĊĠĠĠ Ġprivate Ġvar Ġ_ long Val End Ġ= ĠMutable LiveData ( 0 . 0 ) ĊĠĠĠ Ġval Ġlong Val End : ĠLive Data < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ long Val End ĊĊĠĠĠ Ġ// Latitude Ġof Ġstart ĊĠĠĠ Ġprivate Ġvar Ġ_ lat Start Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġlat Start : ĠLive Data < String > Ġ= Ġ_ lat Start ĊĊĠĠĠ Ġ// Latitude Ġof Ġend ĊĠĠĠ Ġprivate Ġvar Ġ_ lat End Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġlat End : ĠLive Data < String > Ġ= Ġ_ lat End ĊĊĠĠĠ Ġ// Longitude Ġof Ġstart ĊĠĠĠ Ġprivate Ġvar Ġ_ long Start Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġlong Start : ĠLive Data < String > Ġ= Ġ_ long Start ĊĊĠĠĠ Ġ// Longitude Ġof Ġend ĊĠĠĠ Ġprivate Ġvar Ġ_ long End Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġlong End : ĠLive Data < String > Ġ= Ġ_ long End ĊĊĠĠĠ Ġ// Coordinates Ġof Ġstart ĊĠĠĠ Ġprivate Ġvar Ġ_ coord Start Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġcoord Start : ĠLive Data < String > Ġ= Ġ_ coord Start ĊĊĠĠĠ Ġ// Coordinates Ġof Ġend ĊĠĠĠ Ġprivate Ġvar Ġ_ coord End Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġcoord End : ĠLive Data < String > Ġ= Ġ_ coord End ĊĊĠĠĠ Ġ// Unit Ġof Ġmeasurement ĊĠĠĠ Ġprivate Ġvar Ġ_ unit Ġ= ĠMutable LiveData < String >(" Metric ") ĊĠĠĠ Ġval Ġunit : ĠLive Data < String > Ġ= Ġ_ unit ĊĊĠĠĠ Ġ// Travel Ġdistance ĊĠĠĠ Ġprivate Ġvar Ġ_ dist Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġdist : ĠLive Data < String > Ġ= Ġ_ dist ĊĊĠĠĠ Ġ// Distance Ġdata ĊĠĠĠ Ġprivate Ġvar Ġ_ dist Data Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġdist Data : ĠLive Data < String > Ġ= Ġ_ dist Data ĊĊĠĠĠ Ġ// Constructor Ġto Ġbegin ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Reset Ġvalues ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ end . value Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ_ lat Val Start . value Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ_ lat Val End . value Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ_ long Val Start . value Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ_ long Val End . value Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġ_ lat Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ lat End . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ long Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ long End . value Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ_ coord Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ coord End . value Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ_ unit . value Ġ= Ġ" Metric " ĊĠĠĠĠĠĠĠ Ġ_ dist . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ dist Data . value Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Point ( start : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ start . value Ġ= Ġstart ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġend Point ( end : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ end . value Ġ= Ġend ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġno Text Coord ( spot : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( spot Ġ== Ġ" Start ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ coord Start . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( spot Ġ== Ġ" End ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ dist . value Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcoord ( lat : ĠDouble , Ġlong : ĠDouble , Ġspot : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlat Val Ġ= ĠMath . round ( lat Ġ* Ġ 1 0 . 0 ) Ġ/ Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlong Val Ġ= ĠMath . round ( long Ġ* Ġ 1 0 . 0 ) Ġ/ Ġ 1 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġ// Starting Ġcoordinates ĊĠĠĠĠĠĠĠ Ġif Ġ( spot Ġ== Ġ" Start ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat Val Start . value Ġ= Ġlat Val ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long Val Start . value Ġ= Ġlong Val ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Latitude Ġof Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lat Val Ġ< Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat Start . value Ġ= ĠMath . abs ( lat Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠS " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat Start . value Ġ= Ġlat Val . toString () Ġ+ Ġ"\ u 0 0 B 0 ĠN " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Longitude Ġof Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( long Val Ġ< Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long Start . value Ġ= ĠMath . abs ( long Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠW " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long Start . value Ġ= Ġlong Val . toString () Ġ+ Ġ"\ u 0 0 B 0 ĠE " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Coordinates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ coord Start . value Ġ= Ġ" Start ĠCoordinates : Ġ\ n ĠĠĠ ĠLat itude : Ġ" Ġ+ Ġ_ lat Start . value Ġ+ Ġ"\ n ĠĠĠ ĠLong itude : Ġ" Ġ+ Ġ_ long Start . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// End Ġcoordinates ĊĠĠĠĠĠĠĠ Ġif Ġ( spot Ġ== Ġ" End ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat Val End . value Ġ= Ġlat Val ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long Val End . value Ġ= Ġlong Val ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Latitude Ġof Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lat Val Ġ< Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat End . value Ġ= ĠMath . abs ( lat Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠS " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lat End . value Ġ= ĠMath . abs ( lat Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠN " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Longitude Ġof Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( long Val Ġ< Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long End . value Ġ= ĠMath . abs ( long Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠW " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ long End . value Ġ= ĠMath . abs ( long Val ). toString () Ġ+ Ġ"\ u 0 0 B 0 ĠE " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Coordinates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ coord End . value Ġ= Ġ" End ĠCoordinates : Ġ\ n ĠĠĠ ĠLat itude : Ġ" Ġ+ Ġ_ lat End . value Ġ+ Ġ"\ n ĠĠĠ ĠLong itude : Ġ" Ġ+ Ġ_ long End . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Unit Ġof Ġmeasurement ĊĠĠĠ Ġfun Ġunit ( unit : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ unit . value Ġ= Ġunit ĊĠĠĠĠĠĠĠ Ġno Text Coord (" End ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtravel Dist ( dist : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdist Val Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġunit Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ// Distance Ġbased Ġon Ġimp erial Ġor Ġmetric ĊĠĠĠĠĠĠĠ Ġif Ġ(_ unit . value !! Ġ== Ġ" Imp erial ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġ" Ġmi " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdist Conv Ġ= Ġ 0 . 6 2 1 Ġ* Ġdist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist Val Ġ= ĠMath . abs ( String . format ("% . 2 f ", Ġdist Conv ). toDouble ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(_ unit . value !! Ġ== Ġ" Metric ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġ" Ġkm " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist Val Ġ= ĠMath . abs ( String . format ("% . 2 f ", Ġdist ). toDouble ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Distance Ġand Ġdistance Ġdata ĊĠĠĠĠĠĠĠ Ġval Ġdist Ġ= Ġdist Val . toString () Ġ+ Ġunit ĊĠĠĠĠĠĠĠ Ġ_ dist . value Ġ= Ġ" Travel ĠDistance : Ġ" Ġ+ Ġdist ĊĠĠĠĠĠĠĠ Ġ_ dist Data . value Ġ= Ġ_ start . value Ġ+ Ġ" Ġto Ġ" Ġ+ Ġ_ end . value Ġ+ Ġ": Ġ" Ġ+ Ġdist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalid Loc ( loc : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Null Ġif Ġempty ĊĠĠĠĠĠĠĠ Ġif Ġ( loc . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loc [ 0 ] Ġ== Ġ' Ġ' Ġ|| Ġloc [ loc . length Ġ- Ġ 1 ] Ġ== Ġ' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// Check Ġfor Ġnull Ġinput ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. loc . length - 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loc [ i ] Ġ== Ġ' Ġ' Ġ&& Ġloc [ i Ġ- Ġ 1 ] Ġ== Ġ' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Travel Ġdistance ĊĠĠĠĠĠĠĠ Ġif Ġ(_ lat Val Start . value Ġ!= Ġnull Ġ&& Ġ_ lat Val End . value Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ_ long Val Start . value Ġ!= Ġnull Ġ&& Ġ_ long Val End . value Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Radius Ġand Ġdistances Ġto Ġand Ġfrom Ġwith Ġlat Ġand Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġ 6 3 7 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġd Lat Ġ= Ġdeg To Rad (_ lat Val End . value !! Ġ- Ġ_ lat Val Start . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġd Long Ġ= Ġdeg To Rad (_ long Val End . value !! Ġ- Ġ_ long Val Start . value !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Distance Ġto Ġdestination ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdist Ġ= ĠMath . sin ( d Lat Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( d Lat Ġ/ Ġ 2 ) Ġ+ ĠMath . cos ( deg To Rad (_ lat Val Start . value !! )) Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . cos ( deg To Rad (_ lat Val End . value !! )) Ġ* ĠMath . sin ( d Long Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( d Long Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist Ġ= Ġ 2 Ġ* ĠMath . atan 2 ( Math . sqrt ( dist ), ĠMath . sqrt ( 1 Ġ- Ġdist )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist Ġ= Ġr Ġ* Ġdist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtravel Dist ( dist ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Convert Ġdegrees Ġto Ġradians ĊĠĠĠ Ġprivate Ġfun Ġdeg To Rad ( value : ĠDouble ): ĠDouble { ĊĠĠĠĠĠĠĠ Ġreturn Ġ( value Ġ* ĠMath . PI Ġ/ Ġ 1 8 0 . 0 ) ĊĠĠĠ Ġ} Ċ }