@Override
  public void viewDidLoad() {
    super.viewDidLoad();

    getTableView().setSeparatorStyle(UITableViewCellSeparatorStyle.None);
    getTableView().setBackgroundColor(UIColor.black());

    getNavigationItem().setTitleView(new UIImageView(UIImage.getImage("TitleFindFriends")));

    if (getNavigationController().getViewControllers().first() == this) {
      UIBarButtonItem dismissLeftBarButtonItem =
          new UIBarButtonItem(
              "Back",
              UIBarButtonItemStyle.Plain,
              new UIBarButtonItem.OnClickListener() {
                @Override
                public void onClick(UIBarButtonItem barButtonItem) {
                  getNavigationController().dismissViewController(true, null);
                }
              });
      getNavigationItem().setLeftBarButtonItem(dismissLeftBarButtonItem);
    } else {
      getNavigationItem().setLeftBarButtonItem(null);
    }

    if (MFMailComposeViewController.canSendMail() || MFMessageComposeViewController.canSendText()) {
      headerView = new UIView(new CGRect(0, 0, 320, 67));
      headerView.setBackgroundColor(UIColor.black());
      UIButton clearButton = new UIButton(UIButtonType.Custom);
      clearButton.setBackgroundColor(UIColor.clear());
      clearButton.addOnTouchUpInsideListener(inviteFriendsButtonAction);
      clearButton.setFrame(headerView.getFrame());
      headerView.addSubview(clearButton);
      String inviteString = "Invite friends";
      CGRect boundingRect =
          NSString.getBoundingRect(
              inviteString,
              new CGSize(310, Float.MAX_VALUE),
              NSStringDrawingOptions.with(
                  NSStringDrawingOptions.TruncatesLastVisibleLine,
                  NSStringDrawingOptions.UsesLineFragmentOrigin),
              new NSAttributedStringAttributes().setFont(UIFont.getBoldSystemFont(18)),
              null);
      CGSize inviteStringSize = boundingRect.getSize();

      UILabel inviteLabel =
          new UILabel(
              new CGRect(
                  10,
                  (headerView.getFrame().getSize().getHeight() - inviteStringSize.getHeight()) / 2,
                  inviteStringSize.getWidth(),
                  inviteStringSize.getHeight()));
      inviteLabel.setText(inviteString);
      inviteLabel.setFont(UIFont.getBoldSystemFont(18));
      inviteLabel.setTextColor(UIColor.white());
      inviteLabel.setBackgroundColor(UIColor.clear());
      headerView.addSubview(inviteLabel);
      getTableView().setTableHeaderView(headerView);
    }
  }
  @Override
  public void viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews();

    CGRect bounds = getView().getBounds();
    bounds.setY(bounds.getY() + bounds.getHeight() - BottomButtonView.HEIGHT);
    bounds.setHeight(BottomButtonView.HEIGHT);
    bottomView.setFrame(bounds);
  }
  /**
   * Modifies keyboards size to fit screen
   *
   * @param showKeyboard
   * @param notificationInfo
   */
  private void adjustViewForKeyboardReveal(
      boolean showKeyboard,
      NSDictionary<NSString, ?> notificationInfo) { // notificationInfo:(NSDictionary
    // *)notificationInfo
    // the keyboard is showing so resize the table's height

    CGRect keyboardRect =
        NSValueExtensions.getRectValue(
            (NSValue) notificationInfo.get(UIKit.KeyboardFrameEndUserInfoKey()));
    double animationDuration =
        ((NSNumber) notificationInfo.get(UIKit.KeyboardAnimationDurationUserInfoKey()))
            .doubleValue();

    CGRect frame = this.textView.getFrame();

    // the keyboard rect's width and height are reversed in landscape
    double adjustDelta =
        isPortrait(this.getInterfaceOrientation())
            ? keyboardRect.getHeight()
            : keyboardRect.getWidth();

    if (showKeyboard) {
      frame.size().height(frame.size().height() - adjustDelta);
    } else {
      frame.size().height(frame.size().height() + adjustDelta);
    }

    UIView.beginAnimations("ResizeForKeyboard", null);
    UIView.setDurationForAnimation(animationDuration);
    this.textView.setFrame(frame);
    UIView.commitAnimations();
  }
  @Override
  public void layoutSubviews() {
    super.layoutSubviews();

    CGRect bounds = getBounds();
    CGRect frame = name.getFrame();

    frame.setWidth(bounds.getWidth() - (PRICE_WIDTH + PADDING * 2));
    frame.setX(PADDING);
    frame.setY(PADDING);
    name.setFrame(frame);

    frame = price.getFrame();
    frame.setY(PADDING + (name.getFrame().getHeight() - frame.getHeight()) / 2);
    frame.setX(name.getFrame().getX() + name.getFrame().getWidth() + PADDING);
    frame.setWidth(PRICE_WIDTH);
    price.setFrame(frame);

    frame = bounds;
    frame.setY(name.getFrame().getY() + name.getFrame().getHeight());
    frame.setX(PADDING);
    frame.setWidth(frame.getWidth() - PADDING * 2);
    frame.setHeight(frame.getHeight() - frame.getY());
    descriptionLabel.setFrame(frame);
  }