diff --git a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 85f5ac1fa..a832ee390 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -81,6 +81,11 @@ dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1' + // Directions SDK + compile ('com.mapbox.mapboxsdk:mapbox-android-directions:1.0.0-SNAPSHOT@aar'){ + transitive=true + } + // Testing dependencies testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index aaa65e570..af74d52c2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -39,8 +39,9 @@ android:name=".BulkMarkerActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/activity_add_bulk_markers" /> - + @@ -62,11 +63,13 @@ + - diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/DirectionsActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/DirectionsActivity.java new file mode 100644 index 000000000..837790280 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/DirectionsActivity.java @@ -0,0 +1,183 @@ +package com.mapbox.mapboxsdk.testapp; + +import android.graphics.Color; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MenuItem; + +import com.mapbox.directions.DirectionsCriteria; +import com.mapbox.directions.MapboxDirections; +import com.mapbox.directions.service.models.DirectionsResponse; +import com.mapbox.directions.service.models.DirectionsRoute; +import com.mapbox.directions.service.models.Waypoint; +import com.mapbox.mapboxsdk.annotations.MarkerOptions; +import com.mapbox.mapboxsdk.annotations.PolylineOptions; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.utils.ApiAccess; +import com.mapbox.mapboxsdk.views.MapView; + +import java.util.List; + +import retrofit.Callback; +import retrofit.Response; +import retrofit.Retrofit; + +public class DirectionsActivity extends AppCompatActivity { + + private final static String LOG_TAG = "DirectionsActivity"; + + private MapView mMapView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_directions); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } + + mMapView = (MapView) findViewById(R.id.mapView); + mMapView.setAccessToken(ApiAccess.getToken(this)); + mMapView.onCreate(savedInstanceState); + + // load routes async + loadRoute(); + } + + private void loadRoute() { + // Dupont Circle (Washington, DC) + Waypoint origin = new Waypoint(-77.04341, 38.90962); + + // The White House (Washington, DC) + Waypoint destination = new Waypoint(-77.0365, 38.8977); + + // Set map at centroid + LatLng centroid = new LatLng( + (origin.getLatitude() + destination.getLatitude()) / 2, + (origin.getLongitude() + destination.getLongitude()) / 2); + mMapView.setCenterCoordinate(centroid); + mMapView.setZoomLevel(14); + + // Add origin and destination to the map + mMapView.addMarker(new MarkerOptions() + .position(new LatLng(origin.getLatitude(), origin.getLongitude())) + .title("Origin") + .snippet("Dupont Circle")); + mMapView.addMarker(new MarkerOptions() + .position(new LatLng(destination.getLatitude(), destination.getLongitude())) + .title("Destination") + .snippet("The White House")); + + // Get route from API + getRoute(origin, destination); + } + + private void getRoute(Waypoint origin, Waypoint destination) { + MapboxDirections md = new MapboxDirections.Builder() + .setAccessToken(ApiAccess.getToken(this)) + .setOrigin(origin) + .setDestination(destination) + .setProfile(DirectionsCriteria.PROFILE_WALKING) + .build(); + + md.enqueue(new Callback() { + @Override + public void onResponse(Response response, Retrofit retrofit) { + // You can get generic HTTP info about the response + Log.d(LOG_TAG, "Response code: " + response.code()); + + // Print some info about the route + DirectionsRoute currentRoute = response.body().getRoutes().get(0); + Log.d(LOG_TAG, "Distance: " + currentRoute.getDistance()); + + // Draw the route on the map + drawRoute(currentRoute); + } + + @Override + public void onFailure(Throwable t) { + Log.e(LOG_TAG, "Error: " + t.getMessage()); + } + }); + } + + private void drawRoute(DirectionsRoute route) { + // Convert List into LatLng[] + List waypoints = route.getGeometry().getWaypoints(); + LatLng[] point = new LatLng[waypoints.size()]; + for (int i = 0; i < waypoints.size(); i++) { + point[i] = new LatLng( + waypoints.get(i).getLatitude(), + waypoints.get(i).getLongitude()); + } + + // Draw Points on MapView + mMapView.addPolyline(new PolylineOptions() + .add(point) + .color(Color.parseColor("#3887be")) + .width(5)); + } + + @Override + protected void onStart() { + super.onStart(); + mMapView.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mMapView.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + mMapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mMapView.onStop(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mMapView.onSaveInstanceState(outState); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mMapView.onLowMemory(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java index e9bd1aac5..63fa396af 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java @@ -405,6 +405,10 @@ public class MainActivity extends AppCompatActivity { } return true; + case R.id.action_directions: + startActivity(new Intent(getApplicationContext(), DirectionsActivity.class)); + return true; + default: return changeMapStyle(menuItem.getItemId()); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_directions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_directions.xml new file mode 100644 index 000000000..2c474849a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_directions.xml @@ -0,0 +1,9 @@ + + + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_location.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_location.xml new file mode 100644 index 000000000..027a64472 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_location.xml @@ -0,0 +1,9 @@ + + + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_directions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_directions.xml new file mode 100644 index 000000000..fa520a8f6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_directions.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml index 0c1258531..ad9deba18 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml @@ -149,6 +149,12 @@ android:icon="@drawable/ic_trending_up_24dp" android:title="@string/activity_polyline" /> + + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml index 58ea17d73..c096284fd 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml @@ -19,6 +19,7 @@ Polyline Activity Animate Coordinate Change Custom Layer + Directions Activity Main Activity Controls Main Activity Styles diff --git a/platform/android/build.gradle b/platform/android/build.gradle index 3a9b035a5..a03a4a190 100644 --- a/platform/android/build.gradle +++ b/platform/android/build.gradle @@ -17,6 +17,8 @@ buildscript { allprojects { repositories { jcenter() + mavenCentral() + maven { url "http://oss.sonatype.org/content/repositories/snapshots/" } } }