static StateListDrawable bootstrapDropDownArrow(
      Context context,
      int width,
      int height,
      ExpandDirection expandDirection,
      boolean outline,
      BootstrapBrand brand) {
    StateListDrawable stateListDrawable = new StateListDrawable();

    int defaultColor = outline ? brand.defaultFill(context) : brand.defaultTextColor(context);
    int activeColor =
        outline
            ? ColorUtils.resolveColor(android.R.color.white, context)
            : brand.activeTextColor(context);
    int disabledColor = outline ? brand.disabledFill(context) : brand.disabledTextColor(context);

    if (Build.VERSION.SDK_INT >= 14) {
      stateListDrawable.addState(
          new int[] {android.R.attr.state_hovered},
          createArrowIcon(context, width, height, activeColor, expandDirection));
    }

    stateListDrawable.addState(
        new int[] {android.R.attr.state_activated},
        createArrowIcon(context, width, height, activeColor, expandDirection));
    stateListDrawable.addState(
        new int[] {android.R.attr.state_focused},
        createArrowIcon(context, width, height, activeColor, expandDirection));
    stateListDrawable.addState(
        new int[] {android.R.attr.state_pressed},
        createArrowIcon(context, width, height, activeColor, expandDirection));
    stateListDrawable.addState(
        new int[] {android.R.attr.state_selected},
        createArrowIcon(context, width, height, activeColor, expandDirection));
    stateListDrawable.addState(
        new int[] {-android.R.attr.state_enabled},
        createArrowIcon(context, width, height, disabledColor, expandDirection));
    stateListDrawable.addState(
        new int[] {}, createArrowIcon(context, width, height, defaultColor, expandDirection));
    return stateListDrawable;
  }
  /**
   * Generates a colorstatelist for a bootstrap button
   *
   * @param context the current context
   * @param outline whether the button is outlined
   * @param brand the button brand
   * @return the color state list
   */
  static ColorStateList bootstrapButtonText(
      Context context, boolean outline, BootstrapBrand brand) {

    int defaultColor = outline ? brand.defaultFill(context) : brand.defaultTextColor(context);
    int activeColor =
        outline
            ? ColorUtils.resolveColor(android.R.color.white, context)
            : brand.activeTextColor(context);
    int disabledColor = outline ? brand.disabledFill(context) : brand.disabledTextColor(context);

    if (outline && brand instanceof DefaultBootstrapBrand) { // special case
      DefaultBootstrapBrand db = (DefaultBootstrapBrand) brand;

      if (db == DefaultBootstrapBrand.SECONDARY) {
        defaultColor = ColorUtils.resolveColor(R.color.bootstrap_brand_secondary_border, context);
        disabledColor = defaultColor;
      }
    }
    return new ColorStateList(
        getStateList(), getColorList(defaultColor, activeColor, disabledColor));
  }