public IncomingCallUI(InterlocutorUI ic) {
    setLayout(new GridBagLayout());

    final JLabel topLabel = new JLabel();
    topLabel.setIcon(PhoneRes.getImageIcon("INCOMING_CALL_IMAGE"));
    topLabel.setHorizontalTextPosition(JLabel.RIGHT);
    topLabel.setFont(new Font("Dialog", Font.BOLD, 15));
    topLabel.setText(PhoneRes.getIString("phone.incomingcallfrom") + "...");
    topLabel.setForeground(Color.gray);

    final String phoneNumber = ic.getCall().getNumber();

    // Add Top Label
    add(
        topLabel,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            1.0,
            0.0,
            GridBagConstraints.CENTER,
            GridBagConstraints.HORIZONTAL,
            new Insets(5, 5, 5, 5),
            0,
            0));

    boolean callerID = !ic.getCall().getNumber().equals(ic.getCall().getRemoteName());
    String title = ic.getCall().getRemoteName();
    if (!callerID) {
      title = phoneNumber;
    }

    // Add Caller Block
    buildCallerBlock(title, phoneNumber);

    // Add Buttons
    addButtons();
  }
  private void addButtons() {
    // Build Accept Button
    acceptButton =
        new RolloverButton(
            "      " + PhoneRes.getIString("phone.accept"),
            PhoneRes.getImageIcon("TOASTER_ACCEPT_BUTTON"));
    acceptButton.setHorizontalTextPosition(JLabel.CENTER);
    acceptButton.setFont(new Font("Dialog", Font.BOLD, 11));
    acceptButton.setForeground(new Color(91, 175, 41));
    acceptButton.setMargin(new Insets(0, 0, 0, 0));

    // Build Reject Button
    rejectButton =
        new RolloverButton(
            "      " + PhoneRes.getIString("phone.reject"),
            PhoneRes.getImageIcon("TOASTER_REJECT_BUTTON"));
    rejectButton.setHorizontalTextPosition(JLabel.CENTER);
    rejectButton.setFont(new Font("Dialog", Font.BOLD, 11));
    rejectButton.setForeground(new Color(153, 32, 10));
    rejectButton.setMargin(new Insets(0, 0, 0, 0));

    final JPanel panel = new JPanel(new GridBagLayout());
    panel.setOpaque(false);
    panel.add(
        acceptButton,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.EAST,
            GridBagConstraints.NONE,
            new Insets(5, 5, 5, 5),
            0,
            0));
    panel.add(
        rejectButton,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.WEST,
            GridBagConstraints.NONE,
            new Insets(5, 5, 5, 5),
            0,
            0));

    add(
        panel,
        new GridBagConstraints(
            0,
            2,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.CENTER,
            GridBagConstraints.NONE,
            new Insets(5, 5, 5, 5),
            0,
            0));
  }
  /** Builds the part of the incoming call UI with the Callers information. */
  private void buildCallerBlock(String callerID, String phoneNumber) {
    final JPanel panel = new JPanel(new GridBagLayout());
    panel.setBackground(Color.white);
    panel.setBorder(BorderFactory.createLineBorder(new Color(197, 213, 230), 1));

    // Add Avatar
    panel.add(
        avatarLabel,
        new GridBagConstraints(
            0,
            0,
            1,
            3,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(5, 0, 5, 0),
            0,
            0));

    // Add Avatar information
    panel.add(
        titleLabel,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(5, 5, 0, 0),
            0,
            0));
    panel.add(
        professionLabel,
        new GridBagConstraints(
            1,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(0, 7, 0, 0),
            0,
            0));
    panel.add(
        phoneLabel,
        new GridBagConstraints(
            1,
            2,
            1,
            1,
            0.0,
            1.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(0, 7, 0, 0),
            0,
            0));

    // Add History labels
    panel.add(
        lastCalledLabel,
        new GridBagConstraints(
            0,
            3,
            2,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(15, 5, 0, 0),
            0,
            0));
    panel.add(
        durationLabel,
        new GridBagConstraints(
            0,
            4,
            2,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(5, 5, 0, 0),
            0,
            0));

    // Set default settings
    titleLabel.setForeground(new Color(64, 103, 162));
    titleLabel.setFont(new Font("Dialog", Font.BOLD, 16));

    final VCard vcard = SparkManager.getVCardManager().searchPhoneNumber(phoneNumber);
    if (vcard != null) {
      handleVCardInformation(vcard, phoneNumber);
    } else {
      avatarLabel.setVisible(false);
      professionLabel.setVisible(false);
      phoneLabel.setVisible(true);

      titleLabel.setText(callerID);
      phoneLabel.setText(phoneNumber);
    }

    // Update with previous call history.
    Date lastDate = null;
    long callLength = 0;
    for (HistoryCall call : SoftPhoneManager.getInstance().getLogManager().getCallHistory()) {
      String number = TelephoneUtils.removeInvalidChars(call.getNumber());
      if (number.equals(TelephoneUtils.removeInvalidChars(phoneNumber))) {
        lastDate = new Date(call.getTime());
      }

      callLength = call.getCallLength();
    }

    final StringBuilder builder = new StringBuilder();
    builder.append(PhoneRes.getIString("phone.lastcalled") + ": ");
    if (lastDate == null) {
      builder.append(PhoneRes.getIString("phone.never"));
      durationLabel.setVisible(false);
    } else {
      builder.append(formatter.format(lastDate));
      durationLabel.setText(
          PhoneRes.getIString("phone.duration")
              + ": "
              + ModelUtil.getTimeFromLong(callLength * 1000));
    }

    lastCalledLabel.setText(builder.toString());

    // Add To Panel
    add(
        panel,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            1.0,
            1.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.BOTH,
            new Insets(5, 5, 5, 5),
            0,
            0));
  }