Repository navigation
Conversation
Use Navigation 3's Material ListDetailSceneStrategy to display the chat list as the list pane, conversations as the detail pane, and profiles as the extra pane on wide windows, while keeping the existing ModalNavigationDrawer flow on single-pane phones.
affordance. - Provide per-channel conversation data from the fake data set instead of showing the #composers conversation in every channel. - Give the list pane its own accessibility pane title instead of the private navigation_menu string of Compose UI, and let NavigationTest find the chat list in either the drawer or the list pane. - Trim comments
Contributor
⚡ Jetpack Compose Performance ReviewNo Jetpack Compose performance issues were found in the changed code. Summary of Analyzed Changes
|
… 3-pane windows), label it "Show chat list", and fix NavigationTest on wide windows.
raystatic
marked this pull request as ready for review
October 22, 2026 10:45
Contributor
⚡ Jetpack Compose Performance ReviewFinding 1: Uncached Snapshot Collection Filtering and Loss of Instance Equality for Skippability
// On single-pane windows the chat list is shown in the drawer instead of a screen. The
// conversation is never popped, so the displayed back stack is never empty.
val displayBackStack by remember(isMultiPane) {
derivedStateOf {
if (isMultiPane) {
backStack
} else {
backStack.filter { it !is ChatList }.also {
check(it.isNotEmpty()) { "A conversation must always be on the back stack" }
}
}
}
}Finding 2: Shape Re-allocation in Composition & Redundant Clipping Layer on
|
riggaroo
reviewed
Oct 22, 2026
| modifier: Modifier = Modifier, | ||
| scrollBehavior: TopAppBarScrollBehavior? = null, | ||
| onNavIconPressed: () -> Unit = { }, | ||
| onNavIconPressed: (() -> Unit)? = { }, |
Collaborator
There was a problem hiding this comment.
I dont think this pattern is generally encouraged, I would rather pass an empty navigationIcon instead of checking this is null
riggaroo
reviewed
Oct 22, 2026
| contentDescription = navDrawerDescription | ||
| modifier = if (onNavIconPressed != null) { | ||
| Modifier | ||
| .clip(shape) |
Collaborator
There was a problem hiding this comment.
Does this need to be done twice?
riggaroo
reviewed
Oct 22, 2026
| val scope = rememberCoroutineScope() | ||
|
|
||
| // Override the defaults so that there isn't a horizontal space between the panes | ||
| val windowAdaptiveInfo = currentWindowAdaptiveInfoV2() |
Collaborator
Contributor
⚡ Jetpack Compose Performance ReviewNo Jetpack Compose performance issues were found in the changed code. Audit Summary
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uses Nav3's
ListDetailSceneStrategy(for an adaptive list-detail layout.list pane, the conversation the detail pane, and profiles open in the extra
pane. The drawer is disabled there; the list pane takes its place.
ModalNavigationDrawer, the channel nameopens it.
droidcon-nycshows an empty state insteadof duplicating
#composers(behaviour change vsmain, where both channelsshowed the same messages).
Screenshots