From 18cae183203f1df1df056e4745a85fc2876d9536 Mon Sep 17 00:00:00 2001 From: Kaede Akino Date: Sat, 12 Sep 2026 15:37:52 +0800 Subject: [PATCH] Adapt Live Activity icon capacity --- TFITests/MobileAppTests.swift | 4 +++- TFIWidgets/WorkspaceLiveActivity.swift | 20 +++++++++++++++---- .../WorkspaceActivityAttributes.swift | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/TFITests/MobileAppTests.swift b/TFITests/MobileAppTests.swift index a6572c90..34af66b7 100644 --- a/TFITests/MobileAppTests.swift +++ b/TFITests/MobileAppTests.swift @@ -850,8 +850,10 @@ private actor MobileTestSFTPClient: SFTPClientProtocol { let state = WorkspaceActivityAttributes.ContentState.snapshot(sessions, focusedID: focused) #expect(state.workspaceCount == 12) #expect(state.connectedCount == 3) - #expect(state.sessions.count == WorkspaceActivityAttributes.ContentState.maximumPresentedSessionCount) + #expect(WorkspaceActivityAttributes.ContentState.maximumPresentedSessionCount == 6) + #expect(state.sessions.count == 6) #expect(state.sessions.first?.id == focused) + #expect(state.workspaceCount > state.sessions.count) #expect(WorkspaceActivityAttributes.workspaceID(from: state.destinationURL) == focused) #expect(try JSONEncoder().encode(state).count < 3500) } diff --git a/TFIWidgets/WorkspaceLiveActivity.swift b/TFIWidgets/WorkspaceLiveActivity.swift index e0d34ce0..2009f0f6 100644 --- a/TFIWidgets/WorkspaceLiveActivity.swift +++ b/TFIWidgets/WorkspaceLiveActivity.swift @@ -52,8 +52,21 @@ struct WorkspaceLiveActivity: Widget { } private func sessions(_ context: ActivityViewContext) -> some View { - let visibleSessions = context.state.sessions.prefix( - WorkspaceActivityAttributes.ContentState.maximumPresentedSessionCount) + ViewThatFits(in: .horizontal) { + sessionRow( + context, + maximumVisibleCount: WorkspaceActivityAttributes.ContentState.maximumPresentedSessionCount) + sessionRow(context, maximumVisibleCount: 5) + sessionRow(context, maximumVisibleCount: 4) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + private func sessionRow( + _ context: ActivityViewContext, + maximumVisibleCount: Int + ) -> some View { + let visibleSessions = context.state.sessions.prefix(maximumVisibleCount) return HStack(spacing: 8) { ForEach(visibleSessions) { session in @@ -70,9 +83,8 @@ struct WorkspaceLiveActivity: Widget { .frame(minWidth: 44, minHeight: 44) }.accessibilityLabel("All Workspaces") } - Spacer(minLength: 0) } - .frame(maxWidth: .infinity, alignment: .leading) + .fixedSize(horizontal: true, vertical: false) } private func appIcon(size: CGFloat) -> some View { diff --git a/WorkspaceActivitySupport/WorkspaceActivityAttributes.swift b/WorkspaceActivitySupport/WorkspaceActivityAttributes.swift index 35b81059..7fe5cab8 100644 --- a/WorkspaceActivitySupport/WorkspaceActivityAttributes.swift +++ b/WorkspaceActivitySupport/WorkspaceActivityAttributes.swift @@ -15,7 +15,7 @@ nonisolated struct WorkspaceActivityAttributes: ActivityAttributes { } struct ContentState: Codable, Hashable { - static let maximumPresentedSessionCount = 4 + static let maximumPresentedSessionCount = 6 var workspaceCount: Int var connectedCount: Int