Skip to content

Commit

Permalink
Issue braintree#252 - BraintreeFragment with Fragment (using child Fr…
Browse files Browse the repository at this point in the history
…agmentManager).
  • Loading branch information
zsoltvilagos committed May 28, 2019
1 parent 31cfa35 commit e68c925
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;

import com.braintreepayments.api.exceptions.BraintreeException;
Expand Down Expand Up @@ -135,8 +136,29 @@ public static BraintreeFragment newInstance(AppCompatActivity activity, String a
throw new InvalidArgumentException("Activity is null");
}

FragmentManager fm = activity.getSupportFragmentManager();
BraintreeFragment braintreeFragment = (BraintreeFragment) fm.findFragmentByTag(TAG);
return newInstance(activity, activity.getSupportFragmentManager(), authorization);
}

public static BraintreeFragment newInstance(Fragment fragment, String authorization)
throws InvalidArgumentException {
if (fragment == null) {
throw new InvalidArgumentException("Fragment is null");
}

return newInstance(fragment.getContext(), fragment.getChildFragmentManager(), authorization);
}

private static BraintreeFragment newInstance(Context context, FragmentManager fragmentManager, String authorization)
throws InvalidArgumentException {
if (context == null) {
throw new InvalidArgumentException("Context is null");
}

if (fragmentManager == null) {
throw new InvalidArgumentException("FragmentManager is null");
}

BraintreeFragment braintreeFragment = (BraintreeFragment) fragmentManager.findFragmentByTag(TAG);
if (braintreeFragment == null) {
braintreeFragment = new BraintreeFragment();
Bundle bundle = new Bundle();
Expand All @@ -149,31 +171,31 @@ public static BraintreeFragment newInstance(AppCompatActivity activity, String a
}

bundle.putString(EXTRA_SESSION_ID, UUIDHelper.getFormattedUUID());
bundle.putString(EXTRA_INTEGRATION_TYPE, IntegrationType.get(activity));
bundle.putString(EXTRA_INTEGRATION_TYPE, IntegrationType.get(context));
braintreeFragment.setArguments(bundle);

try {
if (VERSION.SDK_INT >= VERSION_CODES.N) {
try {
fm.beginTransaction().add(braintreeFragment, TAG).commitNow();
fragmentManager.beginTransaction().add(braintreeFragment, TAG).commitNow();
} catch (IllegalStateException | NullPointerException e) {
fm.beginTransaction().add(braintreeFragment, TAG).commit();
fragmentManager.beginTransaction().add(braintreeFragment, TAG).commit();
try {
fm.executePendingTransactions();
fragmentManager.executePendingTransactions();
} catch (IllegalStateException ignored) {}
}
} else {
fm.beginTransaction().add(braintreeFragment, TAG).commit();
fragmentManager.beginTransaction().add(braintreeFragment, TAG).commit();
try {
fm.executePendingTransactions();
fragmentManager.executePendingTransactions();
} catch (IllegalStateException ignored) {}
}
} catch (IllegalStateException e) {
throw new InvalidArgumentException(e.getMessage());
}
}

braintreeFragment.mContext = activity.getApplicationContext();
braintreeFragment.mContext = context.getApplicationContext();

return braintreeFragment;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package com.braintreepayments.api.internal;

import android.app.Activity;
import android.content.Context;

public class IntegrationType {

public static String get(Activity activity) {
public static String get(Context context) {
try {
if (Class.forName("com.braintreepayments.api.BraintreePaymentActivity").isInstance(activity)) {
if (Class.forName("com.braintreepayments.api.BraintreePaymentActivity").isInstance(context)) {
return "dropin";
}
} catch (ClassNotFoundException ignored) {}

try {
if (Class.forName("com.braintreepayments.api.dropin.DropInActivity").isInstance(activity)) {
if (Class.forName("com.braintreepayments.api.dropin.DropInActivity").isInstance(context)) {
return "dropin2";
}
} catch (ClassNotFoundException ignored) {}
Expand Down

0 comments on commit e68c925

Please sign in to comment.