added the avatar and the room title as subtitle in the thread timeline as a principal action

also added a fix for the erroneous reply in thread action while in a thread, and also discovered that we can lead align the principal action again on iOS 26 (so it was a beta issue)
This commit is contained in:
Mauro Romito
2025-09-16 17:19:07 +02:00
committed by Mauro
parent a1038f0ffe
commit 826230001b
6 changed files with 79 additions and 14 deletions
@@ -23,8 +23,9 @@ struct ThreadTimelineScreen: View {
var body: some View {
TimelineView(timelineContext: timelineContext)
.navigationTitle("Thread")
.navigationTitle(L10n.commonThread)
.navigationBarTitleDisplayMode(.inline)
.toolbar { toolbar }
.background(.compound.bgCanvasDefault)
.toolbarBackground(.visible, for: .navigationBar) // Fix the toolbar's background.
.timelineMediaPreview(viewModel: $context.mediaPreviewViewModel)
@@ -53,6 +54,24 @@ struct ThreadTimelineScreen: View {
}
}
@ToolbarContentBuilder
private var toolbar: some ToolbarContent {
// .principal + .primaryAction works better than .navigation leading + trailing
// as the latter disables interaction in the action button for rooms with long names
ToolbarItem(placement: .principal) {
RoomHeaderView(roomName: L10n.commonThread,
roomSubtitle: context.viewState.roomTitle,
roomAvatar: context.viewState.roomAvatar,
dmRecipientVerificationState: context.viewState.dmRecipientVerificationState,
mediaProvider: context.mediaProvider)
// Using a button stops it from getting truncated in the navigation bar
.contentShape(.rect)
}
if #available(iOS 26, *) {
ToolbarSpacer()
}
}
private var isAtBottomAndLive: Bool {
timelineContext.isScrolledToBottom && timelineContext.viewState.timelineState.isLive
}