docs: public AccountHeader build() {
          // if the user has not set a accountHeader use the default one :D
          if (mAccountHeaderContainer == null) {
              withAccountHeader(-1);
          }
  
          // get the header view within the container
          mAccountHeader = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header);
          mStatusBarGuideline = mAccountHeaderContainer.findViewById(R.id.material_drawer_statusbar_guideline);
  
          //the default min header height by default 148dp
          int defaultHeaderMinHeight = mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_account_header_height);
          int statusBarHeight = UIUtils.getStatusBarHeight(mActivity, true);
  
          // handle the height for the header
          int height;
          if (mHeight != null) {
              height = mHeight.asPixel(mActivity);
          } else {
              if (mCompactStyle) {
                  height = mActivity.getResources().getDimensionPixelSize(R.dimen.material_drawer_account_header_height_compact);
              } else {
                  //calculate the header height by getting the optimal drawer width and calculating it * 9 / 16
                  height = (int) (DrawerUIUtils.getOptimalDrawerWidth(mActivity) * AccountHeader.NAVIGATION_DRAWER_ACCOUNT_ASPECT_RATIO);
  
                  //if we are lower than api 19 (>= 19 we have a translucentStatusBar) the height should be a bit lower
                  //probably even if we are non translucent on > 19 devices?
                  if (Build.VERSION.SDK_INT < 19) {
                      int tempHeight = height - statusBarHeight;
                      //if we are lower than api 19 we are not able to have a translucent statusBar so we remove the height of the statusBar from the padding
                      //to prevent display issues we only reduce the height if we still fit the required minHeight of 148dp (R.dimen.material_drawer_account_header_height)
                      //we remove additional 8dp from the defaultMinHeaderHeight as there is some buffer in the header and to prevent to large spacings
                      if (tempHeight > defaultHeaderMinHeight - UIUtils.convertDpToPixel(8, mActivity)) {
                          height = tempHeight;
                      }
                  }
              }
          }
  
          // handle everything if we have a translucent status bar which only is possible on API >= 19
          if (mTranslucentStatusBar && Build.VERSION.SDK_INT >= 21) {
              mStatusBarGuideline.setGuidelineBegin(statusBarHeight);
  
              //in fact it makes no difference if we have a translucent statusBar or not. we want 9/16 just if we are not compact
              if (mCompactStyle) {
                  height = height + statusBarHeight;
              } else if ((height - statusBarHeight) <= defaultHeaderMinHeight) {
                  //if the height + statusBar of the header is lower than the required 148dp + statusBar we change the height to be able to display all the data
                  height = defaultHeaderMinHeight + statusBarHeight;
              }
          }
  
          //set the height for the header
          setHeaderHeight(height);
  
          // get the background view
          mAccountHeaderBackground = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header_background);
          // set the background
          ImageHolder.applyTo(mHeaderBackground, mAccountHeaderBackground, DrawerImageLoader.Tags.ACCOUNT_HEADER.name());
  
          if (mHeaderBackgroundScaleType != null) {
              mAccountHeaderBackground.setScaleType(mHeaderBackgroundScaleType);
          }
  
          // get the text color to use for the text section
          int textColor = ColorHolder.color(mTextColor, mActivity, R.attr.material_drawer_header_selection_text, R.color.material_drawer_header_selection_text);
          int subTextColor = ColorHolder.color(mTextColor, mActivity, R.attr.material_drawer_header_selection_subtext, R.color.material_drawer_header_selection_subtext);
  
          mAccountHeaderTextSectionBackgroundResource = UIUtils.getSelectableBackgroundRes(mActivity);
          handleSelectionView(mCurrentProfile, true);
  
          // set the arrow :D
          mAccountSwitcherArrow = mAccountHeaderContainer.findViewById(R.id.material_drawer_account_header_text_switcher);
          mAccountSwitcherArrow.setImageDrawable(new IconicsDrawable(mActivity, MaterialDrawerFont.Icon.mdf_arrow_drop_down).sizeRes(R.dimen.material_drawer_account_header_dropdown).paddingRes(R.dimen.material_drawer_account_header_dropdown_padding).color(subTextColor));
  
          //get the fields for the name
          mCurrentProfileView = mAccountHeader.findViewById(R.id.material_drawer_account_header_current);
          mCurrentProfileName = mAccountHeader.findViewById(R.id.material_drawer_account_header_name);
          mCurrentProfileEmail = mAccountHeader.findViewById(R.id.material_drawer_account_header_email);
  
          //set the typeface for the AccountHeader
          if (mNameTypeface != null) {
              mCurrentProfileName.setTypeface(mNameTypeface);
          } else if (mTypeface != null) {
              mCurrentProfileName.setTypeface(mTypeface);
          }
  
          if (mEmailTypeface != null) {
              mCurrentProfileEmail.setTypeface(mEmailTypeface);
          } else if (mTypeface != null) {
              mCurrentProfileEmail.setTypeface(mTypeface);
          }
  
          mCurrentProfileName.setTextColor(textColor);
          mCurrentProfileEmail.setTextColor(subTextColor);
  
          mProfileFirstView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_first);
          mProfileSecondView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_second);
          mProfileThirdView = mAccountHeader.findViewById(R.id.material_drawer_account_header_small_third);
  
          //calculate the profiles to set
          calculateProfiles();
  
          //process and build the profiles
          buildProfiles();
  
          // try to restore all saved values again
          if (mSavedInstance != null) {
              int selection = mSavedInstance.getInt(AccountHeader.BUNDLE_SELECTION_HEADER, -1);
              if (selection != -1) {
                  //predefine selection (should be the first element
                  if (mProfiles != null && (selection) > -1 && selection < mProfiles.size()) {
                      switchProfiles(mProfiles.get(selection));
                  }
              }
          }
  
          //everything created. now set the header
          if (mDrawer != null) {
              mDrawer.setHeader(mAccountHeaderContainer, mPaddingBelowHeader, mDividerBelowHeader);
          }
  
          //forget the reference to the activity
          mActivity = null;
  
          return new AccountHeader(this);
      }