Skip to content

Commit 1ec03cc

Browse files
author
Eric Petzel
committed
Merge branch 'bmaslakov-master'
2 parents 76d017f + 1306ace commit 1ec03cc

File tree

7 files changed

+47
-49
lines changed

7 files changed

+47
-49
lines changed

library/src/main/java/com/airbnb/android/airmapview/AirMapView.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,9 @@ public void onMapClick(LatLng latLng) {
362362
}
363363
}
364364

365-
@Override public void onMapMarkerClick(long id) {
365+
@Override public void onMapMarkerClick(AirMapMarker<?> airMarker) {
366366
if (onMapMarkerClickListener != null) {
367-
onMapMarkerClickListener.onMapMarkerClick(id);
368-
}
369-
}
370-
371-
@Override public void onMapMarkerClick(Marker marker) {
372-
if (onMapMarkerClickListener != null) {
373-
onMapMarkerClickListener.onMapMarkerClick(marker);
367+
onMapMarkerClickListener.onMapMarkerClick(airMarker);
374368
}
375369
}
376370

@@ -432,15 +426,9 @@ public void onMapMarkerDragEnd(long id, LatLng latLng) {
432426
}
433427
}
434428

435-
@Override public void onInfoWindowClick(long id) {
436-
if (onInfoWindowClickListener != null) {
437-
onInfoWindowClickListener.onInfoWindowClick(id);
438-
}
439-
}
440-
441-
@Override public void onInfoWindowClick(Marker marker) {
429+
@Override public void onInfoWindowClick(AirMapMarker<?> airMarker) {
442430
if (onInfoWindowClickListener != null) {
443-
onInfoWindowClickListener.onInfoWindowClick(marker);
431+
onInfoWindowClickListener.onInfoWindowClick(airMarker);
444432
}
445433
}
446434
}

library/src/main/java/com/airbnb/android/airmapview/NativeGoogleMapFragment.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
import org.json.JSONException;
3636
import org.json.JSONObject;
3737

38+
import java.util.HashMap;
39+
import java.util.Map;
40+
3841
public class NativeGoogleMapFragment extends SupportMapFragment implements AirMapInterface {
3942

4043
private static final String TAG = NativeGoogleMapFragment.class.getSimpleName();
@@ -43,6 +46,7 @@ public class NativeGoogleMapFragment extends SupportMapFragment implements AirMa
4346
private OnMapLoadedListener onMapLoadedListener;
4447
private boolean myLocationEnabled;
4548
private GeoJsonLayer layerOnMap;
49+
private final Map<Marker, AirMapMarker<?>> markers = new HashMap<>();
4650

4751
public static NativeGoogleMapFragment newInstance(AirGoogleMapOptions options) {
4852
return new NativeGoogleMapFragment().setArguments(options);
@@ -86,12 +90,14 @@ public void onMapReady(GoogleMap googleMap) {
8690
}
8791

8892
@Override public void clearMarkers() {
93+
markers.clear();
8994
googleMap.clear();
9095
}
9196

9297
@Override public void addMarker(AirMapMarker airMarker) {
9398
Marker marker = googleMap.addMarker(airMarker.getMarkerOptions());
9499
airMarker.setGoogleMarker(marker);
100+
markers.put(marker, airMarker);
95101
}
96102

97103
@Override
@@ -104,14 +110,18 @@ public void moveMarker(AirMapMarker marker, LatLng to) {
104110
Marker nativeMarker = marker.getMarker();
105111
if (nativeMarker != null) {
106112
nativeMarker.remove();
113+
markers.remove(nativeMarker);
107114
}
108115
}
109116

110117
@Override public void setOnInfoWindowClickListener(final OnInfoWindowClickListener listener) {
111118
googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
112119
@Override
113120
public void onInfoWindowClick(Marker marker) {
114-
listener.onInfoWindowClick(marker);
121+
AirMapMarker airMarker = markers.get(marker);
122+
if (airMarker != null) {
123+
listener.onInfoWindowClick(airMarker);
124+
}
115125
}
116126
});
117127
}
@@ -217,7 +227,10 @@ public void setOnCameraChangeListener(final OnCameraChangeListener onCameraChang
217227
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
218228
@Override
219229
public boolean onMarkerClick(Marker marker) {
220-
listener.onMapMarkerClick(marker);
230+
AirMapMarker airMarker = markers.get(marker);
231+
if (airMarker != null) {
232+
listener.onMapMarkerClick(airMarker);
233+
}
221234
return false;
222235
}
223236
});

library/src/main/java/com/airbnb/android/airmapview/WebViewMapFragment.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
import org.json.JSONException;
3535
import org.json.JSONObject;
3636

37+
import java.util.HashMap;
3738
import java.util.Locale;
39+
import java.util.Map;
3840

3941
public abstract class WebViewMapFragment extends Fragment implements AirMapInterface {
4042
private static final String TAG = WebViewMapFragment.class.getSimpleName();
@@ -55,6 +57,7 @@ public abstract class WebViewMapFragment extends Fragment implements AirMapInter
5557
private boolean loaded;
5658
private boolean ignoreNextMapMove;
5759
private View infoWindowView;
60+
private final Map<Long, AirMapMarker<?>> markers = new HashMap<>();
5861

5962
private boolean trackUserLocation = false;
6063

@@ -157,6 +160,7 @@ public void unhighlightMarker(long markerId) {
157160

158161
@Override public void addMarker(AirMapMarker marker) {
159162
LatLng latLng = marker.getLatLng();
163+
markers.put(marker.getId(), marker);
160164
webView.loadUrl(
161165
String.format(Locale.US, "javascript:addMarkerWithId(%1$f, %2$f, %3$d, '%4$s', '%5$s', %6$b);",
162166
latLng.latitude, latLng.longitude, marker.getId(), marker.getTitle(),
@@ -171,10 +175,12 @@ public void unhighlightMarker(long markerId) {
171175
}
172176

173177
@Override public void removeMarker(AirMapMarker marker) {
178+
markers.remove(marker.getId());
174179
webView.loadUrl(String.format(Locale.US, "javascript:removeMarker(%1$d);", marker.getId()));
175180
}
176181

177182
public void clearMarkers() {
183+
markers.clear();
178184
webView.loadUrl("javascript:clearMarkers();");
179185
}
180186

@@ -398,12 +404,13 @@ public void run() {
398404
});
399405
}
400406

401-
@JavascriptInterface public void markerClick(final long markerId) {
407+
@JavascriptInterface public void markerClick(long markerId) {
408+
final AirMapMarker airMapMarker = markers.get(markerId);
402409
handler.post(new Runnable() {
403410
@Override
404411
public void run() {
405412
if (onMapMarkerClickListener != null) {
406-
onMapMarkerClickListener.onMapMarkerClick(markerId);
413+
onMapMarkerClickListener.onMapMarkerClick(airMapMarker);
407414
}
408415

409416
if (infoWindowView != null) {
@@ -412,21 +419,22 @@ public void run() {
412419

413420
// TODO convert to custom dialog fragment
414421
if (infoWindowCreator != null) {
415-
infoWindowView = infoWindowCreator.createInfoWindow(markerId);
422+
infoWindowView = infoWindowCreator.createInfoWindow(airMapMarker);
416423
if (infoWindowView != null) {
417424
mLayout.addView(infoWindowView);
418425
infoWindowView.setOnClickListener(new View.OnClickListener() {
419426
@Override
420427
public void onClick(@NonNull View v) {
421428
if (onInfoWindowClickListener != null) {
422-
onInfoWindowClickListener.onInfoWindowClick(markerId);
429+
onInfoWindowClickListener.onInfoWindowClick(airMapMarker);
423430
}
424431
}
425432
});
426433
}
427434
} else {
428435
webView.loadUrl(
429-
String.format(Locale.US, "javascript:showDefaultInfoWindow(%1$d);", markerId));
436+
String.format(Locale.US, "javascript:showDefaultInfoWindow(%1$d);",
437+
airMapMarker.getId()));
430438
}
431439

432440
ignoreNextMapMove = true;
@@ -467,14 +475,13 @@ public void run() {
467475
});
468476
}
469477

470-
471-
472-
@JavascriptInterface public void defaultInfoWindowClick(final long markerId) {
478+
@JavascriptInterface public void defaultInfoWindowClick(long markerId) {
479+
final AirMapMarker airMapMarker = markers.get(markerId);
473480
handler.post(new Runnable() {
474481
@Override
475482
public void run() {
476483
if (onInfoWindowClickListener != null) {
477-
onInfoWindowClickListener.onInfoWindowClick(markerId);
484+
onInfoWindowClickListener.onInfoWindowClick(airMapMarker);
478485
}
479486
}
480487
});

library/src/main/java/com/airbnb/android/airmapview/listeners/InfoWindowCreator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import android.view.View;
44

5+
import com.airbnb.android.airmapview.AirMapMarker;
6+
57
public interface InfoWindowCreator {
6-
// TODO: this should take an AirMapMarker instead of just the ID
7-
View createInfoWindow(long id);
8+
9+
View createInfoWindow(AirMapMarker<?> airMarker);
810
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.airbnb.android.airmapview.listeners;
22

3-
import com.google.android.gms.maps.model.Marker;
3+
import com.airbnb.android.airmapview.AirMapMarker;
44

55
public interface OnInfoWindowClickListener {
66

7-
void onInfoWindowClick(long id);
8-
9-
void onInfoWindowClick(Marker marker);
7+
void onInfoWindowClick(AirMapMarker<?> airMarker);
108
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.airbnb.android.airmapview.listeners;
22

3-
import com.google.android.gms.maps.model.Marker;
3+
import com.airbnb.android.airmapview.AirMapMarker;
44

55
public interface OnMapMarkerClickListener {
66

7-
void onMapMarkerClick(long id);
8-
9-
void onMapMarkerClick(Marker marker);
7+
void onMapMarkerClick(AirMapMarker<?> airMarker);
108
}

sample/src/main/java/com/airbnb/airmapview/sample/MainActivity.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -220,20 +220,12 @@ private void appendLog(String msg) {
220220
logsScrollView.fullScroll(View.FOCUS_DOWN);
221221
}
222222

223-
@Override public void onMapMarkerClick(long id) {
224-
appendLog("Map onMapMarkerClick triggered with id " + id);
223+
@Override public void onMapMarkerClick(AirMapMarker airMarker) {
224+
appendLog("Map onMapMarkerClick triggered with id " + airMarker.getId());
225225
}
226226

227-
@Override public void onMapMarkerClick(Marker marker) {
228-
appendLog("Map onMapMarkerClick triggered with marker " + marker.getId());
229-
}
230-
231-
@Override public void onInfoWindowClick(long id) {
232-
appendLog("Map onInfoWindowClick triggered with id " + id);
233-
}
234-
235-
@Override public void onInfoWindowClick(Marker marker) {
236-
appendLog("Map onInfoWindowClick triggered with marker " + marker.getId());
227+
@Override public void onInfoWindowClick(AirMapMarker airMarker) {
228+
appendLog("Map onInfoWindowClick triggered with id " + airMarker.getId());
237229
}
238230

239231
@Override public void onLatLngScreenLocationReady(Point point) {

0 commit comments

Comments
 (0)