class VoiceInstructionMilestone extends Milestone {

  @Override
  public boolean isOccurring(RouteProgress previousRouteProgress, RouteProgress routeProgress) {
    if (isNewRoute(routeProgress)) {
      cacheInstructions(routeProgress, true);
    }
    LegStep currentStep = routeProgress.currentLegProgress().currentStep();
    double stepDistanceRemaining = routeProgress.currentLegProgress().currentStepProgress().distanceRemaining();
    VoiceInstructions instructions = routeUtils.findCurrentVoiceInstructions(currentStep, stepDistanceRemaining);
    if (shouldBeVoiced(instructions, stepDistanceRemaining)) {
      return updateInstructions(routeProgress, instructions);
    }
    return false;
  }

    VoiceInstructionMilestone(Builder builder);

}