From 2fe3214660aa0948969892d20a73a2a303190b7e Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 28 Jun 2012 17:00:32 -0700 Subject: [PATCH] Fix bug so only one map overlap is displayed. --- .../mytracks/content/TrackDataListeners.java | 22 ++----------------- .../apps/mytracks/fragments/MapFragment.java | 12 ++++++---- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataListeners.java b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataListeners.java index 0a813291d..7a85b9eef 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataListeners.java +++ b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataListeners.java @@ -27,7 +27,6 @@ import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; /** * Manager for the external data listeners and their listening types. @@ -77,13 +76,6 @@ class TrackDataListeners { private final Map registeredListeners = new HashMap(); - /** - * Map of external paused listener to its registration details. - * This will automatically discard listeners which are GCed. - */ - private final WeakHashMap oldListeners = - new WeakHashMap(); - /** Map of data type to external listeners interested in it. */ private final Map> listenerSetsPerType = new EnumMap>(ListenerDataType.class); @@ -109,10 +101,7 @@ class TrackDataListeners { throw new IllegalStateException("Listener already registered"); } - ListenerRegistration registration = oldListeners.remove(listener); - if (registration == null) { - registration = new ListenerRegistration(listener, dataTypes); - } + ListenerRegistration registration = new ListenerRegistration(listener, dataTypes); registeredListeners.put(listener, registration); for (ListenerDataType type : dataTypes) { @@ -142,17 +131,10 @@ class TrackDataListeners { for (ListenerDataType type : match.types) { listenerSetsPerType.get(type).remove(listener); } - - // Keep it around in case it's re-registered soon - oldListeners.put(listener, match); } public ListenerRegistration getRegistration(TrackDataListener listener) { - ListenerRegistration registration = registeredListeners.get(listener); - if (registration == null) { - registration = oldListeners.get(listener); - } - return registration; + return registeredListeners.get(listener); } public Set getListenersFor(ListenerDataType type) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java index 81333b9ed..d0196a512 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MapFragment.java @@ -33,6 +33,7 @@ import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapController; import com.google.android.maps.MapView; +import com.google.android.maps.Overlay; import com.google.android.maps.mytracks.R; import android.content.Intent; @@ -52,6 +53,7 @@ import android.widget.TextView; import android.widget.Toast; import java.util.EnumSet; +import java.util.List; /** * A fragment to display map to the user. @@ -89,8 +91,8 @@ public class MapFragment extends Fragment // UI elements private View mapViewContainer; - private MapOverlay mapOverlay; private MapView mapView; + private MapOverlay mapOverlay; private ImageButton myLocationImageButton; private TextView messageTextView; @@ -104,14 +106,16 @@ public class MapFragment extends Fragment public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mapViewContainer = ((TrackDetailActivity) getActivity()).getMapViewContainer(); - + mapView = (MapView) mapViewContainer.findViewById(R.id.map_view); mapOverlay = new MapOverlay(getActivity()); - mapView = (MapView) mapViewContainer.findViewById(R.id.map_view); + List overlays = mapView.getOverlays(); + overlays.clear(); + overlays.add(mapOverlay); + mapView.requestFocus(); mapView.setOnTouchListener(this); mapView.setBuiltInZoomControls(true); - mapView.getOverlays().add(mapOverlay); myLocationImageButton = (ImageButton) mapViewContainer.findViewById(R.id.map_my_location); myLocationImageButton.setOnClickListener(new View.OnClickListener() { @Override