Prepare conversation fragment navigation for two-pane conversation settings.

This commit is contained in:
jeffrey-signal
2026-03-19 11:56:18 -04:00
committed by Cody Henthorne
parent 78d3db319c
commit 72cbe61f6c
9 changed files with 124 additions and 53 deletions

View File

@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.components.settings.conversation
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
import org.thoughtcrime.securesms.util.DynamicTheme
class CallInfoActivity : ConversationSettingsActivity(), ConversationSettingsFragment.Callback {
class CallInfoActivity : ConversationSettingsActivity(), ConversationSettingsFragment.TransitionCallback {
override val dynamicTheme: DynamicTheme = DynamicNoActionBarTheme()
}

View File

@@ -7,7 +7,6 @@ import android.os.Bundle
import android.view.View
import androidx.core.app.ActivityCompat
import androidx.core.app.ActivityOptionsCompat
import androidx.core.util.Pair
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.DSLSettingsActivity
@@ -17,7 +16,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.DynamicConversationSettingsTheme
import org.thoughtcrime.securesms.util.DynamicTheme
open class ConversationSettingsActivity : DSLSettingsActivity(), ConversationSettingsFragment.Callback {
open class ConversationSettingsActivity : DSLSettingsActivity(), ConversationSettingsFragment.TransitionCallback {
override val dynamicTheme: DynamicTheme = DynamicConversationSettingsTheme()
@@ -27,7 +26,7 @@ open class ConversationSettingsActivity : DSLSettingsActivity(), ConversationSet
super.onCreate(savedInstanceState, ready)
}
override fun onContentWillRender() {
override fun onReadyForEnterTransition() {
ActivityCompat.startPostponedEnterTransition(this)
}

View File

@@ -120,6 +120,11 @@ private const val REQUEST_CODE_ADD_CONTACT = 2
private const val REQUEST_CODE_ADD_MEMBERS_TO_GROUP = 3
private const val REQUEST_CODE_RETURN_FROM_MEDIA = 4
/**
* Settings screen for a conversation.
*
* Hosts that want shared element enter transitions should implement [TransitionCallback].
*/
class ConversationSettingsFragment :
DSLSettingsFragment(
layoutId = R.layout.conversation_settings_fragment,
@@ -156,7 +161,7 @@ class ConversationSettingsFragment :
}
)
private lateinit var callback: Callback
private var transitionCallback: TransitionCallback? = null
private lateinit var toolbar: Toolbar
private lateinit var toolbarAvatarContainer: FrameLayout
@@ -172,8 +177,7 @@ class ConversationSettingsFragment :
override fun onAttach(context: Context) {
super.onAttach(context)
callback = context as Callback
transitionCallback = context as? TransitionCallback
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -300,7 +304,7 @@ class ConversationSettingsFragment :
adapter.submitList(getConfiguration(state).toMappingModelList()) {
if (state.isLoaded) {
(view?.parent as? ViewGroup)?.doOnPreDraw {
callback.onContentWillRender()
transitionCallback?.onReadyForEnterTransition()
}
}
}
@@ -1136,7 +1140,13 @@ class ConversationSettingsFragment :
}
}
interface Callback {
fun onContentWillRender()
/**
* Implemented by hosts that postpone enter transitions (for example, shared element flows).
*
* Called when this fragment has loaded enough UI state to safely run the postponed enter
* transition.
*/
interface TransitionCallback {
fun onReadyForEnterTransition()
}
}