Closed jczerski closed 3 years ago
At the very beginning I would like you thank you for great library which solves developer problems in a beautiful style.
I found a problem when system permission dialog appears and we put app to the background.
Code snippet for fragment (for activity is same behaviour):
class TestFragment : Fragment() { private lateinit var locationPermissionRequester: PermissionsRequester override fun onAttach(context: Context) { super.onAttach(context) locationPermissionRequester = constructLocationPermissionRequest(LocationPermission.FINE) { // do nothing } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) locationPermissionRequester.launch() } }
Stacktrace:
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.debug/my.app..RootActivity}: java.lang.IllegalStateException: FragmentManager is already executing transactions android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) android.os.Handler.dispatchMessage(Handler.java:107) android.os.Looper.loop(Looper.java:214) android.app.ActivityThread.main(ActivityThread.java:7356) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.IllegalStateException: FragmentManager is already executing transactions androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1919) androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1955) androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:311) permissions.dispatcher.ktx.PermissionRequestFragment.dismiss(PermissionRequestFragment.kt:26) permissions.dispatcher.ktx.PermissionRequestFragment$NormalRequestPermissionFragment.onRequestPermissionsResult(PermissionRequestFragment.kt:56) androidx.fragment.app.FragmentManager$11.onActivityResult(FragmentManager.java:2951) androidx.fragment.app.FragmentManager$11.onActivityResult(FragmentManager.java:2923) androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:362) androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:322) androidx.activity.ComponentActivity.onRequestPermissionsResult(ComponentActivity.java:654) androidx.fragment.app.FragmentActivity.onRequestPermissionsResult(FragmentActivity.java:604) android.app.Activity.requestPermissions(Activity.java:5083) androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:516) androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:195) androidx.activity.result.ActivityResultRegistry$3.launch(ActivityResultRegistry.java:219) androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:47) androidx.fragment.app.FragmentManager.launchRequestPermissions(FragmentManager.java:3028) androidx.fragment.app.Fragment.requestPermissions(Fragment.java:1559) permissions.dispatcher.ktx.PermissionRequestFragment$NormalRequestPermissionFragment.onCreate(PermissionRequestFragment.kt:32) androidx.fragment.app.Fragment.performCreate(Fragment.java:2936) androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:472) androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278) androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1636) androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3112) androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:3045) androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240) androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:272) my.app.RootActivity.onCreate(RootActivity.kt:147) android.app.Activity.performCreate(Activity.java:7802) android.app.Activity.performCreate(Activity.java:7791) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) android.os.Handler.dispatchMessage(Handler.java:107) android.os.Looper.loop(Looper.java:214) android.app.ActivityThread.main(ActivityThread.java:7356) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Permissions Dispatcher
4.8.0
Permissions Dispatcher KTX
1.0.4
Thank you for the help in advance. Jack
thx, I could repro 🙏
@hotchemi thank you for review and I'm waiting for release 😃
@hotchemi can we expect ktx 1.0.5 release ?:)
1.0.5
sure I'll do!
Overview
At the very beginning I would like you thank you for great library which solves developer problems in a beautiful style.
I found a problem when system permission dialog appears and we put app to the background.
Code snippet for fragment (for activity is same behaviour):
Stacktrace:
Expected
Actual
Environment
Permissions Dispatcher
version4.8.0
andPermissions Dispatcher KTX
version1.0.4
Reproducible steps
Thank you for the help in advance. Jack