docs: @Nullable
    public NavigationRoute.Builder buildRequestFrom(Location location, RouteProgress routeProgress) {
      Context context = contextWeakReference.get();
      if (invalid(context, location, routeProgress)) {
        return null;
      }
      Point origin = Point.fromLngLat(location.getLongitude(), location.getLatitude());
      Double bearing = location.hasBearing() ? Float.valueOf(location.getBearing()).doubleValue() : null;
      RouteOptions options = routeProgress.directionsRoute().routeOptions();
      NavigationRoute.Builder builder = NavigationRoute.builder(context)
        .accessToken(accessToken)
        .origin(origin, bearing, BEARING_TOLERANCE)
        .routeOptions(options);
  
      List<Point> remainingWaypoints = routeUtils.calculateRemainingWaypoints(routeProgress);
      if (remainingWaypoints == null) {
        Timber.e("An error occurred fetching a new route");
        return null;
      }
      addDestination(remainingWaypoints, builder);
      addWaypoints(remainingWaypoints, builder);
      addWaypointNames(routeProgress, builder);
      addApproaches(routeProgress, builder);
      return builder;
    }