diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetDialogManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetDialogManager.kt index dad48a1ed7..654701ed9a 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetDialogManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetDialogManager.kt @@ -50,16 +50,26 @@ class FormSheetDialogManager( private val animationCoordinator = FormSheetAnimationCoordinator(dimmingManager) + private val lifecycleCoordinator = + FormSheetLifecycleCoordinator( + dialog = dialog, + dimmingManager = dimmingManager, + onShow = { + dimmingManager.onDialogShown() + bottomSheetView?.let { view -> + animationCoordinator.runEnterAnimation(view) + } + }, + onDismiss = onDismissRequest, + ) + init { bottomSheetView?.let { view -> setupBehaviorCallbacksForDimmingView(view) setupOffscreenPositionBeforeFirstDraw(view) } - setupDialogShowListener() - setupDialogCancelListener() + lifecycleCoordinator.setup() setupWindowInsetsListener() - - dimmingManager.setOnBackdropClickListener(onDismissRequest) } internal fun applyConfig(newConfig: FormSheetConfig) { @@ -147,22 +157,6 @@ class FormSheetDialogManager( ViewCompat.setWindowInsetsAnimationCallback(view, null) } - private fun setupDialogShowListener() { - dialog.setOnShowListener { - dimmingManager.onDialogShown() - - bottomSheetView?.let { view -> - animationCoordinator.runEnterAnimation(view) - } - } - } - - private fun setupDialogCancelListener() { - dialog.setOnCancelListener { - onDismissRequest() - } - } - private fun setupWindowInsetsListener() { ViewCompat.setOnApplyWindowInsetsListener(container) { _, insets -> lastTopInset = getTopInset(insets) @@ -220,12 +214,8 @@ class FormSheetDialogManager( ).bottom internal fun destroy() { - dimmingManager.setOnBackdropClickListener {} - + lifecycleCoordinator.destroy() ViewCompat.setOnApplyWindowInsetsListener(container, null) - - dialog.setOnShowListener(null) - dialog.setOnCancelListener(null) dialog.dismiss() } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt new file mode 100644 index 0000000000..c4aaf6a031 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt @@ -0,0 +1,31 @@ +package com.swmansion.rnscreens.gamma.modals.formsheet + +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.swmansion.rnscreens.gamma.modals.dimmingview.DimmingViewManager + +internal class FormSheetLifecycleCoordinator( + private val dialog: BottomSheetDialog, + private val dimmingManager: DimmingViewManager, + private val onShow: () -> Unit, + private val onDismiss: () -> Unit, +) { + internal fun setup() { + dialog.setOnShowListener { + onShow() + } + + dialog.setOnCancelListener { + onDismiss() + } + + dimmingManager.setOnBackdropClickListener { + onDismiss() + } + } + + internal fun destroy() { + dimmingManager.setOnBackdropClickListener {} + dialog.setOnShowListener(null) + dialog.setOnCancelListener(null) + } +}