private void updateTimeBasedUi(SessionDetailModel data) {
    // Show "Live streamed" for all live-streamed sessions that aren't currently going on.
    mLiveStreamVideocamIconAndText.setVisibility(
        data.hasLiveStream() && !data.isSessionOngoing() ? View.VISIBLE : View.GONE);

    if (data.hasLiveStream() && data.hasSessionStarted()) {
      // Show the play button and text only once the session starts.
      mLiveStreamVideocamIconAndText.setVisibility(View.VISIBLE);

      if (data.isSessionOngoing()) {
        mLiveStreamPlayIconAndText.setText(getString(R.string.session_watch_live));
      } else {
        mLiveStreamPlayIconAndText.setText(getString(R.string.session_watch));
        // TODO: implement Replay.
      }
    } else {
      mLiveStreamPlayIconAndText.setVisibility(View.GONE);
    }

    // If the session is done, hide the FAB, and show the "Give feedback" card.
    if (data.isSessionReadyForFeedback()) {
      mAddScheduleButton.setVisibility(View.INVISIBLE);
      if (!data.hasFeedback()
          && data.isInScheduleWhenSessionFirstLoaded()
          && !sDismissedFeedbackCard.contains(data.getSessionId())) {
        showGiveFeedbackCard(data);
      }
    }

    String timeHint = "";

    if (TimeUtils.hasConferenceEnded(getContext())) {
      // No time hint to display.
      timeHint = "";
    } else if (data.hasSessionEnded()) {
      timeHint = getString(R.string.time_hint_session_ended);
    } else if (data.isSessionOngoing()) {
      long minutesAgo = data.minutesSinceSessionStarted();
      if (minutesAgo > 1) {
        timeHint = getString(R.string.time_hint_started_min, minutesAgo);
      } else {
        timeHint = getString(R.string.time_hint_started_just);
      }
    } else {
      long minutesUntilStart = data.minutesUntilSessionStarts();
      if (minutesUntilStart > 0
          && minutesUntilStart <= SessionDetailConstants.HINT_TIME_BEFORE_SESSION_MIN) {
        if (minutesUntilStart > 1) {
          timeHint = getString(R.string.time_hint_about_to_start_min, minutesUntilStart);
        } else {
          timeHint = getString(R.string.time_hint_about_to_start_shortly, minutesUntilStart);
        }
      }
    }

    final TextView timeHintView = (TextView) getActivity().findViewById(R.id.time_hint);

    if (!TextUtils.isEmpty(timeHint)) {
      timeHintView.setVisibility(View.VISIBLE);
      timeHintView.setText(timeHint);
    } else {
      timeHintView.setVisibility(View.GONE);
    }
  }