eunid / netid-sdk-android

SDK-Android
Apache License 2.0
1 stars 0 forks source link

[BUG]: Crash with java.lang.IllegalStateException #98

Closed achimschloss closed 1 year ago

achimschloss commented 1 year ago

After commit - https://github.com/eunid/netid-sdk-android/commit/1c42ccfe9e1f4b22a3783cbdf5c8ff7a715d2ed4 - Successfull Login Flow (and likely the other too) fail with java.lang.IllegalStateException

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.netid.mobile.sdk.example, PID: 8313
    java.lang.RuntimeException: Unable to destroy activity {de.netid.mobile.sdk.example/de.netid.mobile.sdk.example.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5433)
        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5466)
        at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
        at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1844)
        at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1884)
        at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:329)
        at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:294)
        at androidx.fragment.app.DialogFragment.dismissInternal(DialogFragment.java:355)
        at androidx.fragment.app.DialogFragment.dismiss(DialogFragment.java:307)
        at com.google.android.material.bottomsheet.BottomSheetDialogFragment.dismiss(BottomSheetDialogFragment.java:47)
        at de.netid.mobile.sdk.example.MainActivity.onAuthenticationCanceled(MainActivity.kt:296)
        at de.netid.mobile.sdk.api.NetIdService.onCloseClicked(NetIdService.kt:269)
        at de.netid.mobile.sdk.example.SdkContentBottomDialogFragment.onDestroyView(SdkContentBottomDialogFragment.kt:50)
        at androidx.fragment.app.Fragment.performDestroyView(Fragment.java:3200)
achimschloss commented 1 year ago

Likely because NetIdService.onCloseClicked() is now also called when the fragment is discarded after a success-full authentication (i.e. the error to be reported (user canceled authentication) is wrong).

Permission Flow does not crash, but ends with an error (given cancel is called)