aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorcachapa <cachapa@cachapa-laptop>2011-09-05 21:26:21 +0200
committercachapa <cachapa@cachapa-laptop>2011-09-05 21:26:21 +0200
commit968ef45b3d7a2b05a50b28020269fedd704e883a (patch)
treed69a9d6335a12f33c8e3b97068dd3f3cce4b9bdc /src
parentf3c39234c6b9d0eb19be699aa0e41a9f44c25f96 (diff)
downloadcgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.zip
cgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.tar.gz
cgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.tar.bz2
Fixes issue #328
Releases automatic position tracking when the map is manually dragged by the user
Diffstat (limited to 'src')
-rw-r--r--src/cgeo/geocaching/googlemaps/googleMapView.java18
-rw-r--r--src/cgeo/geocaching/mapcommon/cgeomap.java19
-rw-r--r--src/cgeo/geocaching/mapinterfaces/MapViewImpl.java1
-rw-r--r--src/cgeo/geocaching/mapinterfaces/OnDragListener.java12
-rw-r--r--src/cgeo/geocaching/mapsforge/mfMapView.java28
5 files changed, 72 insertions, 6 deletions
diff --git a/src/cgeo/geocaching/googlemaps/googleMapView.java b/src/cgeo/geocaching/googlemaps/googleMapView.java
index 8a06edb..1ca2d8e 100644
--- a/src/cgeo/geocaching/googlemaps/googleMapView.java
+++ b/src/cgeo/geocaching/googlemaps/googleMapView.java
@@ -18,6 +18,7 @@ import cgeo.geocaching.mapinterfaces.GeoPointImpl;
import cgeo.geocaching.mapinterfaces.MapControllerImpl;
import cgeo.geocaching.mapinterfaces.MapProjectionImpl;
import cgeo.geocaching.mapinterfaces.MapViewImpl;
+import cgeo.geocaching.mapinterfaces.OnDragListener;
import cgeo.geocaching.mapinterfaces.OverlayBase;
import cgeo.geocaching.mapinterfaces.OverlayImpl;
import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType;
@@ -26,8 +27,9 @@ import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
-public class googleMapView extends MapView implements MapViewImpl{
+public class googleMapView extends MapView implements MapViewImpl {
private GestureDetector gestureDetector;
+ private OnDragListener onDragListener;
public googleMapView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -159,6 +161,11 @@ public class googleMapView extends MapView implements MapViewImpl{
}
@Override
+ public void setOnDragListener(OnDragListener onDragListener) {
+ this.onDragListener = onDragListener;
+ }
+
+ @Override
public boolean onTouchEvent(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return super.onTouchEvent(ev);
@@ -170,5 +177,14 @@ public class googleMapView extends MapView implements MapViewImpl{
getController().zoomInFixing((int) e.getX(), (int) e.getY());
return true;
}
+
+ @Override
+ public boolean onScroll(MotionEvent e1, MotionEvent e2,
+ float distanceX, float distanceY) {
+ if (onDragListener != null) {
+ onDragListener.onDrag();
+ }
+ return super.onScroll(e1, e2, distanceX, distanceY);
+ }
}
}
diff --git a/src/cgeo/geocaching/mapcommon/cgeomap.java b/src/cgeo/geocaching/mapcommon/cgeomap.java
index 7d7d51e..4d595ed 100644
--- a/src/cgeo/geocaching/mapcommon/cgeomap.java
+++ b/src/cgeo/geocaching/mapcommon/cgeomap.java
@@ -29,23 +29,23 @@ import cgeo.geocaching.cgCoord;
import cgeo.geocaching.cgDirection;
import cgeo.geocaching.cgGeo;
import cgeo.geocaching.cgSettings;
-import cgeo.geocaching.cgSettings.mapSourceEnum;
import cgeo.geocaching.cgUpdateDir;
import cgeo.geocaching.cgUpdateLoc;
import cgeo.geocaching.cgUser;
import cgeo.geocaching.cgWaypoint;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.cgSettings.mapSourceEnum;
import cgeo.geocaching.mapinterfaces.ActivityImpl;
import cgeo.geocaching.mapinterfaces.CacheOverlayItemImpl;
import cgeo.geocaching.mapinterfaces.GeoPointImpl;
import cgeo.geocaching.mapinterfaces.MapControllerImpl;
import cgeo.geocaching.mapinterfaces.MapFactory;
import cgeo.geocaching.mapinterfaces.MapViewImpl;
+import cgeo.geocaching.mapinterfaces.OnDragListener;
import cgeo.geocaching.mapinterfaces.UserOverlayItemImpl;
-import cgeo.geocaching.utils.CollectionUtils;
-public class cgeomap extends MapBase {
+public class cgeomap extends MapBase implements OnDragListener {
private static final int MENU_SELECT_MAPVIEW = 1;
private static final int MENU_MAP_LIVE = 2;
@@ -265,6 +265,7 @@ public class cgeomap extends MapBase {
mapView.setBuiltInZoomControls(true);
mapView.displayZoomControls(true);
mapView.preLoad();
+ mapView.setOnDragListener(this);
// initialize overlays
mapView.clearOverlays();
@@ -506,7 +507,7 @@ public class cgeomap extends MapBase {
}
item = menu.findItem(MENU_STORE_CACHES); // store loaded
- if (live && !isLoading() && app.getNotOfflineCount(searchId) > 0 && CollectionUtils.isNotEmpty(caches)) {
+ if (live && !isLoading() && app.getNotOfflineCount(searchId) > 0 && caches != null && caches.size() > 0) {
item.setEnabled(true);
} else {
item.setEnabled(false);
@@ -563,7 +564,7 @@ public class cgeomap extends MapBase {
ArrayList<cgCache> cachesProtected = new ArrayList<cgCache>(caches);
try {
- if (CollectionUtils.isNotEmpty(cachesProtected)) {
+ if (cachesProtected.size() > 0) {
final GeoPointImpl mapCenter = mapView.getMapViewCenter();
final int mapCenterLat = mapCenter.getLatitudeE6();
final int mapCenterLon = mapCenter.getLongitudeE6();
@@ -1763,6 +1764,14 @@ public class cgeomap extends MapBase {
}
}
+ @Override
+ public void onDrag() {
+ if (followMyLocation) {
+ followMyLocation = false;
+ myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off);
+ }
+ }
+
// make geopoint
private GeoPointImpl makeGeoPoint(Double latitude, Double longitude) {
return settings.getMapFactory().getGeoPointBase((int) (latitude * 1e6), (int) (longitude * 1e6));
diff --git a/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java b/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java
index 8e99b3d..4c23f63 100644
--- a/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java
+++ b/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java
@@ -66,4 +66,5 @@ public interface MapViewImpl {
void repaintRequired(OverlayBase overlay);
+ void setOnDragListener(OnDragListener onDragListener);
}
diff --git a/src/cgeo/geocaching/mapinterfaces/OnDragListener.java b/src/cgeo/geocaching/mapinterfaces/OnDragListener.java
new file mode 100644
index 0000000..ebeb13f
--- /dev/null
+++ b/src/cgeo/geocaching/mapinterfaces/OnDragListener.java
@@ -0,0 +1,12 @@
+package cgeo.geocaching.mapinterfaces;
+
+/**
+ * Notifies the parent class when a MapView has been dragged
+ * @author cachapa
+ *
+ */
+public interface OnDragListener {
+
+ public void onDrag();
+
+}
diff --git a/src/cgeo/geocaching/mapsforge/mfMapView.java b/src/cgeo/geocaching/mapsforge/mfMapView.java
index 1e83f33..144a650 100644
--- a/src/cgeo/geocaching/mapsforge/mfMapView.java
+++ b/src/cgeo/geocaching/mapsforge/mfMapView.java
@@ -13,6 +13,9 @@ import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.GestureDetector.SimpleOnGestureListener;
import cgeo.geocaching.cgSettings;
import cgeo.geocaching.mapcommon.cgMapMyOverlay;
import cgeo.geocaching.mapcommon.cgMapOverlay;
@@ -22,14 +25,18 @@ import cgeo.geocaching.mapinterfaces.GeoPointImpl;
import cgeo.geocaching.mapinterfaces.MapControllerImpl;
import cgeo.geocaching.mapinterfaces.MapProjectionImpl;
import cgeo.geocaching.mapinterfaces.MapViewImpl;
+import cgeo.geocaching.mapinterfaces.OnDragListener;
import cgeo.geocaching.mapinterfaces.OverlayBase;
import cgeo.geocaching.mapinterfaces.OverlayImpl;
import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType;
public class mfMapView extends MapView implements MapViewImpl {
+ private GestureDetector gestureDetector;
+ private OnDragListener onDragListener;
public mfMapView(Context context, AttributeSet attrs) {
super(context, attrs);
+ gestureDetector = new GestureDetector(context, new GestureListener());
}
@Override
@@ -205,4 +212,25 @@ public class mfMapView extends MapView implements MapViewImpl {
}
}
+ @Override
+ public void setOnDragListener(OnDragListener onDragListener) {
+ this.onDragListener = onDragListener;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ gestureDetector.onTouchEvent(ev);
+ return super.onTouchEvent(ev);
+ }
+
+ private class GestureListener extends SimpleOnGestureListener {
+ @Override
+ public boolean onScroll(MotionEvent e1, MotionEvent e2,
+ float distanceX, float distanceY) {
+ if (onDragListener != null) {
+ onDragListener.onDrag();
+ }
+ return super.onScroll(e1, e2, distanceX, distanceY);
+ }
+ }
}