code: @Nullable
    public String[] calculateRemainingWaypointNames(RouteProgress routeProgress) {
      RouteOptions routeOptions = routeProgress.directionsRoute().routeOptions();
      if (routeOptions == null || TextUtils.isEmpty(routeOptions.waypointNames())) {
        return null;
      }
      String allWaypointNames = routeOptions.waypointNames();
      String[] names = allWaypointNames.split(SEMICOLON);
      int coordinatesSize = routeProgress.directionsRoute().routeOptions().coordinates().size();
      String[] remainingWaypointNames = Arrays.copyOfRange(names,
        coordinatesSize - routeProgress.remainingWaypoints(), coordinatesSize);
      String[] waypointNames = new String[remainingWaypointNames.length + ORIGIN_WAYPOINT_NAME_THRESHOLD];
      waypointNames[ORIGIN_WAYPOINT_NAME] = names[ORIGIN_WAYPOINT_NAME];
      System.arraycopy(remainingWaypointNames, FIRST_POSITION, waypointNames, SECOND_POSITION,
        remainingWaypointNames.length);
      return waypointNames;
    }
docs: Given a {@link RouteProgress}, this method will calculate the remaining waypoint names
  along the given route based on route option waypoint names and the progress remaining coordinates.
  <p>
  If the waypoint names are empty, this method will return null.
  
  @param routeProgress for route waypoint names and remaining coordinates
  @return String array including the origin waypoint name and the remaining ones
  @since 0.19.0