/**
   * Create a new instance of {@link BraintreeFragment} using the client token and add it to the
   * {@link Activity}'s {@link FragmentManager}.
   *
   * @param activity The {@link Activity} to add the {@link Fragment} to.
   * @param authorization The tokenization key or client token to use.
   * @return {@link BraintreeFragment}
   * @throws InvalidArgumentException If the tokenization key or client token is not valid or cannot
   *     be parsed.
   */
  public static BraintreeFragment newInstance(Activity activity, String authorization)
      throws InvalidArgumentException {
    FragmentManager fm = activity.getFragmentManager();

    String integrationType = "custom";
    try {
      if (Class.forName("com.braintreepayments.api.BraintreePaymentActivity")
          .isInstance(activity)) {
        integrationType = "dropin";
      }
    } catch (ClassNotFoundException ignored) {
    }

    BraintreeFragment braintreeFragment = (BraintreeFragment) fm.findFragmentByTag(TAG);
    if (braintreeFragment == null) {
      braintreeFragment = new BraintreeFragment();
      Bundle bundle = new Bundle();

      try {
        Authorization auth = Authorization.fromString(authorization);
        bundle.putParcelable(EXTRA_AUTHORIZATION_TOKEN, auth);
      } catch (InvalidArgumentException e) {
        throw new InvalidArgumentException("Tokenization Key or client token was invalid.");
      }

      bundle.putString(EXTRA_INTEGRATION_TYPE, integrationType);
      braintreeFragment.setArguments(bundle);
      fm.beginTransaction().add(braintreeFragment, TAG).commit();
    }

    return braintreeFragment;
  }
  @Override
  protected void onAuthorizationFetched() {
    try {
      mBraintreeFragment = BraintreeFragment.newInstance(this, mAuthorization);
    } catch (InvalidArgumentException e) {
      onError(e);
    }

    setProgressBarIndeterminateVisibility(false);
    mPurchaseButton.setEnabled(true);
  }