package Ġorg . bl itz ort ung . android . map Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġorg . bl itz ort ung . android . app . Main Ċ import Ġorg . bl itz ort ung . android . app . view . On Shared Preference ChangeListener Ċ import Ġorg . bl itz ort ung . android . app . view . Preference Key Ċ import Ġorg . bl itz ort ung . android . app . view . get Ċ import Ġorg . jetbrains . ank o . default SharedPreferences Ċ import Ġorg . os md roid . tile provider . tile source . Tile Source Factory Ċ import Ġorg . os md roid . util . Geo Point Ċ import Ġorg . os md roid . views . Custom Zoom Buttons Controller Ċ import Ġorg . os md roid . views . overlay . Scale Bar Overlay Ċ Ċ class ĠMap Fragment Ġ: ĠFragment (), ĠOn Shared Preference ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Prefs : ĠSharedPreferences ĊĠĠĠ Ġlateinit Ġvar Ġmap View : ĠOwn MapView ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Scale Bar Overlay : ĠScale Bar Overlay ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View Ġ= ĠOwn MapView ( in flater . context ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġthis . activity !! ĊĠĠĠĠĠĠĠ Ġval Ġdm Ġ= Ġcontext . resources . display Metrics ĊĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= Ġcontext . default SharedPreferences ĊĠĠĠĠĠĠĠ Ġpreferences . register On Shared Preference ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġm Prefs Ġ= Ġcontext . get SharedPreferences ( PRE FS _ NAME , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay Ġ= ĠScale Bar Overlay ( map View ) ĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay . set Scale Bar Offset ( dm . width Pixels Ġ/ Ġ 2 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay . set Cent red ( true ) ĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay . set Align Bottom ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġcentered Ġ= Ġm Scale Bar Overlay . java Class . getDeclared Field (" cent red ") ĊĠĠĠĠĠĠĠ Ġcentered . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcentered . set Boolean ( m Scale Bar Overlay , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġmap View . overlay s . add ( this . m Scale Bar Overlay ) ĊĊĠĠĠĠĠĠĠ Ġ// built Ġin Ġzoom Ġcontrols ĊĠĠĠĠĠĠĠ Ġmap View . zoom Controller . setVisibility ( Custom Zoom Buttons Controller . Visibility . SHOW _ AND _ FA DE OUT ) ĊĊĠĠĠĠĠĠĠ Ġ// needed Ġfor Ġpin ch Ġzoom s ĊĠĠĠĠĠĠĠ Ġmap View . set Multi Touch Controls ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// scales Ġtiles Ġto Ġthe Ġcurrent Ġscreen 's ĠD PI , Ġhelps Ġwith Ġread ability Ġof Ġlabels ĊĠĠĠĠĠĠĠ Ġmap View . is Tiles Scaled To D pi Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// the Ġrest Ġof Ġthis Ġis Ġrest oring Ġthe Ġlast Ġmap Ġlocation Ġthe Ġuser Ġlooked Ġat ĊĠĠĠĠĠĠĠ Ġval Ġzoom Level Ġ= Ġm Prefs . get Float ( PRE FS _ ZO OM _ LEVEL _ DOUBLE , Ġm Prefs . getInt ( PRE FS _ ZO OM _ LEVEL , Ġ 0 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġmap View . controller . set Zoom ( zoom Level . toDouble ()) ĊĠĠĠĠĠĠĠ Ġmap View . set Map Orientation ( 0 f , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġlatitude String Ġ= Ġm Prefs . getString ( PRE FS _ LAT IT UDE _ STRING , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġlongitude String Ġ= Ġm Prefs . getString ( PRE FS _ LONG IT UDE _ STRING , Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( latitude String Ġ== Ġnull Ġ|| Ġlongitude String Ġ== Ġnull ) Ġ{ Ġ// Ġcase Ġhandled Ġfor Ġhistorical Ġreasons Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll X Ġ= Ġm Prefs . getInt ( PRE FS _ SCROLL _ X , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll Y Ġ= Ġm Prefs . getInt ( PRE FS _ SCROLL _ Y , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . scrollTo ( scroll X , Ġscroll Y ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġlatitude String . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġlongitude String . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . set Expected Center ( Geo Point ( latitude , Ġlongitude )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġon Shared Preference Changed ( preferences , ĠPreference Key . MAP _ TYPE , ĠPreference Key . MAP _ SCALE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate F org round Color ( fg color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay . bar Paint Ġ= Ġm Scale Bar Overlay . bar Paint . apply Ġ{ Ġcolor Ġ= Ġfg color Ġ} ĊĠĠĠĠĠĠĠ Ġm Scale Bar Overlay . text Paint Ġ= Ġm Scale Bar Overlay . text Paint . apply Ġ{ Ġcolor Ġ= Ġfg color Ġ} ĊĠĠĠĠĠĠĠ Ġmap View . post Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// save Ġthe Ġcurrent Ġlocation ĊĠĠĠĠĠĠĠ Ġval Ġedit Ġ= Ġm Prefs . edit () ĊĠĠĠĠĠĠĠ Ġedit . putString ( PRE FS _ TILE _ SOURCE , Ġmap View . tile Provider . tile Source . name ()) ĊĠĠĠĠĠĠĠ Ġedit . putString ( PRE FS _ LAT IT UDE _ STRING , Ġmap View . map Center . latitude . toString ()) ĊĠĠĠĠĠĠĠ Ġedit . putString ( PRE FS _ LONG IT UDE _ STRING , Ġmap View . map Center . longitude . toString ()) ĊĠĠĠĠĠĠĠ Ġedit . put Float ( PRE FS _ ZO OM _ LEVEL _ DOUBLE , Ġmap View . zoom Level Double . toFloat ()) ĊĠĠĠĠĠĠĠ Ġedit . apply () ĊĊĠĠĠĠĠĠĠ Ġmap View . on Pause () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġmap View . on Detach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġmap View . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate Target Zoom Level ( width In Met ers : ĠFloat ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġequ ator Length Ġ= Ġ 4 0 0 7 5 0 0 4 . 0 Ġ// Ġin Ġmeters ĊĠĠĠĠĠĠĠ Ġval Ġwidth In Pixels Ġ= ĠMath . min ( map View . height , Ġmap View . width ). toDouble () ĊĠĠĠĠĠĠĠ Ġvar Ġmeters Per Pixel Ġ= Ġequ ator Length Ġ/ Ġ 2 5 6 ĊĠĠĠĠĠĠĠ Ġvar Ġzoom Level Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ(( meters Per Pixel Ġ* Ġwidth In Pixels ) Ġ> Ġwidth In Met ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeters Per Pixel Ġ/= Ġ 2 . 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ zoom Level ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġzoom Level Ġ- Ġ 1 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences , Ġkey : ĠPreference Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NON _ EX HA UST IVE _ WHEN ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Key . MAP _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap TypeString Ġ= Ġshared Preferences . get ( key , Ġ" S ATELLITE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . set Tile Source ( if Ġ( map TypeString Ġ== Ġ" S ATELLITE ") ĠTile Source Factory . DEFAULT _ TILE _ SOURCE Ġelse ĠTile Source Factory . MAP NI K ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Key . MAP _ SCALE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Factor Ġ= Ġshared Preferences . get ( key , Ġ 1 0 0 ) Ġ/ Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( Main . LOG _ TAG , Ġ" Map Fragment Ġscale Ġ$ scale Factor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . tiles Scale Factor Ġ= Ġscale Factor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ================================================= ========== ĊĠĠĠĠĠĠĠ Ġ// ĠConstants ĊĠĠĠĠĠĠĠ Ġ// Ġ================================================= ========== ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ NAME Ġ= Ġ" org . and nav . osm . prefs " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ TILE _ SOURCE Ġ= Ġ" tile source " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ SCROLL _ X Ġ= Ġ" scroll X " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ SCROLL _ Y Ġ= Ġ" scroll Y " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ LAT IT UDE _ STRING Ġ= Ġ" latitude String " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ LONG IT UDE _ STRING Ġ= Ġ" longitude String " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ ZO OM _ LEVEL Ġ= Ġ" zoom Level " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP REF S _ ZO OM _ LEVEL _ DOUBLE Ġ= Ġ" zoom Level Double " ĊĠĠĠ Ġ} Ċ } Ċ