diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 425d1d6..dbd585b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -30,4 +30,6 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java
index 04c557b..1806d3c 100644
--- a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java
+++ b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java
@@ -12,6 +12,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
+import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
@@ -181,7 +182,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
textViewCurrentLocation.setVisibility(View.GONE);
if (serviceGps == null) {
- serviceGps = new ServiceGps();
+ serviceGps = new ServiceGps((Vibrator) getSystemService(Context.VIBRATOR_SERVICE));
serviceGps.addObserver(this);
}
}
diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java
index 2bcdc2c..5481473 100644
--- a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java
+++ b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java
@@ -1,11 +1,15 @@
package fr.chteufleur.mytrackingdog.services;
+import android.content.res.Resources;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.util.Log;
import org.xmlpull.v1.XmlPullParserException;
@@ -40,6 +44,10 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
private final Traces traces = new Traces();
+ public ServiceGps(Vibrator vibrator) {
+ this.vibrator = vibrator;
+ }
+
public void setLocationManager(LocationManager locationManager) {
this.locationManager = locationManager;
}
@@ -90,6 +98,8 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
Log.i(TAG, "Stop location");
}
+ private final Vibrator vibrator;
+ private boolean nearObjectVibration = false;
@Override
public void onLocationChanged(Location location) {
@@ -98,6 +108,27 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
traces.addCurrentPoint(currentLocation);
setChanged();
notifyObservers(NOTIF_NEW_LOCATION);
+
+ if (isDogActivated()) {
+ if (isNearObjects()) {
+ if (!nearObjectVibration) {
+ nearObjectVibration = true;
+ vibrate(1_000);
+ }
+ } else {
+ nearObjectVibration = false;
+ }
+ }
+ }
+
+ private void vibrate(int timeVibrationMs) {
+ if (this.vibrator != null) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ this.vibrator.vibrate(VibrationEffect.createOneShot(timeVibrationMs, VibrationEffect.DEFAULT_AMPLITUDE));
+ } else {
+ this.vibrator.vibrate(timeVibrationMs);
+ }
+ }
}
@Override
@@ -187,11 +218,18 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
return traces.getPointObjectDog(lat, lon);
}
+ public boolean isNearObjects() {
+ return !foundNearObjects(20).isEmpty();
+ }
public List foundNearObjects() {
+ return foundNearObjects(10);
+ }
+
+ public List foundNearObjects(int distance) {
List ret = new ArrayList<>();
MyLocation curLoc = currentLocation;
for (MyLocation ml: getListGeoPointObjectsTrail()) {
- if (curLoc.distanceTo(ml) < 10 && ml instanceof WayPointLocation) {
+ if (curLoc.distanceTo(ml) < distance && ml instanceof WayPointLocation) {
ret.add((WayPointLocation) ml);
}
}