From 379067debfca006ceaeb98c2beece5d872a29854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Boro=C5=84?= Date: Thu, 2 Jul 2026 17:28:03 +0200 Subject: [PATCH 1/3] Move show/cancel callbacks setup to a dedicated class --- .../formsheet/FormSheetDialogManager.kt | 36 ++++++------------- .../FormSheetLifecycleCoordinator.kt | 36 +++++++++++++++++++ 2 files changed, 47 insertions(+), 25 deletions(-) create mode 100644 android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt 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..8268d8e1de 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,22 @@ class FormSheetDialogManager( private val animationCoordinator = FormSheetAnimationCoordinator(dimmingManager) + private val lifecycleCoordinator = + FormSheetLifecycleCoordinator( + dialog = dialog, + bottomSheetView = bottomSheetView, + dimmingManager = dimmingManager, + animationCoordinator = animationCoordinator, + onDismissRequest = onDismissRequest, + ) + init { bottomSheetView?.let { view -> setupBehaviorCallbacksForDimmingView(view) setupOffscreenPositionBeforeFirstDraw(view) } - setupDialogShowListener() - setupDialogCancelListener() + lifecycleCoordinator.setup() setupWindowInsetsListener() - - dimmingManager.setOnBackdropClickListener(onDismissRequest) } internal fun applyConfig(newConfig: FormSheetConfig) { @@ -147,22 +153,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 +210,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..ca9640fe01 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt @@ -0,0 +1,36 @@ +package com.swmansion.rnscreens.gamma.modals.formsheet + +import android.widget.FrameLayout +import androidx.core.view.ViewCompat +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.swmansion.rnscreens.gamma.modals.dimmingview.DimmingViewManager + +internal class FormSheetLifecycleCoordinator( + private val dialog: BottomSheetDialog, + private val bottomSheetView: FrameLayout?, + private val dimmingManager: DimmingViewManager, + private val animationCoordinator: FormSheetAnimationCoordinator, + private val onDismissRequest: () -> Unit, +) { + internal fun setup() { + dialog.setOnShowListener { + dimmingManager.onDialogShown() + bottomSheetView?.let { view -> + animationCoordinator.runEnterAnimation(view) + } + } + + dialog.setOnCancelListener { + onDismissRequest() + } + + dimmingManager.setOnBackdropClickListener(onDismissRequest) + } + + internal fun destroy() { + dimmingManager.setOnBackdropClickListener {} + dialog.setOnShowListener(null) + dialog.setOnCancelListener(null) + } +} From b050b427f5633e8806e30edd8b233b09da449ac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Boro=C5=84?= Date: Thu, 2 Jul 2026 17:37:39 +0200 Subject: [PATCH 2/3] Cleanup --- .../gamma/modals/formsheet/FormSheetLifecycleCoordinator.kt | 2 -- 1 file changed, 2 deletions(-) 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 index ca9640fe01..804773ecf1 100644 --- 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 @@ -1,8 +1,6 @@ package com.swmansion.rnscreens.gamma.modals.formsheet import android.widget.FrameLayout -import androidx.core.view.ViewCompat -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.swmansion.rnscreens.gamma.modals.dimmingview.DimmingViewManager From 197c042314d897b0ea477a8f3883bb615bc8734e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Boro=C5=84?= Date: Fri, 3 Jul 2026 09:29:22 +0200 Subject: [PATCH 3/3] Add onShow/Dismiss callbacks to lifecycle coordinator --- .../modals/formsheet/FormSheetDialogManager.kt | 10 +++++++--- .../formsheet/FormSheetLifecycleCoordinator.kt | 17 +++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) 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 8268d8e1de..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 @@ -53,10 +53,14 @@ class FormSheetDialogManager( private val lifecycleCoordinator = FormSheetLifecycleCoordinator( dialog = dialog, - bottomSheetView = bottomSheetView, dimmingManager = dimmingManager, - animationCoordinator = animationCoordinator, - onDismissRequest = onDismissRequest, + onShow = { + dimmingManager.onDialogShown() + bottomSheetView?.let { view -> + animationCoordinator.runEnterAnimation(view) + } + }, + onDismiss = onDismissRequest, ) init { 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 index 804773ecf1..c4aaf6a031 100644 --- 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 @@ -1,29 +1,26 @@ package com.swmansion.rnscreens.gamma.modals.formsheet -import android.widget.FrameLayout import com.google.android.material.bottomsheet.BottomSheetDialog import com.swmansion.rnscreens.gamma.modals.dimmingview.DimmingViewManager internal class FormSheetLifecycleCoordinator( private val dialog: BottomSheetDialog, - private val bottomSheetView: FrameLayout?, private val dimmingManager: DimmingViewManager, - private val animationCoordinator: FormSheetAnimationCoordinator, - private val onDismissRequest: () -> Unit, + private val onShow: () -> Unit, + private val onDismiss: () -> Unit, ) { internal fun setup() { dialog.setOnShowListener { - dimmingManager.onDialogShown() - bottomSheetView?.let { view -> - animationCoordinator.runEnterAnimation(view) - } + onShow() } dialog.setOnCancelListener { - onDismissRequest() + onDismiss() } - dimmingManager.setOnBackdropClickListener(onDismissRequest) + dimmingManager.setOnBackdropClickListener { + onDismiss() + } } internal fun destroy() {