From 529ba919cf99cee864c97c78d9af9169a6305e5b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Mar 2025 15:31:06 +0100 Subject: [PATCH] Add a filter to avoid stack overflow when pressing the back button several times. (#4430) Fixes #4181 --- .../features/poll/impl/create/CreatePollNode.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt index 04f927086b..5a86e476a9 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt @@ -22,6 +22,7 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.RoomScope import io.element.android.services.analytics.api.AnalyticsService +import java.util.concurrent.atomic.AtomicBoolean @ContributesNode(RoomScope::class) class CreatePollNode @AssistedInject constructor( @@ -34,7 +35,16 @@ class CreatePollNode @AssistedInject constructor( private val inputs: Inputs = inputs() - private val presenter = presenterFactory.create(backNavigator = ::navigateUp, mode = inputs.mode) + private var isNavigatingUp = AtomicBoolean(false) + + private val presenter = presenterFactory.create( + backNavigator = { + if (isNavigatingUp.compareAndSet(false, true)) { + navigateUp() + } + }, + mode = inputs.mode, + ) init { lifecycle.subscribe(