From 43a1d752a28d139d48c9f8d38eebd2ba6708e2eb Mon Sep 17 00:00:00 2001 From: Guardiola31337 Date: Wed, 3 Apr 2019 16:50:58 -0400 Subject: [PATCH] add offline options (path and version) to navigation launcher --- .../NavigationLauncherActivity.java | 22 +++++++++++++++++++ .../ui/v5/MapboxNavigationActivity.java | 11 ++++++++-- .../navigation/ui/v5/NavigationLauncher.java | 13 +++++++++++ .../ui/v5/NavigationLauncherOptions.java | 22 +++++++++++++++++++ .../navigation/ui/v5/NavigationUiOptions.java | 6 +++++ .../ui/v5/NavigationViewOptions.java | 6 ----- .../v5/navigation/NavigationConstants.java | 2 ++ 7 files changed, 74 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java index bf5d87e1c5e..1d70d9ae8d3 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java @@ -26,6 +26,7 @@ import com.mapbox.api.directions.v5.models.DirectionsResponse; import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.core.constants.Constants; +import com.mapbox.core.utils.TextUtils; import com.mapbox.geojson.LineString; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; @@ -51,6 +52,7 @@ import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.utils.LocaleUtils; +import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -63,6 +65,8 @@ import retrofit2.Response; import timber.log.Timber; +import static android.os.Environment.getExternalStoragePublicDirectory; + public class NavigationLauncherActivity extends AppCompatActivity implements OnMapReadyCallback, MapboxMap.OnMapLongClickListener, OnRouteSelectionChangeListener { @@ -321,6 +325,16 @@ private String getRouteProfileFromSharedPreferences() { ); } + private String obtainOfflinePath() { + File offline = getExternalStoragePublicDirectory("Offline"); + return offline.getAbsolutePath(); + } + + private String retrieveOfflineVersionFromPreferences() { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + return sharedPreferences.getString(getString(R.string.offline_version_key), ""); + } + private void launchNavigationWithRoute() { if (route == null) { Snackbar.make(mapView, R.string.error_route_not_available, Snackbar.LENGTH_SHORT).show(); @@ -335,6 +349,14 @@ private void launchNavigationWithRoute() { .build(); optionsBuilder.initialMapCameraPosition(initialPosition); optionsBuilder.directionsRoute(route); + String offlinePath = obtainOfflinePath(); + if (!TextUtils.isEmpty(offlinePath)) { + optionsBuilder.offlineRoutingTilesPath(offlinePath); + } + String offlineVersion = retrieveOfflineVersionFromPreferences(); + if (!offlineVersion.isEmpty()) { + optionsBuilder.offlineRoutingTilesVersion(offlineVersion); + } NavigationLauncher.startNavigation(this, optionsBuilder.build()); } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/MapboxNavigationActivity.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/MapboxNavigationActivity.java index af5d8a2038e..8ca73513876 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/MapboxNavigationActivity.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/MapboxNavigationActivity.java @@ -130,8 +130,15 @@ private void extractRoute(NavigationViewOptions.Builder options) { private void extractConfiguration(NavigationViewOptions.Builder options) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - options.shouldSimulateRoute(preferences - .getBoolean(NavigationConstants.NAVIGATION_VIEW_SIMULATE_ROUTE, false)); + options.shouldSimulateRoute(preferences.getBoolean(NavigationConstants.NAVIGATION_VIEW_SIMULATE_ROUTE, false)); + String offlinePath = preferences.getString(NavigationConstants.OFFLINE_PATH_KEY, ""); + if (!offlinePath.isEmpty()) { + options.offlineRoutingTilesPath(offlinePath); + } + String offlineVersion = preferences.getString(NavigationConstants.OFFLINE_VERSION_KEY, ""); + if (!offlineVersion.isEmpty()) { + options.offlineRoutingTilesVersion(offlineVersion); + } } private void finishNavigation() { diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java index 7103302c326..cb80e1637ea 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java @@ -38,6 +38,8 @@ public static void startNavigation(Activity activity, NavigationLauncherOptions storeConfiguration(options, editor); storeThemePreferences(options, editor); + storeOfflinePath(options, editor); + storeOfflineVersion(options, editor); editor.apply(); @@ -71,6 +73,8 @@ static void cleanUpPreferences(Context context) { .remove(NavigationConstants.NAVIGATION_VIEW_PREFERENCE_SET_THEME) .remove(NavigationConstants.NAVIGATION_VIEW_LIGHT_THEME) .remove(NavigationConstants.NAVIGATION_VIEW_DARK_THEME) + .remove(NavigationConstants.OFFLINE_PATH_KEY) + .remove(NavigationConstants.OFFLINE_VERSION_KEY) .apply(); } @@ -103,4 +107,13 @@ private static void storeInitialMapPosition(NavigationLauncherOptions options, I ); } } + + private static void storeOfflinePath(NavigationLauncherOptions options, SharedPreferences.Editor editor) { + editor.putString(NavigationConstants.OFFLINE_PATH_KEY, options.offlineRoutingTilesPath()); + } + + private static void storeOfflineVersion(NavigationLauncherOptions options, SharedPreferences.Editor editor) { + editor.putString(NavigationConstants.OFFLINE_VERSION_KEY, options.offlineRoutingTilesVersion()); + } + } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncherOptions.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncherOptions.java index 68f2621a68b..b2efa24d252 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncherOptions.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncherOptions.java @@ -27,6 +27,28 @@ public abstract static class Builder { public abstract Builder initialMapCameraPosition(@Nullable CameraPosition initialMapCameraPosition); + /** + * Add an offline path for loading offline routing data. + *

+ * When added, the {@link NavigationView} will try to initialize and use this data + * for offline routing when no or poor internet connection is found. + * + * @param offlinePath to offline data on device + * @return this builder + */ + public abstract Builder offlineRoutingTilesPath(String offlinePath); + + /** + * Add an offline tile version. When providing a routing tile path, this version + * is also required for configuration. + *

+ * This version should directly correspond to the data in the offline path also provided. + * + * @param offlineVersion of data in tile path + * @return this builder + */ + public abstract Builder offlineRoutingTilesVersion(String offlineVersion); + public abstract NavigationLauncherOptions build(); } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationUiOptions.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationUiOptions.java index f3497214ef7..2dd93fb0701 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationUiOptions.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationUiOptions.java @@ -17,4 +17,10 @@ public abstract class NavigationUiOptions { public abstract boolean shouldSimulateRoute(); public abstract boolean waynameChipEnabled(); + + @Nullable + public abstract String offlineRoutingTilesPath(); + + @Nullable + public abstract String offlineRoutingTilesVersion(); } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOptions.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOptions.java index 2c6acd92e0e..63e34f8e006 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOptions.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOptions.java @@ -61,12 +61,6 @@ public abstract class NavigationViewOptions extends NavigationUiOptions { @Nullable public abstract LocationEngine locationEngine(); - @Nullable - public abstract String offlineRoutingTilesPath(); - - @Nullable - public abstract String offlineRoutingTilesVersion(); - @AutoValue.Builder public abstract static class Builder { diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationConstants.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationConstants.java index f3b488638c8..e728e0aacce 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationConstants.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationConstants.java @@ -151,6 +151,8 @@ private NavigationConstants() { public static final String NAVIGATION_VIEW_ROUTE_KEY = "route_json"; public static final String NAVIGATION_VIEW_SIMULATE_ROUTE = "navigation_view_simulate_route"; public static final String NAVIGATION_VIEW_ROUTE_PROFILE_KEY = "navigation_view_route_profile"; + public static final String OFFLINE_PATH_KEY = "offline_path_key"; + public static final String OFFLINE_VERSION_KEY = "offline_version_key"; // Step Maneuver Types public static final String STEP_MANEUVER_TYPE_TURN = "turn";