From 65ef59a576fe27821758f08e4c94cc806f98aba3 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(