private void updateSplits(long cumulativeTime, int cummulativeDistance, boolean reset) {
    MyLog.i("RaceTimerFragment", "updateSplits for Athlete " + mAthleteNumber);
    List<Split> splits = new ArrayList<>();

    if (reset) {
      tvAthletePace.setText(getActivity().getString(R.string.header_pace));
    } else {
      // gets the splits associated with the race Uuid
      splits = Split.getAllSplits(mRaceUuid, false);

      String paceAndDistance =
          CommonMethods.getAveragePaceString(
              cumulativeTime, cummulativeDistance, mPaceDistance, mPoolLengthUnits);

      if (mIsClockRunning) {
        paceAndDistance =
            paceAndDistance
                + CommonMethods.getEstimatedTotalDistance(
                    cumulativeTime, cummulativeDistance, mEventDurationMs, mPoolLengthUnits);
      }

      tvAthletePace.setText(paceAndDistance);
    }

    mSplitArrayAdapter.setData(splits);
    mSplitArrayAdapter.notifyDataSetChanged();
  }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.btnEditAthlete:
        showEditAthleteDialog();
        break;

      case R.id.btnStart:
        // truncate time to tenths of seconds
        mStartTime = (System.currentTimeMillis() / 100) * 100;
        mIsClockRunning = true;
        new buttonVibration().execute();
        EventBus.getDefault().post(new MyEvents.startClock(mStartTime));
        EventBus.getDefault().post(new MyEvents.startRace(mAthleteNumber));
        startRace();
        break;

      case R.id.btnSplit:
        if (mIsClockRunning) {
          MyLog.i("RaceTimerFragment", "btnSplitClick Athlete" + mAthleteNumber);
          // truncate time to tenths of seconds
          long currentTime = (System.currentTimeMillis() / 100) * 100;
          new buttonVibration().execute();
          long mCumulativeTime = currentTime - mStartTime;
          long splitTime = mCumulativeTime - mPreviousCummulativeTime;
          mLapNumber++;
          int mCummulativeDistance = mLapNumber * mLapDistance;
          createSplit(
              mSelectedAthlete,
              mSelectedSwimEvent,
              mLapNumber,
              mCummulativeDistance,
              splitTime,
              mCumulativeTime);
          temporarilyDisableSplitButton();
        }
        break;

      case R.id.btnEmail:
        CommonMethods.sendRaceSummaryEmail(getActivity(), mSwimEventSummary);
        break;
    }
  }
  private void completeRace(String lastLapDistanceString, String timerName, String eventLocation) {
    int lastLapDistance = Integer.valueOf(lastLapDistanceString);

    // create last split
    int totalDistance = (mLapNumber * mLapDistance) + lastLapDistance;
    String averagePaceString =
        CommonMethods.getAveragePaceString(
            mEventDurationMs, totalDistance, mPaceDistance, mPoolLengthUnits);
    long splitTime = mEventDurationMs - mPreviousCummulativeTime;

    createSplit(
        mSelectedAthlete,
        mSelectedSwimEvent,
        mLapNumber + 1,
        totalDistance,
        splitTime,
        mEventDurationMs);

    // create event summary
    mSwimEventSummary = new SwimEventSummary();
    mSwimEventSummary.newInstance(
        mRaceUuid,
        mSelectedSwimEvent,
        mSelectedAthlete,
        mStartTime,
        timerName,
        eventLocation,
        mPoolLength,
        mPoolLengthUnits,
        totalDistance,
        averagePaceString);
    mSwimEventSummary.pinInBackground();

    // Mark splits as Race Complete
    markSplitsRaceComplete();
    MyLog.i("RaceTimerFragment", "completeRace: for Athlete " + mAthleteNumber);
  }
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if (savedInstanceState != null) {
      MyLog.i("RaceTimerFragment", "onActivityCreated: savedInstanceState Not Null");
      if (savedInstanceState.containsKey(ARG_ATHLETE_NUMBER)) {
        mAthleteNumber = savedInstanceState.getInt(ARG_ATHLETE_NUMBER);
      }
      if (savedInstanceState.containsKey(ARG_RACE_UUID)) {
        mRaceUuid = savedInstanceState.getString(ARG_RACE_UUID);
      }
    } else {
      switch (mAthleteNumber) {
        case 1:
          mRaceUuid = MySettings.getAthlete1RaceUuid();
          break;
        case 2:
          mRaceUuid = MySettings.getAthlete2RaceUuid();
          break;
      }
    }

    MyLog.i(
        "RaceTimerFragment",
        "onActivityCreated: Athlete" + mAthleteNumber + "RaceUuid: " + mRaceUuid);
    if (mAthleteNumber == 1) {
      mLapDistance = MySettings.getLapDistance();
      mPaceDistance = MySettings.getPaceDistance();
      mPoolLength = MySettings.getPoolLength();
      mPoolLengthUnits = MySettings.getPoolLengthUnits();
      mEventDurationMs = MySettings.getEventDurationMinutes() * 60000;
      mSplitButtonDisableDurationMs = MySettings.getSplitButtonDisabledSeconds() * 1000;
    }

    int spnAthletesStartingPosition = 0;
    switch (mAthleteNumber) {
      case 1:
        if (!MySettings.getSelectedAthlete1ID().equals(MySettings.NOT_AVAILABLE)) {
          spnAthletesStartingPosition =
              mAthleteSpinnerAdapter.getItemPosition(MySettings.getSelectedAthlete1ID());
        }
        break;

      case 2:
        if (!MySettings.getSelectedAthlete2ID().equals(MySettings.NOT_AVAILABLE)) {
          spnAthletesStartingPosition =
              mAthleteSpinnerAdapter.getItemPosition(MySettings.getSelectedAthlete2ID());
        }
        break;
    }
    mOkToResetLapCounter = false;
    spnAthletes.setSelection(spnAthletesStartingPosition);
    mIsClockRunning = false;

    String pace = getActivity().getString(R.string.header_pace);
    if (mSplitsOfCompletedRace.size() > 0) {
      Split lastSplit = mSplitsOfCompletedRace.get(0);
      long cummulativeDurationMs = lastSplit.getAccumulativeTimeMs();
      int cummulativeDistance = lastSplit.getDistance();
      pace =
          CommonMethods.getAveragePaceString(
              cummulativeDurationMs, cummulativeDistance, mPaceDistance, mPoolLengthUnits);
    }
    tvAthletePace.setText(pace);
  }