33import android .annotation .SuppressLint ;
44import android .content .Context ;
55import android .content .DialogInterface ;
6+ import android .content .SharedPreferences ;
67import android .graphics .Bitmap ;
78import android .graphics .BitmapFactory ;
89import android .location .Location ;
@@ -98,7 +99,21 @@ public boolean onZoom(ZoomEvent event) {
9899 final static String PARAM_LATITUDE = "latitude" ;
99100 final static String PARAM_LONGITUDE = "longitude" ;
100101
102+ private SharedPreferences mPrefs ;
103+ private static final String MAP_PREFS = "map_prefs" ;
104+
105+ final static String PREF_BASE_MAP = "base_map" ;
106+ final static String PREF_OVERLAY = "overlay" ;
107+
108+ final static int BASE_MAP_OTM = 1 ;
109+ final static int BASE_MAP_OSM = 2 ;
110+
111+
112+ private int mBaseMap = BASE_MAP_OTM ;
113+
101114 private static final String TAG = MapFragment .class .getSimpleName ();
115+ private TextView mCopyRightView ;
116+ private int mOverlay = OverlayHelper .OVERLAY_NONE ;
102117
103118 public MapFragment () {
104119 // Required empty public constructor
@@ -123,6 +138,11 @@ public void onCreate(Bundle savedInstanceState) {
123138 setHasOptionsMenu (true );
124139 setRetainInstance (true );
125140 Configuration .getInstance ().setUserAgentValue (BuildConfig .APPLICATION_ID );
141+ if (getActivity () != null ) {
142+ mPrefs = getActivity ().getSharedPreferences (MAP_PREFS , Context .MODE_PRIVATE );
143+ mBaseMap = mPrefs .getInt (PREF_BASE_MAP , BASE_MAP_OTM );
144+ mOverlay = mPrefs .getInt (PREF_OVERLAY , OverlayHelper .OVERLAY_NONE );
145+ }
126146 }
127147
128148 @ Override
@@ -164,30 +184,20 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
164184 mMapView .getOverlays ().add (this .mCompassOverlay );
165185 mMapView .getOverlays ().add (this .mScaleBarOverlay );
166186
167- mMapView .setTileSource (TileSourceFactory .OpenTopo );
168-
169- //final OnlineTileSourceBase localTopo = new XYTileSource("OpenTopoMap", 0, 19, 256, ".png",
170- // new String[]{"http://192.168.2.108/hot/"}, "Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)");
171- //mMapView.setTileSource(localTopo);
187+ mMapView .addMapListener (new DelayedMapListener (mDragListener ));
172188
173- String copyRightNotice = mMapView .getTileProvider ().getTileSource ().getCopyrightNotice ();
174- TextView copyRightView = view .findViewById (R .id .copyrightView );
189+ mCopyRightView = view .findViewById (R .id .copyrightView );
175190
176- if (!TextUtils .isEmpty (copyRightNotice )) {
177- copyRightView .setText (copyRightNotice );
178- copyRightView .setVisibility (View .VISIBLE );
179- } else {
180- copyRightView .setVisibility (View .GONE );
181- }
182-
183- mMapView .addMapListener (new DelayedMapListener (mDragListener ));
191+ setBaseMap ();
184192
185193 mLocationOverlay .enableMyLocation ();
186194 mLocationOverlay .enableFollowLocation ();
187195 mLocationOverlay .setOptionsMenuEnabled (true );
188196 mCompassOverlay .enableCompass ();
189197 mMapView .setVisibility (View .VISIBLE );
190198 mOverlayHelper = new OverlayHelper (getActivity (), mMapView );
199+
200+ setTilesOverlay ();
191201 }
192202
193203 return view ;
@@ -216,6 +226,51 @@ public void run() {
216226 }
217227 }
218228
229+ private void setBaseMap () {
230+ switch (mBaseMap ) {
231+ case BASE_MAP_OTM :
232+ mMapView .setTileSource (TileSourceFactory .OpenTopo );
233+ break ;
234+ case BASE_MAP_OSM :
235+ mMapView .setTileSource (TileSourceFactory .MAPNIK );
236+ break ;
237+ }
238+ mMapView .invalidate ();
239+
240+ //final OnlineTileSourceBase localTopo = new XYTileSource("OpenTopoMap", 0, 19, 256, ".png",
241+ // new String[]{"http://192.168.2.108/hot/"}, "Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)");
242+ //mMapView.setTileSource(localTopo);
243+
244+ setCopyrightNotice ();
245+ }
246+
247+ private void setTilesOverlay () {
248+ mOverlayHelper .setTilesOverlay (mOverlay );
249+ setCopyrightNotice ();
250+ }
251+
252+ private void setCopyrightNotice () {
253+
254+ StringBuilder copyrightStringBuilder = new StringBuilder ();
255+ String mapCopyRightNotice = mMapView .getTileProvider ().getTileSource ().getCopyrightNotice ();
256+ copyrightStringBuilder .append (mapCopyRightNotice );
257+ if (mOverlayHelper != null ) {
258+ String overlayCopyRightNotice = mOverlayHelper .getCopyrightNotice ();
259+ if (!TextUtils .isEmpty (mapCopyRightNotice ) && !TextUtils .isEmpty (overlayCopyRightNotice )) {
260+ copyrightStringBuilder .append (", " );
261+ }
262+ copyrightStringBuilder .append (overlayCopyRightNotice );
263+ }
264+ String copyRightNotice = copyrightStringBuilder .toString ();
265+
266+ if (!TextUtils .isEmpty (copyRightNotice )) {
267+ mCopyRightView .setText (copyRightNotice );
268+ mCopyRightView .setVisibility (View .VISIBLE );
269+ } else {
270+ mCopyRightView .setVisibility (View .GONE );
271+ }
272+ }
273+
219274 @ SuppressLint ("MissingPermission" )
220275 private void initMap () {
221276
@@ -403,21 +458,85 @@ public boolean onOptionsItemSelected(MenuItem item) {
403458 zoomToBounds (Util .area (mListener .getGpx ()));
404459 return true ;
405460 case R .id .action_layers :
406- View anchorView = getActivity ().findViewById (R .id .popupAnchorView );
407- PopupMenu popup = new PopupMenu (getActivity (), anchorView );
408- android .view .MenuInflater inflater = popup .getMenuInflater ();
409- inflater .inflate (R .menu .menu_tile_sources , popup .getMenu ());
461+ if (getActivity () != null ) {
462+ View anchorView = getActivity ().findViewById (R .id .popupAnchorView );
463+ PopupMenu popup = new PopupMenu (getActivity (), anchorView );
464+ android .view .MenuInflater inflater = popup .getMenuInflater ();
465+ inflater .inflate (R .menu .menu_tile_sources , popup .getMenu ());
466+
467+ MenuItem openTopoMapItem = popup .getMenu ().findItem (R .id .otm );
468+ MenuItem openStreetMapItem = popup .getMenu ().findItem (R .id .osm );
469+ MenuItem overlayNoneItem = popup .getMenu ().findItem (R .id .none );
470+ MenuItem overlayHikingItem = popup .getMenu ().findItem (R .id .lonvia_hiking );
471+ MenuItem overlayCyclingItem = popup .getMenu ().findItem (R .id .lonvia_cycling );
472+
473+ switch (mBaseMap ) {
474+ case BASE_MAP_OTM :
475+ openTopoMapItem .setChecked (true );
476+ break ;
477+ case BASE_MAP_OSM :
478+ openStreetMapItem .setChecked (true );
479+ break ;
480+ }
410481
411- MenuItem openTopoItem = popup .getMenu ().findItem (R .id .otm );
412- openTopoItem .setChecked (true );
482+ switch (mOverlay ) {
483+ case OverlayHelper .OVERLAY_NONE :
484+ overlayNoneItem .setChecked (true );
485+ break ;
486+ case OverlayHelper .OVERLAY_HIKING :
487+ overlayHikingItem .setChecked (true );
488+ break ;
489+ case OverlayHelper .OVERLAY_CYCLING :
490+ overlayCyclingItem .setChecked (true );
491+ break ;
492+ }
493+
494+ popup .setOnMenuItemClickListener (MapFragment .this );
495+ popup .show ();
496+ return true ;
497+ } else {
498+ return false ;
499+ }
413500
414- popup .setOnMenuItemClickListener (MapFragment .this );
415- popup .show ();
416- return true ;
417501 }
418502 return super .onOptionsItemSelected (item );
419503 }
420504
505+ /**
506+ * Popup menu click
507+ *
508+ * @param menuItem
509+ * @return
510+ */
511+ @ Override
512+ public boolean onMenuItemClick (MenuItem menuItem ) {
513+ if (!menuItem .isChecked ()) {
514+ menuItem .setChecked (true );
515+ switch (menuItem .getItemId ()) {
516+ case R .id .otm :
517+ mBaseMap = BASE_MAP_OTM ;
518+ break ;
519+ case R .id .osm :
520+ mBaseMap = BASE_MAP_OSM ;
521+ break ;
522+ case R .id .none :
523+ mOverlay = OverlayHelper .OVERLAY_NONE ;
524+ break ;
525+ case R .id .lonvia_hiking :
526+ mOverlay = OverlayHelper .OVERLAY_HIKING ;
527+ break ;
528+ case R .id .lonvia_cycling :
529+ mOverlay = OverlayHelper .OVERLAY_CYCLING ;
530+ break ;
531+ }
532+ mPrefs .edit ().putInt (PREF_BASE_MAP , mBaseMap ).apply ();
533+ mPrefs .edit ().putInt (PREF_OVERLAY , mOverlay ).apply ();
534+ setBaseMap ();
535+ setTilesOverlay ();
536+ }
537+ return true ;
538+ }
539+
421540 @ Override
422541 public void onLocationChanged (Location location ) {
423542 mCurrentLocation = location ;
@@ -464,16 +583,8 @@ public void onDestroy() {
464583 mCompassOverlay = null ;
465584 mScaleBarOverlay = null ;
466585 mRotationGestureOverlay = null ;
467- }
586+ mOverlayHelper . destroy ();
468587
469- /**
470- * Popup menu click
471- * @param menuItem
472- * @return
473- */
474- @ Override
475- public boolean onMenuItemClick (MenuItem menuItem ) {
476- return false ;
477588 }
478589
479590 public interface OnFragmentInteractionListener {
0 commit comments