From ba76a8323e8d99964157f6dcfa4e45c6ac439a01 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 15 Jun 2026 16:18:26 -0300 Subject: [PATCH] Fix back navigation from conversation settings sub-screens popping to the chat. --- .../ConversationSettingsNavHostFragment.kt | 16 +++++++++++++++- .../thoughtcrime/securesms/main/ChatsNavHost.kt | 7 ++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsNavHostFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsNavHostFragment.kt index 0dead83c2d..81594d0866 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsNavHostFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsNavHostFragment.kt @@ -9,13 +9,17 @@ import android.os.Bundle import androidx.core.os.bundleOf import androidx.navigation.fragment.NavHostFragment import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.DSLSettingsActivity +import org.thoughtcrime.securesms.compose.FragmentBackPressedInfo +import org.thoughtcrime.securesms.compose.FragmentBackPressedInfoProvider import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId -class ConversationSettingsNavHostFragment : NavHostFragment() { +class ConversationSettingsNavHostFragment : NavHostFragment(), FragmentBackPressedInfoProvider { companion object { suspend fun createArgs(recipientId: RecipientId): Bundle { @@ -36,4 +40,14 @@ class ConversationSettingsNavHostFragment : NavHostFragment() { navController.setGraph(R.navigation.conversation_settings, args) super.onCreate(savedInstanceState) } + + override fun getFragmentBackPressedInfo(): Flow { + return navController.currentBackStackEntryFlow.map { + if (navController.previousBackStackEntry != null) { + FragmentBackPressedInfo.Enabled { navController.popBackStack() } + } else { + FragmentBackPressedInfo.Disabled + } + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/ChatsNavHost.kt b/app/src/main/java/org/thoughtcrime/securesms/main/ChatsNavHost.kt index c978373e9a..7712a08833 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/ChatsNavHost.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/ChatsNavHost.kt @@ -197,6 +197,9 @@ fun NavGraphBuilder.chatNavGraphBuilder( } arguments?.let { args -> + val backPressedState = remember { FragmentBackPressedState() } + FragmentBackHandler(backPressedState) + AndroidFragment( clazz = ConversationSettingsNavHostFragment::class.java, fragmentState = fragmentState, @@ -206,7 +209,9 @@ fun NavGraphBuilder.chatNavGraphBuilder( .background(MaterialTheme.colorScheme.background) .statusBarsPadding() .navigationBarsPadding() - ) + ) { fragment -> + backPressedState.attach(fragment) + } } } }