Fix back navigation from conversation settings sub-screens popping to the chat.

This commit is contained in:
Alex Hart
2026-06-16 09:56:12 -04:00
committed by Greyson Parrelli
parent aa9c7f7d7b
commit ba76a8323e
2 changed files with 21 additions and 2 deletions
@@ -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<FragmentBackPressedInfo> {
return navController.currentBackStackEntryFlow.map {
if (navController.previousBackStackEntry != null) {
FragmentBackPressedInfo.Enabled { navController.popBackStack() }
} else {
FragmentBackPressedInfo.Disabled
}
}
}
}
@@ -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)
}
}
}
}