/**
   * @param includeArrivalDepartureInStatusLabel true if the arrival/departure label should be
   *     included in the status label false if it should not
   */
  public ArrivalInfo(ObaArrivalInfo info, long now, boolean includeArrivalDepartureInStatusLabel) {
    mInfo = info;
    // First, all times have to have to be converted to 'minutes'
    final long nowMins = now / ms_in_mins;
    long scheduled, predicted;
    // If this is the first stop in the sequence, show the departure time.
    if (info.getStopSequence() != 0) {
      scheduled = info.getScheduledArrivalTime();
      predicted = info.getPredictedArrivalTime();
      mIsArrival = true;
    } else {
      // Show departure time
      scheduled = info.getScheduledDepartureTime();
      predicted = info.getPredictedDepartureTime();
      mIsArrival = false;
    }

    final long scheduledMins = scheduled / ms_in_mins;
    final long predictedMins = predicted / ms_in_mins;

    if (predicted != 0) {
      mPredicted = true;
      mEta = predictedMins - nowMins;
      mDisplayTime = predicted;
    } else {
      mPredicted = false;
      mEta = scheduledMins - nowMins;
      mDisplayTime = scheduled;
    }

    mColor = computeColor(scheduledMins, predictedMins);

    mStatusText =
        computeStatusLabel(
            info,
            now,
            predicted,
            scheduledMins,
            predictedMins,
            includeArrivalDepartureInStatusLabel);

    mLongDescription = computeLongDescription();
  }