22
33import static android .view .View .GONE ;
44import static android .view .View .VISIBLE ;
5-
65import static space .itoncek .trailcompass .app .utils .RunnableUtils .runOnBackgroundThread ;
76
87import android .content .Intent ;
98import android .os .Bundle ;
109import android .util .Log ;
10+ import android .view .View ;
11+ import android .view .ViewGroup ;
1112import android .widget .TextView ;
1213
1314import androidx .activity .EdgeToEdge ;
1617import androidx .core .view .ViewCompat ;
1718import androidx .core .view .WindowInsetsCompat ;
1819
20+ import org .mapsforge .core .model .LatLong ;
1921import org .mapsforge .core .util .Parameters ;
2022import org .mapsforge .map .android .graphics .AndroidGraphicFactory ;
2123import org .mapsforge .map .android .util .AndroidUtil ;
24+ import org .mapsforge .map .android .view .MapView ;
2225import org .mapsforge .map .datastore .MapDataStore ;
26+ import org .mapsforge .map .layer .Layers ;
2327import org .mapsforge .map .layer .cache .TileCache ;
28+ import org .mapsforge .map .layer .overlay .Marker ;
2429import org .mapsforge .map .layer .renderer .TileRendererLayer ;
2530import org .mapsforge .map .reader .MapFile ;
2631import org .mapsforge .map .rendertheme .internal .MapsforgeThemes ;
3338import space .itoncek .trailcompass .app .R ;
3439import space .itoncek .trailcompass .app .hideandseek .api .HideAndSeekAPIFactory ;
3540import space .itoncek .trailcompass .app .hideandseek .seeker_ui .SeekerMapView ;
41+ import space .itoncek .trailcompass .app .utils .MapUtils ;
3642import space .itoncek .trailcompass .client .api .HideAndSeekAPI ;
3743
3844public class HiderMapView extends AppCompatActivity {
3945 private HideAndSeekAPI api ;
40- private org .mapsforge .map .android .view .MapView mapView ;
4146 File mapfile ;
4247
4348 @ Override
@@ -53,10 +58,9 @@ protected void onCreate(Bundle savedInstanceState) {
5358 AndroidGraphicFactory .createInstance (getApplication ());
5459
5560 mapfile = new File (getCacheDir () + "/map.map" );
56- mapView = findViewById (R .id .map_mapview );
5761 api = new HideAndSeekAPIFactory (getFilesDir ()).generateHideAndSeekAPI ();
5862
59- if (amIHider ()) {
63+ if (amIHider ()) {
6064 showAdminView ();
6165 setUsername ();
6266 setupTimer ();
@@ -72,12 +76,12 @@ protected void onCreate(Bundle savedInstanceState) {
7276 private boolean amIHider () {
7377 AtomicBoolean result = new AtomicBoolean (false );
7478 CountDownLatch cdl = new CountDownLatch (1 );
75- runOnBackgroundThread (()-> {
79+ runOnBackgroundThread (() -> {
7680 try {
7781 result .set (api .amIHider ());
7882 cdl .countDown ();
7983 } catch (IOException e ) {
80- Log .e (HiderMapView .class .getName (),"Unable to determine if I'm a hider or not" ,e );
84+ Log .e (HiderMapView .class .getName (), "Unable to determine if I'm a hider or not" , e );
8185 }
8286 });
8387 try {
@@ -89,7 +93,7 @@ private boolean amIHider() {
8993 }
9094
9195 private void setupButtons () {
92- findViewById (R .id .map_resetButton ).setOnClickListener ((c )-> {
96+ findViewById (R .id .map_resetButton ).setOnClickListener ((c ) -> {
9397 setUsername ();
9498 showAdminView ();
9599 setupTimer ();
@@ -102,10 +106,10 @@ private void setupTimer() {
102106 }
103107
104108 private void setUsername () {
105- Thread t = new Thread (()-> {
109+ Thread t = new Thread (() -> {
106110 try {
107111 String name = api .myName ();
108- runOnUiThread (()-> ((TextView )findViewById (R .id .map_username )).setText (name ));
112+ runOnUiThread (() -> ((TextView ) findViewById (R .id .map_username )).setText (name ));
109113 } catch (IOException e ) {
110114 Log .e (HiderMapView .class .getName (), "Unable to contact the main server" , e );
111115 }
@@ -114,12 +118,12 @@ private void setUsername() {
114118 }
115119
116120 private void showAdminView () {
117- Thread t = new Thread (()-> {
121+ Thread t = new Thread (() -> {
118122 try {
119123 if (api .amIAdmin ()) {
120- runOnUiThread (()-> findViewById (R .id .map_switchToSettings ).setVisibility (VISIBLE ));
124+ runOnUiThread (() -> findViewById (R .id .map_switchToSettings ).setVisibility (VISIBLE ));
121125 } else {
122- runOnUiThread (()-> findViewById (R .id .map_switchToSettings ).setVisibility (GONE ));
126+ runOnUiThread (() -> findViewById (R .id .map_switchToSettings ).setVisibility (GONE ));
123127 }
124128 } catch (IOException e ) {
125129 Log .e (HiderMapView .class .getName (), "Unable to contact the main server" , e );
@@ -129,29 +133,48 @@ private void showAdminView() {
129133 }
130134
131135 private void openMap () {
132- mapView .setClickable (true );
133- mapView .getMapScaleBar ().setVisible (true );
134- mapView .setBuiltInZoomControls (true );
136+ MapView mw = new MapView (this );
137+ mw .setClickable (true );
138+ mw .getMapScaleBar ().setVisible (true );
139+ mw .setBuiltInZoomControls (true );
135140
136141 Parameters .NUMBER_OF_THREADS = 8 ;
137142 Parameters .ANTI_ALIASING = true ;
138143 Parameters .PARENT_TILES_RENDERING = Parameters .ParentTilesRendering .SPEED ;
139144
140145 TileCache tileCache = AndroidUtil .createTileCache (this , "mapcache" ,
141- mapView .getModel ().displayModel .getTileSize (), 1f ,
142- mapView .getModel ().frameBufferModel .getOverdrawFactor ());
146+ mw .getModel ().displayModel .getTileSize (), 1f ,
147+ mw .getModel ().frameBufferModel .getOverdrawFactor ());
143148
144149 MapDataStore mapDataStore = new MapFile (mapfile );
145150 TileRendererLayer tileRendererLayer = new TileRendererLayer (tileCache , mapDataStore ,
146- mapView .getModel ().mapViewPosition , AndroidGraphicFactory .INSTANCE );
151+ mw .getModel ().mapViewPosition , AndroidGraphicFactory .INSTANCE );
147152 tileRendererLayer .setCacheTileMargin (1 );
148153 tileRendererLayer .setCacheZoomMinus (1 );
149154 tileRendererLayer .setCacheZoomPlus (2 );
150155 tileRendererLayer .setXmlRenderTheme (MapsforgeThemes .OSMARENDER );
151156
152- mapView .getLayerManager ().getLayers ().add (tileRendererLayer );
157+ Layers layers = mw .getLayerManager ().getLayers ();
158+ layers .add (tileRendererLayer );
159+
160+ Marker m1 = MapUtils .createMarker (this , R .drawable .location_marker_blue , new LatLong (50.0835035 , 14.4341259 ));
161+ Marker m2 = MapUtils .createMarker (this , R .drawable .location_marker_green , new LatLong (50.0948317 , 14.4158918 ));
162+ Marker m3 = MapUtils .createMarker (this , R .drawable .location_marker_red , new LatLong (50.0833949 , 14.3950736 ));
163+ Marker m4 = MapUtils .createMarker (this , R .drawable .location_marker_orange , new LatLong (50.0637249 , 14.4165013 ));
164+
165+ layers .add (m1 );
166+ layers .add (m2 );
167+ layers .add (m3 );
168+ layers .add (m4 );
169+
170+ mw .setCenter (mapDataStore .startPosition ());
171+ mw .setZoomLevel (mapDataStore .startZoomLevel ());
172+ View C = findViewById (R .id .map_mapview );
173+ ViewGroup parent = (ViewGroup ) C .getParent ();
174+ int index = parent .indexOfChild (C );
175+ parent .removeView (C );
176+ C = mw ;
177+ parent .addView (C , index );
153178
154- mapView .setCenter (mapDataStore .startPosition ());
155- mapView .setZoomLevel (mapDataStore .startZoomLevel ());
156179 }
157180}
0 commit comments