/**
   * Returns a dark theme SuperCardToast. <br>
   * IMPORTANT: Activity layout should contain a linear layout with the id card_container <br>
   *
   * @param context Should be Activity
   * @param textCharSequence Message text
   * @param durationInteger Should use SuperToast.Duration constants
   * @return SuperCardToast
   */
  public static SuperCardToast createSuperCardToast(
      Context context, CharSequence textCharSequence, int durationInteger) {

    SuperCardToast superCardToast = new SuperCardToast(context);
    superCardToast.setText(textCharSequence);
    superCardToast.setDuration(durationInteger);

    return superCardToast;
  }
  /**
   * Returns a light theme SuperCardToast. <br>
   * IMPORTANT: Activity layout should contain a linear layout with the id card_container <br>
   *
   * @param context Should be Activity
   * @param textCharSequence Message text
   * @param durationInteger Should use SuperToast.Duration constants
   * @return SuperCardToast
   */
  public static SuperCardToast createLightSuperCardToast(
      Context context, CharSequence textCharSequence, int durationInteger) {

    SuperCardToast SuperCardToast = new SuperCardToast(context);
    SuperCardToast.setText(textCharSequence);
    SuperCardToast.setDuration(durationInteger);
    SuperCardToast.setBackgroundResource(SuperToast.Background.WHITE);
    SuperCardToast.setTextColor(Color.BLACK);

    return SuperCardToast;
  }
  /**
   * Saves pending/shown SuperCardToasts to a bundle. <br>
   *
   * @param bundle Use onSaveInstanceState() bundle
   */
  public static void onSaveState(Bundle bundle) {

    Style[] list = new Style[ManagerSuperCardToast.getInstance().getList().size()];

    LinkedList<SuperCardToast> lister = ManagerSuperCardToast.getInstance().getList();

    for (int i = 0; i < list.length; i++) {

      list[i] = new Style(lister.get(i));
    }

    bundle.putParcelableArray(BUNDLE_TAG, list);

    SuperCardToast.cancelAllSuperCardToasts();
  }
    public Style(SuperCardToast superCardToast) {

      mType = superCardToast.getType();

      if (mType == Type.BUTTON) {

        mButtonText = superCardToast.getButtonText().toString();
        mButtonTextSize = superCardToast.getButtonTextSize();
        mButtonTextColor = superCardToast.getButtonTextColor();
        mButtonResource = superCardToast.getButtonResource();
        mButtonDividerResource = superCardToast.getButtonDividerResource();
        mClickListenerTag = superCardToast.getClickListenerTag();
        mButtonTypeface = superCardToast.getButtonTypeface();
      }

      if (superCardToast.getIconResource() != 0 && superCardToast.getIconPosition() != null) {

        mIconResource = superCardToast.getIconResource();
        mIconPosition = superCardToast.getIconPosition();
      }

      mDismissListenerTag = superCardToast.getDismissListenerTag();
      mAnimations = superCardToast.getAnimation();
      mText = superCardToast.getText().toString();
      mTypeface = superCardToast.getTypeface();
      mDuration = superCardToast.getDuration();
      mTextColor = superCardToast.getTextColor();
      mTextSize = superCardToast.getTextSize();
      isIndeterminate = superCardToast.isIndeterminate();
      mBackgroundResource = superCardToast.getBackgroundResource();
      isTouchDismissable = superCardToast.isTouchDismissable();
      isSwipeDismissable = superCardToast.isSwipeDismissable();
    }
  /** Method used to recreate SuperCardToasts after orientation change */
  private SuperCardToast(
      Activity activity,
      Style style,
      List<OnToastButtonClickListenerHolder> onToastButtonClickListeners,
      List<OnToastDismissListenerHolder> onToastDismissListeners,
      int position) {

    SuperCardToast superCardToast;

    if (style.mType == Type.BUTTON) {

      superCardToast = new SuperCardToast(activity, Type.BUTTON);
      superCardToast.setButtonText(style.mButtonText);
      superCardToast.setButtonTextSizeFloat(style.mButtonTextSize);
      superCardToast.setButtonTextColor(style.mButtonTextColor);
      superCardToast.setButtonResource(style.mButtonResource);
      superCardToast.setButtonDividerResource(style.mButtonDividerResource);
      superCardToast.setButtonTypeface(style.mButtonTypeface);

      /** Reattach any OnToastButtonClickListeners via retained Fragment */
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        FragmentRetainer fragmentRetainer =
            (FragmentRetainer) activity.getFragmentManager().findFragmentByTag(FRAGMENTRETAINER_ID);

        if (fragmentRetainer != null && fragmentRetainer.getClickListeners() != null) {

          for (OnToastButtonClickListenerHolder onToastButtonClickListenerHolder :
              fragmentRetainer.getClickListeners()) {

            if (onToastButtonClickListenerHolder.getTag().equals(style.mClickListenerTag)) {

              superCardToast.setOnToastButtonClickListener(onToastButtonClickListenerHolder);
            }
          }
        }

        /** Reattach any OnToastButtonClickListeners via provided List */
      } else {

        if (onToastButtonClickListeners != null) {

          for (OnToastButtonClickListenerHolder onToastButtonClickListenerHolder :
              onToastButtonClickListeners) {

            if (onToastButtonClickListenerHolder
                .getTag()
                .equalsIgnoreCase(style.mClickListenerTag)) {

              superCardToast.setOnToastButtonClickListener(onToastButtonClickListenerHolder);
            }
          }
        }
      }

    } else if (style.mType == Type.PROGRESS) {

      /** PROGRESS style SuperCardToasts should be managed by the developer */
      return;

    } else if (style.mType == Type.PROGRESS_HORIZONTAL) {

      /** PROGRESS_HORIZONTAL style SuperCardToasts should be managed by the developer */
      return;

    } else {

      superCardToast = new SuperCardToast(activity);
    }

    /** Reattach any OnToastBDismissListeners via retained Fragment */
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

      FragmentRetainer fragmentRetainer =
          (FragmentRetainer) activity.getFragmentManager().findFragmentByTag(FRAGMENTRETAINER_ID);

      if (fragmentRetainer != null && fragmentRetainer.getDismissListeners() != null) {

        for (OnToastDismissListenerHolder onToastDismissListenerHolder :
            fragmentRetainer.getDismissListeners()) {

          if (onToastDismissListenerHolder.getTag().equals(style.mDismissListenerTag)) {

            superCardToast.setOnToastDismissListener(onToastDismissListenerHolder);
          }
        }
      }

      /** Reattach any OnToastBDismissListeners via provided List */
    } else {

      if (onToastDismissListeners != null) {

        for (OnToastDismissListenerHolder onToastDismissListenerHolder : onToastDismissListeners) {

          if (onToastDismissListenerHolder.getTag().equalsIgnoreCase(style.mDismissListenerTag)) {

            superCardToast.setOnToastDismissListener(onToastDismissListenerHolder);
          }
        }
      }
    }

    superCardToast.setAnimations(style.mAnimations);
    superCardToast.setText(style.mText);
    superCardToast.setTypeface(style.mTypeface);
    superCardToast.setDuration(style.mDuration);
    superCardToast.setTextColor(style.mTextColor);
    superCardToast.setTextSizeFloat(style.mTextSize);
    superCardToast.setIndeterminate(style.isIndeterminate);
    superCardToast.setIcon(style.mIconResource, style.mIconPosition);
    superCardToast.setBackgroundResource(style.mBackgroundResource);

    /** Must use if else statements here to prevent erratic behavior */
    if (style.isTouchDismissable) {

      superCardToast.setTouchToDismiss(true);

    } else if (style.isSwipeDismissable) {

      superCardToast.setSwipeToDismiss(true);
    }

    superCardToast.setShowImmediate(true);
    superCardToast.show();
  }