diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java index 228ce5c..299755a 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java @@ -4,6 +4,7 @@ import android.Manifest; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; +import android.graphics.Color; import android.hardware.GeomagneticField; import android.location.Location; import android.location.LocationManager; @@ -11,7 +12,10 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.RequiresApi; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.Surface; @@ -25,13 +29,17 @@ import org.osmdroid.config.Configuration; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; +import org.osmdroid.views.overlay.Polyline; import org.osmdroid.views.overlay.compass.CompassOverlay; import org.osmdroid.views.overlay.compass.IOrientationConsumer; import org.osmdroid.views.overlay.compass.IOrientationProvider; import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider; +import org.osmdroid.views.overlay.infowindow.BasicInfoWindow; import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider; import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay; +import java.util.ArrayList; +import java.util.List; import java.util.Observable; import java.util.Observer; @@ -57,6 +65,13 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu private final int REQUEST_CODE_ASK_PERMISSION = 123; + private static final float LINE_WIDTH_BIG = 12; + private static final int COLOR_POLYLINE_STATIC = Color.RED; + List lGeoPoint = new ArrayList<>(); + + private FloatingActionButton start_stop_trace; + private boolean traceurActivated = false; + @RequiresApi(api = Build.VERSION_CODES.M) protected void checkPermissions() { int hasLocationPermission = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION); @@ -136,12 +151,29 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu } }); + start_stop_trace = (FloatingActionButton) findViewById(R.id.start_stop_trace); + start_stop_trace.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + changeStatusTrace(); + } + }); + if (serviceGps == null) { serviceGps = new ServiceGps(); ((Observable) serviceGps).addObserver(this); } } + private void changeStatusTrace() { + this.traceurActivated = !this.traceurActivated; + if (this.traceurActivated) { + this.start_stop_trace.setImageResource(R.drawable.ic_menu_offline); + } else { + this.start_stop_trace.setImageResource(R.drawable.ic_menu_mylocation); + } + } + @Override public void onResume(){ super.onResume(); @@ -314,7 +346,22 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu @Override public void update(Observable observable, Object o) { if (observable == serviceGps) { - if (o instanceof String && (String) o == ServiceGps.NOTIF_NEW_LOCATION) { + if (o instanceof String && (String) o == ServiceGps.NOTIF_NEW_LOCATION && traceurActivated) { + lGeoPoint.add(((ServiceGps) serviceGps).getCurrentGeoPoint()); + map.getController().setCenter(((ServiceGps) serviceGps).getCurrentGeoPoint()); + + Polyline line = new Polyline(map); + line.setTitle("Traceur"); + line.setSubDescription(Polyline.class.getCanonicalName()); + line.setWidth(LINE_WIDTH_BIG); + line.setColor(COLOR_POLYLINE_STATIC); + line.setPoints(lGeoPoint); + line.setGeodesic(true); + line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, map)); + map.getOverlayManager().add(line); + map.invalidate(); + + float orientation = ((ServiceGps) serviceGps).getOrientation(deviceOrientation); if (orientation >= 0) { map.setMapOrientation(orientation); 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 a04780f..3b65ac8 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java @@ -6,6 +6,8 @@ import android.location.LocationManager; import android.os.Bundle; import android.util.Log; +import org.osmdroid.util.GeoPoint; + import java.util.Observable; import fr.chteufleur.mytrackingdog.MainActivity; @@ -81,4 +83,11 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe public void onProviderDisabled(String s) { stop(); } + + public GeoPoint getCurrentGeoPoint() { + if (currentLocation == null) { + return null; + } + return new GeoPoint(currentLocation.getLatitude(), currentLocation.getLongitude(), currentLocation.getAltitude()); + } } diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml index 53f5345..863d2ea 100644 --- a/app/src/main/res/layout/main.xml +++ b/app/src/main/res/layout/main.xml @@ -1,22 +1,31 @@ - + android:layout_height="match_parent" + tools:context=".MainActivity"> - + - \ No newline at end of file + + +