braintree / braintree-android-drop-in

Braintree Drop-In SDK for Android
https://developers.braintreepayments.com/guides/drop-in/android/v2
MIT License
124 stars 79 forks source link

AddCardFragment crashes upon device rotation with NullPointerException #429

Closed dinoolivo closed 11 months ago

dinoolivo commented 11 months ago

Braintree SDK Version

6.11.0

Environment

Sandbox

Android Version & Device

Samsung Galaxy A33 - Android 13

Braintree dependencies

com.braintreepayments.api:drop-in:6.11.0

Describe the bug

when on the credit card input page if the user rotates the screen the application crashes with the following stacktrace:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
at com.braintreepayments.api.AddCardFragment.onCreateView(AddCardFragment.java:59)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3113)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1435)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2979)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2897)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:351)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1510)
at android.app.Activity.performStart(Activity.java:8616)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4204)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

I don't know if it can be of any help but the issue seems to be related to this code:

@Override
public void onResume() {
    super.onResume();
    cardForm.getCardEditText().requestFocus();

    Bundle args = getArguments();
    if (args != null) {
        String cardNumber = args.getString("EXTRA_CARD_NUMBER");
        if (cardNumber != null) {
            cardForm.getCardEditText().setText(cardNumber);
            CardType cardType = cardForm.getCardEditText().getCardType();
            onCardTypeChanged(cardType);
        }
        // prevent card number from overriding existing input
        setArguments(null);
    }
}

it sets the arguments to null so the next time onCreateView is called it tries to get the argument and crashes:

Bundle args = getArguments();
 DropInRequest dropInRequest = (DropInRequest) args.getParcelable("EXTRA_DROP_IN_REQUEST");

It seems to appear every time.

Thanks in advance, Dino

To reproduce

  1. open the drop in ui
  2. click on the credit card option. The credit card input page appears.
  3. enable screen rotation
  4. rotate the screen
  5. the application crashes

Expected behavior

It is expected to not crash on screen orientation change

Screenshots

No response

sshropshire commented 11 months ago

@dinoolivo thanks for using the Braintree SDK for Android. We have a fix for this. Once it's reviewed we'll get it merged in, tested and released. No specific timeline, but it's on our radar 🙏.

sshropshire commented 11 months ago

This is now fixed in version 6.11.1.