Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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 {

Expand Down Expand Up @@ -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();
Expand All @@ -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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -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());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
* <p>
* 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.
* <p>
* 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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down