mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-08-07 05:48:09 +01:00
Fix back navigation from conversation settings sub-screens popping to the chat.
This commit is contained in:
committed by
Greyson Parrelli
parent
aa9c7f7d7b
commit
ba76a8323e
+15
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user