diff --git a/WireUI/Sources/WireAccountImage/AccountImageView/AccountImageView.swift b/WireUI/Sources/WireAccountImage/AccountImageView/AccountImageView.swift index d3780b3c6cb..69ecdfdcdd9 100644 --- a/WireUI/Sources/WireAccountImage/AccountImageView/AccountImageView.swift +++ b/WireUI/Sources/WireAccountImage/AccountImageView/AccountImageView.swift @@ -195,7 +195,7 @@ public final class AccountImageView: UIView { guard let accountImageViewWrapper = accountImageView.superview else { return } accountImageViewWrapper.layer.cornerRadius = if isTeamAccount { - teamAccountImageCornerRadius + teamAccountImageCornerRadius // TODO: [WPB-11449] is this even needed? We always show the user's image } else { accountImageViewWrapper.frame.height / 2 } diff --git a/WireUI/Sources/WireDesign/Appearance/SidebarViewDesign.swift b/WireUI/Sources/WireDesign/Appearance/SidebarViewDesign.swift index 31bb115ea2b..5769f2dcc52 100644 --- a/WireUI/Sources/WireDesign/Appearance/SidebarViewDesign.swift +++ b/WireUI/Sources/WireDesign/Appearance/SidebarViewDesign.swift @@ -25,7 +25,7 @@ public struct SidebarViewDesign { public let accountInfoViewUsernameColor = ColorTheme.Base.secondaryText public let menuItemTitleForegroundColor = ColorTheme.Backgrounds.onBackground public let menuItemLinkIconForegroundColor = ColorTheme.Base.secondaryText - public let menuItemIsPressedTitleForegroundColor = ColorTheme.Base.onPrimary + public let menuItemIsSelectedTitleForegroundColor = ColorTheme.Base.onPrimary public init() {} } diff --git a/WireUI/Sources/WireMainNavigation/MainCoordinator.swift b/WireUI/Sources/WireMainNavigation/MainCoordinator.swift index 1dfe22831c3..1a7aba91736 100644 --- a/WireUI/Sources/WireMainNavigation/MainCoordinator.swift +++ b/WireUI/Sources/WireMainNavigation/MainCoordinator.swift @@ -18,6 +18,8 @@ import UIKit +public typealias MainCoordinator = GenericMainCoordinator + // swiftlint:disable opening_brace /// Manages the main navigation and the layout changes of the application after a successful login. @@ -31,7 +33,7 @@ import UIKit /// instances and then put or remove the content view controllers into/from `viewControllers` array. @MainActor -public final class MainCoordinator< +public final class GenericMainCoordinator< SplitViewController: MainSplitViewControllerProtocol, ConversationBuilder: MainConversationBuilderProtocol, @@ -192,7 +194,7 @@ public final class MainCoordinator< dismissArchiveIfNeeded() dismissSettingsIfNeeded() - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() // Move the conversation list from the tab bar controller to the split view controller if needed. if let conversationList = tabBarController.conversationList { @@ -222,7 +224,7 @@ public final class MainCoordinator< dismissConversationListIfNeeded() dismissSettingsIfNeeded() - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() // move the archive from the tab bar controller to the split view controller if let archive = tabBarController.archive { @@ -243,7 +245,7 @@ public final class MainCoordinator< dismissConversationListIfNeeded() dismissArchiveIfNeeded() - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() // move the settings from the tab bar controller to the split view controller if let settings = tabBarController.settings { @@ -262,7 +264,7 @@ public final class MainCoordinator< splitViewController.hideSidebar() } - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() let conversation = conversationBuilder.build( conversation: conversation, @@ -320,7 +322,7 @@ public final class MainCoordinator< selfProfile.modalPresentationStyle = .formSheet self.selfProfile = selfProfile - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() await withCheckedContinuation { continuation in splitViewController.present(selfProfile, animated: true, completion: continuation.resume) } @@ -369,7 +371,7 @@ public final class MainCoordinator< splitViewController.hideSidebar() } - await dismissPresentedViewControllerIfNeeded() + await dismissPresentedViewController() await withCheckedContinuation { continuation in splitViewController.present(viewController, animated: true, completion: continuation.resume) } @@ -399,7 +401,7 @@ public final class MainCoordinator< } } - private func dismissPresentedViewControllerIfNeeded() async { + public func dismissPresentedViewController() async { await withCheckedContinuation { continuation in splitViewController.dismiss(animated: true, completion: continuation.resume) } diff --git a/WireUI/Sources/WireMainNavigation/Preview/PreviewConversationListViewController.swift b/WireUI/Sources/WireMainNavigation/Preview/PreviewConversationListViewController.swift index b4c63f8ed7c..51b8e83af5c 100644 --- a/WireUI/Sources/WireMainNavigation/Preview/PreviewConversationListViewController.swift +++ b/WireUI/Sources/WireMainNavigation/Preview/PreviewConversationListViewController.swift @@ -25,6 +25,7 @@ final class PreviewConversationListViewController: UIHostingController, M struct ConversationModel {} struct ConversationMessageModel {} + var conversationModel: ConversationModel! { .init() } + // MARK: - Life Cycle convenience init() { diff --git a/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationBuilderProtocol.swift b/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationBuilderProtocol.swift index f816d315ce2..2dcc794fc68 100644 --- a/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationBuilderProtocol.swift +++ b/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationBuilderProtocol.swift @@ -30,9 +30,9 @@ public protocol MainConversationBuilderProtocol { message: Conversation.ConversationMessageModel?, mainCoordinator: MainCoordinator ) -> Conversation where - MainCoordinator.ConversationList == ConversationList, - MainCoordinator.SettingsContentBuilder == SettingsBuilder, - MainCoordinator.ConversationModel == Conversation.ConversationModel, - MainCoordinator.ConversationMessageModel == Conversation.ConversationMessageModel, - MainCoordinator.User == User + MainCoordinator.ConversationList == ConversationList, + MainCoordinator.SettingsContentBuilder == SettingsBuilder, + MainCoordinator.ConversationModel == Conversation.ConversationModel, + MainCoordinator.ConversationMessageModel == Conversation.ConversationMessageModel, + MainCoordinator.User == User } diff --git a/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationProtocol.swift b/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationProtocol.swift index 0cd9b0a954c..e18cef47f03 100644 --- a/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationProtocol.swift +++ b/WireUI/Sources/WireMainNavigation/Protocols/Conversation/MainConversationProtocol.swift @@ -18,7 +18,10 @@ import UIKit +@MainActor public protocol MainConversationProtocol: UIViewController { associatedtype ConversationModel associatedtype ConversationMessageModel + + var conversationModel: ConversationModel! { get } } diff --git a/WireUI/Sources/WireMainNavigation/Protocols/ConversationList/MainConversationListProtocol.swift b/WireUI/Sources/WireMainNavigation/Protocols/ConversationList/MainConversationListProtocol.swift index da17b9cfe93..7aa073cf8a3 100644 --- a/WireUI/Sources/WireMainNavigation/Protocols/ConversationList/MainConversationListProtocol.swift +++ b/WireUI/Sources/WireMainNavigation/Protocols/ConversationList/MainConversationListProtocol.swift @@ -24,10 +24,14 @@ import UIKit public protocol MainConversationListProtocol: UIViewController { associatedtype ConversationFilter: MainConversationFilterRepresentable + associatedtype ConversationModel /// Assigning a non-nil value to this property filters the presented conversations by the provided criteria. var conversationFilter: ConversationFilter? { get set } + /// The conversation which is represented by the list selection. + var selectedConversation: ConversationModel? { get } + /// Allows the ``MainCoordinator`` to inform this instance about the current split view state. var mainSplitViewState: MainSplitViewState { get set } } diff --git a/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorInjectingViewControllerBuilder.swift b/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorInjectingViewControllerBuilder.swift index 77a52630d5d..6466d631a91 100644 --- a/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorInjectingViewControllerBuilder.swift +++ b/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorInjectingViewControllerBuilder.swift @@ -30,9 +30,9 @@ public protocol MainCoordinatorInjectingViewControllerBuilder { func build( mainCoordinator: MainCoordinator ) -> ViewController where - MainCoordinator.ConversationList == ConversationList, - MainCoordinator.SettingsContentBuilder == SettingsBuilder, - MainCoordinator.ConversationModel == ConversationModel, - MainCoordinator.ConversationMessageModel == ConversationMessageModel, - MainCoordinator.User == User + MainCoordinator.ConversationList == ConversationList, + MainCoordinator.SettingsContentBuilder == SettingsBuilder, + MainCoordinator.ConversationModel == ConversationModel, + MainCoordinator.ConversationMessageModel == ConversationMessageModel, + MainCoordinator.User == User } diff --git a/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorProtocol.swift b/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorProtocol.swift index b4a28104b5e..c75e3d623a7 100644 --- a/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorProtocol.swift +++ b/WireUI/Sources/WireMainNavigation/Protocols/Coordinator/MainCoordinatorProtocol.swift @@ -60,4 +60,6 @@ public protocol MainCoordinatorProtocol: AnyObject { @MainActor func presentViewController(_ viewController: UIViewController) async + @MainActor + func dismissPresentedViewController() async } diff --git a/WireUI/Sources/WireSidebar/Models/SidebarModel.swift b/WireUI/Sources/WireSidebar/Models/SidebarModel.swift index 368bec5f36f..98a83bff7ee 100644 --- a/WireUI/Sources/WireSidebar/Models/SidebarModel.swift +++ b/WireUI/Sources/WireSidebar/Models/SidebarModel.swift @@ -27,11 +27,12 @@ final class SidebarModel: ObservableObject { @Published var wireAccentColorMapping: WireAccentColorMapping? @Published var wireTextStyleMapping: WireTextStyleMapping? @Published var sidebarBackgroundColor: UIColor = .systemGray5 - @Published var sidebarAccountInfoViewDisplayNameColor: UIColor = .darkText - @Published var sidebarAccountInfoViewUsernameColor: UIColor = .systemGray - @Published var sidebarMenuItemTitleForegroundColor: UIColor = .darkText + @Published var sidebarAccountInfoViewDisplayNameColor: UIColor = defaultTextColor + @Published var sidebarAccountInfoViewUsernameColor: UIColor = .gray + @Published var sidebarMenuHeaderForegroundColor: UIColor = defaultTextColor + @Published var sidebarMenuItemTitleForegroundColor: UIColor = defaultTextColor @Published var sidebarMenuItemLinkIconForegroundColor: UIColor = .systemGray - @Published var sidebarMenuItemIsPressedTitleForegroundColor: UIColor = .systemBlue + @Published var sidebarMenuItemIsSelectedTitleForegroundColor: UIColor = .systemBackground @Published var accountInfo = SidebarAccountInfo() @Published var selectedMenuItem: SidebarSelectableMenuItem = .all { @@ -55,3 +56,7 @@ final class SidebarModel: ObservableObject { self.supportAction = supportAction } } + +private let defaultTextColor = UIColor { + $0.userInterfaceStyle == .dark ? .white : .darkText +} diff --git a/WireUI/Sources/WireSidebar/Views/SidebarMenuItemView.swift b/WireUI/Sources/WireSidebar/Views/SidebarMenuItemView.swift index d1bad9b0058..1db165482b2 100644 --- a/WireUI/Sources/WireSidebar/Views/SidebarMenuItemView.swift +++ b/WireUI/Sources/WireSidebar/Views/SidebarMenuItemView.swift @@ -31,7 +31,7 @@ struct SidebarMenuItemView: View { @Environment(\.sidebarMenuItemTitleForegroundColor) private var titleForegroundColor @Environment(\.sidebarMenuItemLinkIconForegroundColor) private var linkIconForegroundColor - @Environment(\.sidebarMenuItemIsPressedTitleForegroundColor) private var isPressedTitleForegroundColor + @Environment(\.sidebarMenuItemIsSelectedTitleForegroundColor) private var isSelectedTitleForegroundColor /// The `systemName` which is passed into `SwiftUI.Image`. private(set) var icon: String @@ -55,11 +55,11 @@ struct SidebarMenuItemView: View { HStack { Label { title() - .foregroundStyle(isHighlighted ? isPressedTitleForegroundColor : titleForegroundColor) + .foregroundStyle(isHighlighted ? isSelectedTitleForegroundColor : titleForegroundColor) } icon: { let iconSystemNameSuffix = isHighlighted ? ".fill" : "" let icon = Image(systemName: icon + iconSystemNameSuffix) - .foregroundStyle(isHighlighted ? isPressedTitleForegroundColor : Color(accentColor)) + .foregroundStyle(isHighlighted ? isSelectedTitleForegroundColor : Color(accentColor)) .background(GeometryReader { geometryProxy in Color.clear.preference(key: SidebarMenuItemMinIconSizeKey.self, value: geometryProxy.size) }) @@ -74,7 +74,7 @@ struct SidebarMenuItemView: View { if isLink { Image(systemName: "arrow.up.forward.square") - .foregroundStyle(isHighlighted ? isPressedTitleForegroundColor : linkIconForegroundColor) + .foregroundStyle(isHighlighted ? isSelectedTitleForegroundColor : linkIconForegroundColor) } } .contentShape(RoundedRectangle(cornerRadius: backgroundCornerRadius)) @@ -108,8 +108,8 @@ extension View { modifier(SidebarMenuItemLinkIconForegroundColorViewModifier(linkIconForegroundColor: linkIconForegroundColor)) } - func sidebarMenuItemIsPressedTitleForegroundColor(_ isPressedTitleForegroundColor: Color) -> some View { - modifier(SidebarMenuItemIsPressedTitleForegroundColorViewModifier(isPressedTitleForegroundColor: isPressedTitleForegroundColor)) + func sidebarMenuItemIsSelectedTitleForegroundColor(_ isSelectedTitleForegroundColor: Color) -> some View { + modifier(SidebarMenuItemIsSelectedTitleForegroundColorViewModifier(isSelectedTitleForegroundColor: isSelectedTitleForegroundColor)) } } @@ -124,9 +124,9 @@ private extension EnvironmentValues { set { self[SidebarMenuItemLinkIconForegroundColorKey.self] = newValue } } - var sidebarMenuItemIsPressedTitleForegroundColor: Color { - get { self[SidebarMenuItemIsPressedTitleForegroundColorKey.self] } - set { self[SidebarMenuItemIsPressedTitleForegroundColorKey.self] = newValue } + var sidebarMenuItemIsSelectedTitleForegroundColor: Color { + get { self[SidebarMenuItemIsSelectedTitleForegroundColorKey.self] } + set { self[SidebarMenuItemIsSelectedTitleForegroundColorKey.self] = newValue } } } @@ -154,15 +154,15 @@ private struct SidebarMenuItemLinkIconForegroundColorKey: EnvironmentKey { static let defaultValue = Color.primary.opacity(0.6) } -struct SidebarMenuItemIsPressedTitleForegroundColorViewModifier: ViewModifier { - var isPressedTitleForegroundColor: Color +struct SidebarMenuItemIsSelectedTitleForegroundColorViewModifier: ViewModifier { + var isSelectedTitleForegroundColor: Color func body(content: Content) -> some View { content - .environment(\.sidebarMenuItemIsPressedTitleForegroundColor, isPressedTitleForegroundColor) + .environment(\.sidebarMenuItemIsSelectedTitleForegroundColor, isSelectedTitleForegroundColor) } } -private struct SidebarMenuItemIsPressedTitleForegroundColorKey: EnvironmentKey { +private struct SidebarMenuItemIsSelectedTitleForegroundColorKey: EnvironmentKey { static let defaultValue = Color.white } diff --git a/WireUI/Sources/WireSidebar/Views/SidebarView.swift b/WireUI/Sources/WireSidebar/Views/SidebarView.swift index 36beb65e26b..f82d303389f 100644 --- a/WireUI/Sources/WireSidebar/Views/SidebarView.swift +++ b/WireUI/Sources/WireSidebar/Views/SidebarView.swift @@ -21,7 +21,8 @@ import WireFoundation public struct SidebarView: View where AccountImageView: View { - @Environment(\.sidebarBackgroundColor) private var sidebarBackgroundColor + @Environment(\.sidebarMenuHeaderForegroundColor) private var menuHeaderForegroundColor + @Environment(\.sidebarBackgroundColor) private var backgroundViewColor public var accountInfo: SidebarAccountInfo? @Binding public var selectedMenuItem: SidebarSelectableMenuItem @@ -57,7 +58,7 @@ public struct SidebarView: View where AccountImageView: View { ZStack { // background color Rectangle() - .foregroundStyle(sidebarBackgroundColor) + .foregroundStyle(backgroundViewColor) .ignoresSafeArea() // content @@ -123,6 +124,7 @@ public struct SidebarView: View where AccountImageView: View { @ViewBuilder private func menuItemHeader(_ key: LocalizedStringKey, addTopPadding: Bool = true) -> some View { let text = Text(key, bundle: .module) + .foregroundStyle(menuHeaderForegroundColor) .wireTextStyle(.h2) .padding(.horizontal, 8) .padding(.vertical, 12) @@ -205,18 +207,39 @@ public struct SidebarView: View where AccountImageView: View { // MARK: - View Modifiers + Environment extension View { + func sidebarMenuHeaderForegroundColor(_ headerForegroundColor: Color) -> some View { + modifier(SidebarMenuHeaderForegroundColorViewModifier(headerForegroundColor: headerForegroundColor)) + } + func sidebarBackgroundColor(_ sidebarBackgroundColor: Color) -> some View { modifier(SidebarBackgroundColorViewModifier(sidebarBackgroundColor: sidebarBackgroundColor)) } } private extension EnvironmentValues { + var sidebarMenuHeaderForegroundColor: Color { + get { self[SidebarMenuHeaderForegroundColorKey.self] } + set { self[SidebarMenuHeaderForegroundColorKey.self] = newValue } + } + var sidebarBackgroundColor: Color { get { self[SidebarBackgroundColorKey.self] } set { self[SidebarBackgroundColorKey.self] = newValue } } } +struct SidebarMenuHeaderForegroundColorViewModifier: ViewModifier { + var headerForegroundColor: Color + func body(content: Content) -> some View { + content + .environment(\.sidebarMenuHeaderForegroundColor, headerForegroundColor) + } +} + +private struct SidebarMenuHeaderForegroundColorKey: EnvironmentKey { + static let defaultValue = Color.primary +} + struct SidebarBackgroundColorViewModifier: ViewModifier { var sidebarBackgroundColor: Color func body(content: Content) -> some View { diff --git a/WireUI/Sources/WireSidebar/Views/SidebarViewController.swift b/WireUI/Sources/WireSidebar/Views/SidebarViewController.swift index 9a676c61598..3ea763c58fe 100644 --- a/WireUI/Sources/WireSidebar/Views/SidebarViewController.swift +++ b/WireUI/Sources/WireSidebar/Views/SidebarViewController.swift @@ -69,6 +69,11 @@ public final class SidebarViewController: UIViewController { set { model.sidebarAccountInfoViewUsernameColor = newValue } } + public var sidebarMenuHeaderForegroundColor: UIColor { + get { model.sidebarMenuHeaderForegroundColor } + set { model.sidebarMenuHeaderForegroundColor = newValue } + } + public var sidebarMenuItemTitleForegroundColor: UIColor { get { model.sidebarMenuItemTitleForegroundColor } set { model.sidebarMenuItemTitleForegroundColor = newValue } @@ -79,9 +84,9 @@ public final class SidebarViewController: UIViewController { set { model.sidebarMenuItemLinkIconForegroundColor = newValue } } - public var sidebarMenuItemIsPressedTitleForegroundColor: UIColor { - get { model.sidebarMenuItemIsPressedTitleForegroundColor } - set { model.sidebarMenuItemIsPressedTitleForegroundColor = newValue } + public var sidebarMenuItemIsSelectedTitleForegroundColor: UIColor { + get { model.sidebarMenuItemIsSelectedTitleForegroundColor } + set { model.sidebarMenuItemIsSelectedTitleForegroundColor = newValue } } // MARK: - Private Properties @@ -168,9 +173,10 @@ private struct SidebarAdapter: View where AccountImageView: Vi .sidebarBackgroundColor(.init(uiColor: model.sidebarBackgroundColor)) .sidebarAccountInfoViewDisplayNameColor(.init(uiColor: model.sidebarAccountInfoViewDisplayNameColor)) .sidebarAccountInfoViewUsernameColor(.init(uiColor: model.sidebarAccountInfoViewUsernameColor)) + .sidebarMenuHeaderForegroundColor(.init(uiColor: model.sidebarMenuHeaderForegroundColor)) .sidebarMenuItemTitleForegroundColor(.init(uiColor: model.sidebarMenuItemTitleForegroundColor)) .sidebarMenuItemLinkIconForegroundColor(.init(uiColor: model.sidebarMenuItemLinkIconForegroundColor)) - .sidebarMenuItemIsPressedTitleForegroundColor(.init(uiColor: model.sidebarMenuItemIsPressedTitleForegroundColor)) + .sidebarMenuItemIsSelectedTitleForegroundColor(.init(uiColor: model.sidebarMenuItemIsSelectedTitleForegroundColor)) .environment(\.wireAccentColor, model.wireAccentColor) .environment(\.wireAccentColorMapping, model.wireAccentColorMapping) .environment(\.wireTextStyleMapping, model.wireTextStyleMapping) diff --git a/WireUI/Tests/WireMainNavigationTests/Main/MainCoordinatorTests.swift b/WireUI/Tests/WireMainNavigationTests/Main/MainCoordinatorTests.swift index a5b62df5f3a..0b7909a2301 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/MainCoordinatorTests.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/MainCoordinatorTests.swift @@ -35,14 +35,14 @@ final class MainCoordinatorTests: XCTestCase { private var sut: SUT! private var splitViewController: MockSplitViewController! - private var tabBarController: MockTabBarController! + private var tabBarController: SUT.TabBarController! private var sidebar: MockSidebarViewController! - private var conversationList: MockConversationListViewController! + private var conversationList: SUT.ConversationList! @MainActor override func setUp() async throws { sidebar = .init() - conversationList = .init() + conversationList = .init("") splitViewController = .init(style: .tripleColumn) splitViewController.sidebar = sidebar @@ -75,7 +75,7 @@ final class MainCoordinatorTests: XCTestCase { @MainActor func testShowingGroupConversations() async { // When - let conversationFilter: MockConversationListViewController.ConversationFilter = .groups + let conversationFilter: SUT.ConversationList.ConversationFilter = .groups await sut.showConversationList(conversationFilter: conversationFilter) // Then diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationBuilder.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationBuilder.swift index 9d9fc3838b8..dce9ad633f9 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationBuilder.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationBuilder.swift @@ -17,10 +17,13 @@ // import UIKit -import WireMainNavigation + +@testable import WireMainNavigation + +// swiftlint:disable opening_brace struct MockConversationBuilder: MainConversationBuilderProtocol { - typealias ConversationList = MockConversationListViewController + typealias ConversationList = PreviewConversationListViewController typealias SettingsBuilder = MockSettingsViewControllerBuilder typealias Conversation = MockConversationViewController typealias ConversationModel = Conversation.ConversationModel @@ -33,11 +36,14 @@ struct MockConversationBuilder: MainConversationBuilderProtocol { message: Conversation.ConversationMessageModel?, mainCoordinator: MainCoordinator ) -> Conversation where - MainCoordinator.ConversationList == ConversationList, - MainCoordinator.SettingsContentBuilder == SettingsBuilder, - MainCoordinator.ConversationModel == Conversation.ConversationModel, - MainCoordinator.ConversationMessageModel == Conversation.ConversationMessageModel, - MainCoordinator.User == User { + MainCoordinator.ConversationList == ConversationList, + MainCoordinator.SettingsContentBuilder == SettingsBuilder, + MainCoordinator.ConversationModel == Conversation.ConversationModel, + MainCoordinator.ConversationMessageModel == Conversation.ConversationMessageModel, + MainCoordinator.User == User + { .init() } } + +// swiftlint:enable opening_brace diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationListViewController.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationListViewController.swift index a11de6b431b..5d64b32475f 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationListViewController.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationListViewController.swift @@ -33,6 +33,8 @@ final class MockConversationListViewController: UIViewController, MainConversati } } + var selectedConversation: MockConversation? + var mainSplitViewState: MainSplitViewState = .expanded } diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationViewController.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationViewController.swift index 375595cf44a..099f6258303 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationViewController.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockConversationViewController.swift @@ -19,4 +19,6 @@ import UIKit import WireMainNavigation -final class MockConversationViewController: UIViewController, MainConversationProtocol {} +final class MockConversationViewController: UIViewController, MainConversationProtocol { + var conversationModel: ConversationModel! { nil } +} diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockSplitViewController.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockSplitViewController.swift index ed58989f22b..734f347880e 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockSplitViewController.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockSplitViewController.swift @@ -17,11 +17,12 @@ // import UIKit -import WireMainNavigation + +@testable import WireMainNavigation final class MockSplitViewController: UISplitViewController, MainSplitViewControllerProtocol { - typealias ConversationList = MockConversationListViewController + typealias ConversationList = PreviewConversationListViewController typealias Archive = UIViewController typealias Settings = UIViewController @@ -63,7 +64,5 @@ final class MockSplitViewController: UISplitViewController, MainSplitViewControl fatalError("mock method not implemented") } - func hideSidebar() { - fatalError("mock method not implemented") - } + func hideSidebar() {} } diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockTabBarController.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockTabBarController.swift index 1fb7d8428d6..423038010c9 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockTabBarController.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockTabBarController.swift @@ -17,11 +17,12 @@ // import UIKit -import WireMainNavigation + +@testable import WireMainNavigation final class MockTabBarController: UITabBarController, MainTabBarControllerProtocol { - typealias ConversationList = MockConversationListViewController + typealias ConversationList = PreviewConversationListViewController typealias Archive = UIViewController typealias Settings = UIViewController @@ -32,7 +33,7 @@ final class MockTabBarController: UITabBarController, MainTabBarControllerProtoc var selectedContent: MainTabBarControllerContent = .conversations - var conversationList: MockConversationListViewController? + var conversationList: ConversationList? var archive: Archive? var settings: Settings? diff --git a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockViewControllerBuilder.swift b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockViewControllerBuilder.swift index 6992b1482a5..844b29a51c3 100644 --- a/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockViewControllerBuilder.swift +++ b/WireUI/Tests/WireMainNavigationTests/Main/Mocks/MockViewControllerBuilder.swift @@ -17,11 +17,14 @@ // import UIKit -import WireMainNavigation + +@testable import WireMainNavigation + +// swiftlint:disable opening_brace struct MockViewControllerBuilder: MainCoordinatorInjectingViewControllerBuilder { - typealias ConversationList = MockConversationListViewController + typealias ConversationList = PreviewConversationListViewController typealias SettingsBuilder = MockSettingsViewControllerBuilder typealias Conversation = MockConversationViewController typealias ConversationModel = Conversation.ConversationModel @@ -32,12 +35,15 @@ struct MockViewControllerBuilder: MainCoordinatorInjectingViewControllerBuilder func build( mainCoordinator: MainCoordinator ) -> UIViewController where - MainCoordinator : MainCoordinatorProtocol, - MockConversationListViewController == MainCoordinator.ConversationList, - Conversation.ConversationMessageModel == MainCoordinator.ConversationMessageModel, - Conversation.ConversationModel == MainCoordinator.ConversationModel, - MockSettingsViewControllerBuilder == MainCoordinator.SettingsContentBuilder, - MockUserProfileViewControllerBuilder.User == MainCoordinator.User { + MainCoordinator: MainCoordinatorProtocol, + MainCoordinator.ConversationList == ConversationList, + MainCoordinator.ConversationMessageModel == Conversation.ConversationMessageModel, + MainCoordinator.ConversationModel == Conversation.ConversationModel, + MainCoordinator.SettingsContentBuilder == SettingsBuilder, + MainCoordinator.User == User + { .init() } } + +// swiftlint:enable opening_brace diff --git a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.dark.png b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.dark.png index 0fddc6a716a..c69a303db59 100644 --- a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.dark.png +++ b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b41fdf65fc526d8890f13a0d545e171f9053c78ea4fdfb0a52d5ea526e1b845e -size 185785 +oid sha256:43277195d63ebb76188b69de58d589ebd9b1ba4f54d0692ffe433d65d91899b4 +size 186828 diff --git a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.light.png b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.light.png index 4d78316f4ab..8de1af1f450 100644 --- a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.light.png +++ b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearanceLandscape.light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6ade3ba467d458a10823264a601e464f3a71f9cc8eb24f476dcbd4fe6ed1fa0 -size 182178 +oid sha256:385279a3324adc0d467f77c5e31c998ac51a5dfd21404167d43befec772de57a +size 187452 diff --git a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.dark.png b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.dark.png index b8870a00636..eb0fd460783 100644 --- a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.dark.png +++ b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cceb6200d36808140ed1c371e97a130307dfaac29ea3462a621346608193dd71 -size 178479 +oid sha256:b84aa25fdbdf2a700284b053b15c8e7d75254015b75bb451032493077d4dfbee +size 179266 diff --git a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.light.png b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.light.png index 9c21a304f67..965be5c8337 100644 --- a/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.light.png +++ b/WireUI/Tests/WireMainNavigationTests/Resources/ReferenceImages/MainSplitViewControllerTests/testSidebarAppearancePortrait.light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc810fb6711d1f66c18179994cd67e578d0ea4ab1a88261019b27d14c7b1c9a2 -size 180128 +oid sha256:b680a23332ddd26a9eb6aa358ba200e458b8351c22d16888a6dce9b5c00942e5 +size 180122 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png new file mode 100644 index 00000000000..6a098fd27a8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b66068adec2d3a35a0729475ef89250c85904cf78b91634373599e33ddf402d5 +size 293534 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png new file mode 100644 index 00000000000..6a098fd27a8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b66068adec2d3a35a0729475ef89250c85904cf78b91634373599e33ddf402d5 +size 293534 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png new file mode 100644 index 00000000000..6a098fd27a8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b66068adec2d3a35a0729475ef89250c85904cf78b91634373599e33ddf402d5 +size 293534 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png new file mode 100644 index 00000000000..6a098fd27a8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b66068adec2d3a35a0729475ef89250c85904cf78b91634373599e33ddf402d5 +size 293534 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png new file mode 100644 index 00000000000..6a098fd27a8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b66068adec2d3a35a0729475ef89250c85904cf78b91634373599e33ddf402d5 +size 293534 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png new file mode 100644 index 00000000000..1be371db097 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0765a4cb3d6d2dfa76521a79e7dcee8986bf4c8c19a9581e9b92de4c7d854c63 +size 287190 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png new file mode 100644 index 00000000000..45a20f4743c --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e433bcf5615d774dda94eac5f2b46df2fb83138bdd2632b35eb9e0e3b561d913 +size 278718 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraLarge.png new file mode 100644 index 00000000000..890276789a4 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraLarge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50f517fe767f7df0d25e5b2e3efc4aa8a7a93ea67b5811bcae0f239add13562f +size 269002 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraSmall.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraSmall.png new file mode 100644 index 00000000000..2920acb3e53 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.extraSmall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03454c4d75e7cc2f5d2c148f74475b7cb7cfe9defbeabdda8a47891f16b59ffc +size 242585 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.large.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.large.png new file mode 100644 index 00000000000..92974e978f8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.large.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46cf6219ecd1d305a4e69ec5782820b37fffbd7006c6d7859d675a21c8c0147e +size 255503 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.medium.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.medium.png new file mode 100644 index 00000000000..bde126f7698 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.medium.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3baf5b6c21b22ae9ccfe2791ebec4e4b3c30a6837b569a11bad842e785aea9c +size 250375 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.small.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.small.png new file mode 100644 index 00000000000..6ffbd81303a --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:084fcc64d1ac1ea5510f26e07305568ebdfcf7b966c469eb899bcd54b952a7b9 +size 245947 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.unspecified.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.unspecified.png new file mode 100644 index 00000000000..92974e978f8 --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontContentSizeCategories.unspecified.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46cf6219ecd1d305a4e69ec5782820b37fffbd7006c6d7859d675a21c8c0147e +size 255503 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png new file mode 100644 index 00000000000..a6d3f58594d --- /dev/null +++ b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewControllerSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba3df09c370d20a1d8a6837b8f77919959e777d2a5c85f4662c0113e84f6f17 +size 261589 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png deleted file mode 100644 index 49746f7de62..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraExtraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b15084347d38bce0ae270c0486e09f00768e46548fd6027f4d7428341a4708ed -size 294085 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png deleted file mode 100644 index 49746f7de62..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraExtraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b15084347d38bce0ae270c0486e09f00768e46548fd6027f4d7428341a4708ed -size 294085 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png deleted file mode 100644 index 49746f7de62..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityExtraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b15084347d38bce0ae270c0486e09f00768e46548fd6027f4d7428341a4708ed -size 294085 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png deleted file mode 100644 index 49746f7de62..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b15084347d38bce0ae270c0486e09f00768e46548fd6027f4d7428341a4708ed -size 294085 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png deleted file mode 100644 index 49746f7de62..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.accessibilityMedium.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b15084347d38bce0ae270c0486e09f00768e46548fd6027f4d7428341a4708ed -size 294085 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png deleted file mode 100644 index 27a87dfaff0..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraExtraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e6073b959cb10113ac9f42598be8f6efcb6051958201506f7356ee9ed04acb2 -size 287329 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png deleted file mode 100644 index 91b24fabd05..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraExtraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44adf8f5e766b0effa1cc1ca45e0b0115b9d4a2f3595800b4e6adc35b2affd49 -size 278926 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraLarge.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraLarge.png deleted file mode 100644 index ccb0a271252..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraLarge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53a5d4c831bbaeb3fe86d224f1adaf48722893fb117ca9998ea675e65a52f488 -size 269321 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraSmall.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraSmall.png deleted file mode 100644 index 93b2aa506db..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.extraSmall.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1b73efd3f1a8bc2c593213053a6d1503fd11e068e6d9da3e297aa9609edd6d7 -size 242716 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.large.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.large.png deleted file mode 100644 index 190c0ab33fc..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.large.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:552882eb0044988cb1225ed3ab0a20bb65d412683c5e6c49ee8a276ff0800f6e -size 255739 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.medium.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.medium.png deleted file mode 100644 index 1b4700aa5a2..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.medium.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5c3d78df794ee9aee6d23e6ec2d6a462df788647d6933fe476b27664e5bce7d -size 250527 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.small.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.small.png deleted file mode 100644 index de8fd694daf..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.small.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bfb9bb582a574ef713f7fa096a6f61effdf3bff6c55c6b612814d7d0ef7e3736 -size 246060 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.unspecified.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.unspecified.png deleted file mode 100644 index 190c0ab33fc..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontContentSizeCategories.unspecified.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:552882eb0044988cb1225ed3ab0a20bb65d412683c5e6c49ee8a276ff0800f6e -size 255739 diff --git a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png b/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png deleted file mode 100644 index c04349e77af..00000000000 --- a/WireUI/Tests/WireSidebarTests/Resources/ReferenceImages/SidebarViewSnapshotTests/testUIFontDarkUserInterfaceStyle.1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7dc560efc6aff10e47c8a54e39c92cbc418b30f72446e9d8e497f8ef22960433 -size 261300 diff --git a/WireUI/Tests/WireSidebarTests/Views/SidebarViewSnapshotTests.swift b/WireUI/Tests/WireSidebarTests/Views/SidebarViewControllerSnapshotTests.swift similarity index 96% rename from WireUI/Tests/WireSidebarTests/Views/SidebarViewSnapshotTests.swift rename to WireUI/Tests/WireSidebarTests/Views/SidebarViewControllerSnapshotTests.swift index 974eac48198..0fca462a079 100644 --- a/WireUI/Tests/WireSidebarTests/Views/SidebarViewSnapshotTests.swift +++ b/WireUI/Tests/WireSidebarTests/Views/SidebarViewControllerSnapshotTests.swift @@ -22,7 +22,7 @@ import XCTest @testable import WireSidebar -final class SidebarViewSnapshotTests: XCTestCase { +final class SidebarViewControllerSnapshotTests: XCTestCase { private var snapshotHelper: SnapshotHelper! diff --git a/wire-ios/Wire-iOS Tests/ConversationList/Container/ConversationListViewControllerTests.swift b/wire-ios/Wire-iOS Tests/ConversationList/Container/ConversationListViewControllerTests.swift index 22dd0c840de..da5775dcf90 100644 --- a/wire-ios/Wire-iOS Tests/ConversationList/Container/ConversationListViewControllerTests.swift +++ b/wire-ios/Wire-iOS Tests/ConversationList/Container/ConversationListViewControllerTests.swift @@ -250,7 +250,7 @@ private struct MockMainCoordinatorInjectingViewControllerBuilder: MainCoordinato func build( mainCoordinator: MainCoordinator ) -> UIViewController where - MainCoordinator : MainCoordinatorProtocol, + MainCoordinator: MainCoordinatorProtocol, MainCoordinator.ConversationList == ConversationList, ConversationMessageModel == MainCoordinator.ConversationMessageModel, ZMConversation == MainCoordinator.ConversationModel, diff --git a/wire-ios/Wire-iOS Tests/ConversationList/Container/MockConversationListContainer.swift b/wire-ios/Wire-iOS Tests/ConversationList/Container/MockConversationListContainer.swift index 9a8214e3340..dcf837267ab 100644 --- a/wire-ios/Wire-iOS Tests/ConversationList/Container/MockConversationListContainer.swift +++ b/wire-ios/Wire-iOS Tests/ConversationList/Container/MockConversationListContainer.swift @@ -95,7 +95,7 @@ final class MockConversationListContainer: UIViewController, ConversationListCon func conversationListViewControllerViewModel( _ viewModel: ConversationListViewController.ViewModel, - didUpdate accountImage: (image: UIImage, isTeamAccount: Bool) + didUpdate accountImage: UIImage ) { // no-op } diff --git a/wire-ios/Wire-iOS/Sources/ForegroundNotificationFilter.swift b/wire-ios/Wire-iOS/Sources/ForegroundNotificationFilter.swift index fa7bb2d9646..e6bdfb3e3cd 100644 --- a/wire-ios/Wire-iOS/Sources/ForegroundNotificationFilter.swift +++ b/wire-ios/Wire-iOS/Sources/ForegroundNotificationFilter.swift @@ -32,6 +32,7 @@ final class ForegroundNotificationFilter { // TO DO: Ask for the logic, not clear when a notification shuld be presented extension ForegroundNotificationFilter: ForegroundNotificationResponder { + @MainActor func shouldPresentNotification(with userInfo: NotificationUserInfo) -> Bool { // user wants to see fg notifications let chatHeadsDisabled: Bool = Settings.shared[.chatHeadsDisabled] ?? false @@ -60,9 +61,13 @@ extension ForegroundNotificationFilter: ForegroundNotificationResponder { } // conversation view is visible for another conversation + let svc = clientVC.mainSplitViewController + let conversationVC = svc.conversation ?? svc.tabContainer.conversation + let conversationListVC = svc.conversationList ?? svc.tabContainer.conversationList + let visibleConversation = conversationVC?.conversationModel ?? conversationListVC?.selectedConversation guard let convID = userInfo.conversationID, - convID != clientVC.currentConversation?.remoteIdentifier // TODO: offer a way to know which conversation is shown <- + convID != visibleConversation?.remoteIdentifier else { return false } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/Conversation/Create/CreateGroupConversationViewControllerBuilder.swift b/wire-ios/Wire-iOS/Sources/UserInterface/Conversation/Create/CreateGroupConversationViewControllerBuilder.swift index 9a42354da95..3ebdab9bd57 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/Conversation/Create/CreateGroupConversationViewControllerBuilder.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/Conversation/Create/CreateGroupConversationViewControllerBuilder.swift @@ -42,8 +42,7 @@ final class CreateGroupConversationViewControllerBuilder: MainCoordinatorInjecti MainCoordinator.ConversationModel == ZMConversation, MainCoordinator.ConversationMessageModel == ZMConversationMessage, MainCoordinator.SettingsContentBuilder == SettingsViewControllerBuilder, - MainCoordinator.User == any UserType - { + MainCoordinator.User == any UserType { let rootViewController = ConversationCreationController( preSelectedParticipants: nil, userSession: userSession diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ArchivedList/ArchivedListViewController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ArchivedList/ArchivedListViewController.swift index 9b0b2e93240..2c1da949dfd 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ArchivedList/ArchivedListViewController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ArchivedList/ArchivedListViewController.swift @@ -53,7 +53,6 @@ final class ArchivedListViewController: UIViewController { view.accessibilityViewIsModal = true view.backgroundColor = SemanticColors.View.backgroundConversationList - // TODO: see docs: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621851-navigationitem <- // "Avoid tying the creation of bar button items in your navigation item to the creation of your view controller's view. The navigation item of a view controller may be retrieved independently of the view controller's view. ..." setupNavigationItem() setupCollectionView() diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController+NavigationBar/ConversationListViewController+NavigationBar.swift b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController+NavigationBar/ConversationListViewController+NavigationBar.swift index 5b4ac805fa7..cd893e697d2 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController+NavigationBar/ConversationListViewController+NavigationBar.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController+NavigationBar/ConversationListViewController+NavigationBar.swift @@ -25,7 +25,7 @@ import WireMainNavigation import WireReusableUIComponents import WireSyncEngine -extension ConversationListViewController { +extension ConversationListViewController: ConversationListContainerViewModelDelegate { func conversationListViewControllerViewModel( _ viewModel: ViewModel, @@ -36,15 +36,13 @@ extension ConversationListViewController { func conversationListViewControllerViewModel( _ viewModel: ViewModel, - didUpdate accountImage: (image: UIImage, isTeamAccount: Bool) + didUpdate accountImage: UIImage ) { - accountImageView?.accountImage = accountImage.image + accountImageView?.accountImage = accountImage - if accountImage.isTeamAccount, let teamName = viewModel.account.teamName ?? viewModel.userSession.selfUser.teamName { - accountImageView?.accessibilityValue = L10n.Localizable.ConversationList.Header.SelfTeam.accessibilityValue(teamName) - accountImageView?.accessibilityIdentifier = "\(teamName) team" - } else if let userName = viewModel.userSession.selfUser.name { + // TODO: [WPB-11449] fix accessibilityIdentifier if needed + if let userName = viewModel.userSession.selfUser.name { accountImageView?.accessibilityValue = L10n.Localizable.ConversationList.Header.SelfTeam.accessibilityValue(userName) accountImageView?.accessibilityIdentifier = .none } else { @@ -62,11 +60,9 @@ extension ConversationListViewController { private func setupAccountImageView() -> AccountImageView { let accountImageView = AccountImageView() - accountImageView.accountImage = viewModel.accountImage.image + accountImageView.accountImage = viewModel.accountImage accountImageView.availability = viewModel.selfUserStatus.availability.mapToAccountImageAvailability() accountImageView.accessibilityTraits = .button - // TODO: [WPB-11449] fix accessibility - // accountImageView.accessibilityIdentifier = accountImageView.accessibilityHint = L10n.Accessibility.ConversationsList.AccountButton.hint accountImageView.translatesAutoresizingMaskIntoConstraints = false accountImageView.widthAnchor.constraint(equalToConstant: 28).isActive = true @@ -231,7 +227,6 @@ extension ConversationListViewController { func setupRightNavigationBarButtons_SplitView() { - // TODO: start conversation let newConversationBarButton = IconButton() newConversationBarButton.setIcon(.plus, size: .tiny, for: .normal) // TODO: [WPB-11449] fix accessibility diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController.swift index f9e55f3be68..2325766a123 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ConversationListViewController.swift @@ -479,10 +479,6 @@ final class ConversationListViewController: UIViewController { } } -// MARK: - ViewModel Delegate - -extension ConversationListViewController: ConversationListContainerViewModelDelegate {} - // MARK: - ConversationListViewController + ArchivedListViewControllerDelegate extension ConversationListViewController: ArchivedListViewControllerDelegate { diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ViewModel/ConversationListViewControllerViewModel.swift b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ViewModel/ConversationListViewControllerViewModel.swift index f6a5a9af476..d805476f0ab 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ViewModel/ConversationListViewControllerViewModel.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/Container/ViewModel/ConversationListViewControllerViewModel.swift @@ -33,7 +33,7 @@ protocol ConversationListContainerViewModelDelegate: AnyObject { func conversationListViewControllerViewModel( _ viewModel: ConversationListViewController.ViewModel, - didUpdate accountImage: (image: UIImage, isTeamAccount: Bool) + didUpdate accountImage: UIImage ) func conversationListViewControllerViewModel( @@ -76,8 +76,7 @@ extension ConversationListViewController { didSet { viewController?.conversationListViewControllerViewModel(self, didUpdate: selfUserStatus) } } - // TODO: create two properties <- - private(set) var accountImage = (image: UIImage(), isTeamAccount: false) { + private(set) var accountImage = UIImage() { didSet { viewController?.conversationListViewControllerViewModel(self, didUpdate: accountImage) } } @@ -181,11 +180,10 @@ extension ConversationListViewController.ViewModel { private func updateAccountImage() { Task { do { - accountImage.image = try await getUserAccountImageUseCase.invoke(account: account) - accountImage.isTeamAccount = userSession.selfUser.membership?.team != nil + accountImage = try await getUserAccountImageUseCase.invoke(account: account) } catch { WireLogger.ui.error("Failed to get user account image: \(String(reflecting: error))") - accountImage.image = .init() + accountImage = .init() } } } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ListContent/ConversationListContentController/ConversationListContentController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ListContent/ConversationListContentController/ConversationListContentController.swift index 5526332edb0..ab5d979c683 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ListContent/ConversationListContentController/ConversationListContentController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/ConversationList/ListContent/ConversationListContentController/ConversationListContentController.swift @@ -388,7 +388,8 @@ extension ConversationListContentController: ConversationListViewModelDelegate { self.collectionView.deselectItem(at: obj, animated: false) } }) - zClientViewController?.loadPlaceholderConversationController(animated: true) + // TODO: [WPB-11449] still needed? (iPhone and iPad) + // zClientViewController?.loadPlaceholderConversationController(animated: true) zClientViewController?.transitionToList(animated: true, completion: nil) return diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/AnyMainCoordinator.swift b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/AnyMainCoordinator.swift index 01e3f4f7904..d301885000d 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/AnyMainCoordinator.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/AnyMainCoordinator.swift @@ -16,8 +16,8 @@ // along with this program. If not, see http://www.gnu.org/licenses/. // -import WireMainNavigation import WireDataModel +import WireMainNavigation import WireSettings final class AnyMainCoordinator: MainCoordinatorProtocol where @@ -115,4 +115,9 @@ ConversationList: MainConversationListProtocol, SettingsContentBuilder: MainSett func presentViewController(_ viewController: UIViewController) async { await mainCoordinator.presentViewController(viewController) } + + @MainActor + func dismissPresentedViewController() async { + await mainCoordinator.dismissPresentedViewController() + } } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationListViewController+MainConversationListProtocol.swift b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationListViewController+MainConversationListProtocol.swift index d224ee2f60f..4ee53481464 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationListViewController+MainConversationListProtocol.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationListViewController+MainConversationListProtocol.swift @@ -29,6 +29,10 @@ extension ConversationListViewController: MainConversationListProtocol { setupTitleView() } } + + var selectedConversation: ZMConversation? { + listContentController.listViewModel.selectedItem as? ZMConversation + } } // MARK: - ConversationFilter + MainConversationFilterRepresentable diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationRootViewController+MainConversationProtocol.swift b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationRootViewController+MainConversationProtocol.swift index 707ccb538bb..f89a41f2c01 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationRootViewController+MainConversationProtocol.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ConversationRootViewController+MainConversationProtocol.swift @@ -23,4 +23,8 @@ import WireMainNavigation extension ConversationRootViewController: MainConversationProtocol { typealias ConversationModel = ZMConversation typealias ConversationMessageModel = ZMConversationMessage + + var conversationModel: ZMConversation! { + conversationViewController!.conversation + } } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/SidebarViewControllerBuilder.swift b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/SidebarViewControllerBuilder.swift index 92c0b0b17c5..7bd89dbbe42 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/SidebarViewControllerBuilder.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/SidebarViewControllerBuilder.swift @@ -49,7 +49,7 @@ struct SidebarViewControllerBuilder { sidebarViewController.sidebarAccountInfoViewUsernameColor = sidebarDesign.accountInfoViewUsernameColor sidebarViewController.sidebarMenuItemTitleForegroundColor = sidebarDesign.menuItemTitleForegroundColor sidebarViewController.sidebarMenuItemLinkIconForegroundColor = sidebarDesign.menuItemLinkIconForegroundColor - sidebarViewController.sidebarMenuItemIsPressedTitleForegroundColor = sidebarDesign.menuItemIsPressedTitleForegroundColor + sidebarViewController.sidebarMenuItemIsSelectedTitleForegroundColor = sidebarDesign.menuItemIsSelectedTitleForegroundColor return sidebarViewController } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ZClientViewController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ZClientViewController.swift index 9e081759fd3..2ef092c5096 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ZClientViewController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/MainController/ZClientViewController.swift @@ -27,8 +27,8 @@ import WireMainNavigation import WireSidebar import WireSyncEngine -// TODO: create bug ticket: after logging in and getting certificate, the account image is blank instead of showing initials <- -// TODO: after getting E2EI certificate the conversation list is shown in collapsed layout mode even on iPad (expanded) <- +// TODO: [WPB-11449] after logging in and getting certificate, the account image is blank instead of showing initials +// TODO: [WPB-11449] after getting E2EI certificate the conversation list is shown in collapsed layout mode even on iPad (expanded) final class ZClientViewController: UIViewController { @@ -59,9 +59,10 @@ final class ZClientViewController: UIViewController { } private(set) var conversationRootViewController: UIViewController? - // TODO [WPB-8778]: Check if this property is still needed - @available(*, deprecated, message: "might be deleted") - private(set) var currentConversation: ZMConversation? + + var currentConversation: ZMConversation? { + conversationListViewController.selectedConversation + } weak var router: AuthenticatedRouterProtocol? @@ -191,10 +192,6 @@ final class ZClientViewController: UIViewController { AVSMediaManager.sharedInstance().unregisterMedia(mediaPlaybackManager) } - private func restoreStartupState() { - attemptToPresentInitialConversation() - } - @discardableResult private func attemptToPresentInitialConversation() -> Bool { var stateRestored = false @@ -226,8 +223,8 @@ final class ZClientViewController: UIViewController { setupSplitViewController() - // TODO: enable <- - // restoreStartupState() + // TODO: [WPB-11449] fix if needed + // attemptToPresentInitialConversation() if Bundle.developerModeEnabled { // better way of dealing with this? @@ -246,8 +243,8 @@ final class ZClientViewController: UIViewController { private func setupSplitViewController() { let archive = ArchivedListViewController(userSession: userSession) - // TODO: the border color doesn't match on iPad 15 <- - mainSplitViewController.borderColor = ColorTheme.Strokes.outline // TODO: is there a better approach than setting the value here? <- + // TODO: [WPB-11449] the border color doesn't match on iPad 15 + mainSplitViewController.borderColor = ColorTheme.Strokes.outline mainSplitViewController.conversationList = conversationListViewController mainTabBarController.archive = archive @@ -361,30 +358,13 @@ final class ZClientViewController: UIViewController { mainSplitViewController.show(.primary) } - private func pushContentViewController( - _ viewController: UIViewController? = nil, - focusOnView focus: Bool = false, - animated: Bool = false, - completion: Completion? = nil - ) { - // TODO: `focus` argument is not used <- - conversationRootViewController = viewController - let secondaryNavigationController = mainSplitViewController.viewController(for: .secondary) as! UINavigationController - secondaryNavigationController.setViewControllers([conversationRootViewController!], animated: false) - } - - func loadPlaceholderConversationController(animated: Bool) { - // TODO: can this method be removed? <- - currentConversation = nil - pushContentViewController(focusOnView: false, animated: animated) - } - func loadIncomingContactRequestsAndFocus(onView focus: Bool, animated: Bool) { - // TODO: can this method be removed? <- - currentConversation = nil - - let inbox = ConnectRequestsViewController(userSession: userSession) - pushContentViewController(inbox.wrapInNavigationController(), focusOnView: focus, animated: animated) + // TODO: [WPB-11449] check if this flow works + let connectRequests = ConnectRequestsViewController(userSession: userSession) + let navigationController = UINavigationController(rootViewController: connectRequests) + Task { + await mainCoordinator.presentViewController(navigationController) + } } /// Open the user clients detail screen @@ -446,19 +426,11 @@ final class ZClientViewController: UIViewController { // MARK: - ColorSchemeControllerDidApplyChangesNotification private func reloadCurrentConversation() { - // TODO: what is this method needed for? <- guard let currentConversation else { return } - let currentConversationViewController = ConversationRootViewController( - conversation: currentConversation, - message: nil, - userSession: userSession, - mainCoordinator: .init(mainCoordinator: mainCoordinator), - mediaPlaybackManager: mediaPlaybackManager - ) - - // Need to reload conversation to apply color scheme changes - pushContentViewController(currentConversationViewController) + Task { + await mainCoordinator.showConversation(conversation: currentConversation, message: nil) + } } // MARK: - Debug logging notifications @@ -488,6 +460,7 @@ final class ZClientViewController: UIViewController { /// - Returns: In the first case, YES is returned, otherwise NO. @discardableResult private func attemptToLoadLastViewedConversation(withFocus focus: Bool, animated: Bool) -> Bool { + // TODO: [WPB-11449] check if needed if let currentAccount = SessionManager.shared?.accountManager.selectedAccount { if let conversation = Settings.shared.lastViewedConversation(for: currentAccount) { @@ -503,27 +476,11 @@ final class ZClientViewController: UIViewController { return true } else { - selectListItemWhenNoPreviousItemSelected() + // selectListItemWhenNoPreviousItemSelected() return false } } - /** - * This handles the case where we have to select a list item on startup but there is no previous item saved - */ - func selectListItemWhenNoPreviousItemSelected() { - // check for conversations and pick the first one.. this can be tricky if there are pending updates and - // we haven't synced yet, but for now we just pick the current first item - let list = userSession.conversationList().items - - if let conversation = list.first { - // select the first conversation and don't focus on it - select(conversation: conversation) - } else { - loadPlaceholderConversationController(animated: true) - } - } - @objc func contentSizeCategoryDidChange(_ notification: Notification?) { reloadCurrentConversation() @@ -539,26 +496,14 @@ final class ZClientViewController: UIViewController { // MARK: - Setup methods - func transitionToList(animated: Bool, completion: Completion?) { - transitionToList(animated: animated, - leftViewControllerRevealed: true, - completion: completion) - } - func transitionToList(animated: Bool, leftViewControllerRevealed: Bool = true, - completion: Completion?) { // TODO: still used? - let action: Completion = { [weak self] in - self?.mainSplitViewController.show(leftViewControllerRevealed ? .primary : .secondary) + completion: Completion?) { + Task { + let currentFilter = conversationListViewController.conversationFilter + await mainCoordinator.showConversationList(conversationFilter: currentFilter) completion?() } - - if let presentedViewController = mainSplitViewController.viewController(for: .secondary)?.presentedViewController { - presentedViewController.dismiss(animated: animated, completion: action) - } else { - action() - } - } func setTopOverlay(to viewController: UIViewController?, animated: Bool = true) { @@ -667,7 +612,7 @@ final class ZClientViewController: UIViewController { /// /// - Parameter user: the UserType with client list to show - func openClientListScreen(for user: UserType) { // TODO: use main coordinator + func openClientListScreen(for user: UserType) { // TODO: use mainCoordinator and check if still needed var viewController: UIViewController? if user.isSelfUser, let clients = user.allClients as? [UserClient] { @@ -703,7 +648,7 @@ final class ZClientViewController: UIViewController { } } - func showConversationList() { // TODO: use main coordinator + func showConversationList() { transitionToList(animated: true, completion: nil) } @@ -721,7 +666,8 @@ final class ZClientViewController: UIViewController { scrollTo message: ZMConversationMessage? = nil, focusOnView focus: Bool, animated: Bool - ) { // TODO: use main coordinator + ) { + // TODO: manually test this dismissAllModalControllers { [weak self] in guard let self, @@ -729,7 +675,10 @@ final class ZClientViewController: UIViewController { conversation.managedObjectContext != nil else { return } - conversationListViewController.viewModel.select(conversation: conversation, scrollTo: message, focusOnView: focus, animated: animated) + Task { + await self.mainCoordinator.dismissPresentedViewController() + self.conversationListViewController.viewModel.select(conversation: conversation, scrollTo: message, focusOnView: focus, animated: animated) + } } } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/DatabaseStatisticsController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/DatabaseStatisticsController.swift index 576bd09c469..668c88bbdc8 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/DatabaseStatisticsController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/DatabaseStatisticsController.swift @@ -20,7 +20,6 @@ import UIKit import WireDesign import WireSyncEngine - final class DatabaseStatisticsController: UIViewController { let stackView = UIStackView() diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/SettingsViewControllerBuilder.swift b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/SettingsViewControllerBuilder.swift index 46a77688439..97c51e4af35 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/SettingsViewControllerBuilder.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/SettingsViewControllerBuilder.swift @@ -79,7 +79,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC isTeamMember: userSession.selfUser.isTeamMember, userSession: userSession, useTypeIntrinsicSizeTableView: false - ) as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + ) as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) @@ -93,7 +93,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC private func buildOptions(_ mainCoordinator: some MainCoordinatorProtocol) -> UIViewController { let settingsCoordinator = SettingsCoordinator(mainCoordinator: mainCoordinator) let factory = settingsCellDescriptorFactory(settingsCoordinator: .init(settingsCoordinator: settingsCoordinator)) - let group = factory.optionsGroup as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + let group = factory.optionsGroup as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) @@ -103,7 +103,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC private func buildAdvanced(_ mainCoordinator: some MainCoordinatorProtocol) -> UIViewController { let settingsCoordinator = SettingsCoordinator(mainCoordinator: mainCoordinator) let factory = settingsCellDescriptorFactory(settingsCoordinator: .init(settingsCoordinator: settingsCoordinator)) - let group = factory.advancedGroup(userSession: userSession) as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + let group = factory.advancedGroup(userSession: userSession) as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) @@ -113,7 +113,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC private func buildSupport(_ mainCoordinator: some MainCoordinatorProtocol) -> UIViewController { let settingsCoordinator = SettingsCoordinator(mainCoordinator: mainCoordinator) let factory = settingsCellDescriptorFactory(settingsCoordinator: .init(settingsCoordinator: settingsCoordinator)) - let group = factory.helpSection() as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + let group = factory.helpSection() as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) @@ -123,7 +123,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC private func buildAbout(_ mainCoordinator: some MainCoordinatorProtocol) -> UIViewController { let settingsCoordinator = SettingsCoordinator(mainCoordinator: mainCoordinator) let factory = settingsCellDescriptorFactory(settingsCoordinator: .init(settingsCoordinator: settingsCoordinator)) - let group = factory.aboutSection() as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + let group = factory.aboutSection() as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) @@ -133,7 +133,7 @@ struct SettingsViewControllerBuilder: MainSettingsBuilderProtocol, MainSettingsC private func buildDeveloperOptions(_ mainCoordinator: some MainCoordinatorProtocol) -> UIViewController { let settingsCoordinator = SettingsCoordinator(mainCoordinator: mainCoordinator) let factory = settingsCellDescriptorFactory(settingsCoordinator: .init(settingsCoordinator: settingsCoordinator)) - let group = factory.developerGroup as! SettingsGroupCellDescriptor // TODO: try to remove force-unwrap <- + let group = factory.developerGroup as! SettingsGroupCellDescriptor return SettingsTableViewController( group: group, settingsCoordinator: .init(settingsCoordinator: settingsCoordinator) diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+NavigationController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+NavigationController.swift index b057c5f0356..cf99d7d9e05 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+NavigationController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+NavigationController.swift @@ -38,7 +38,9 @@ extension StartUIViewController { button.titleLabel?.font = UIFont.font(for: .h3) let action = UIAction { [weak self] _ in - self?.createGroup() // TODO: use main coordinator + Task { + await self?.mainCoordinator.showCreateGroupConversation() + } } button.addAction(action, for: .touchUpInside) @@ -55,9 +57,4 @@ extension StartUIViewController { _ = searchController.searchBar.resignFirstResponder() navigationController?.dismiss(animated: true) } - - @objc - private func createGroup() { - openCreateGroupController() - } } diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+SearchResults.swift b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+SearchResults.swift index 31a50378305..20c8bb02284 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+SearchResults.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController+SearchResults.swift @@ -97,26 +97,6 @@ extension StartUIViewController: SearchResultsViewControllerDelegate { navigationController?.pushViewController(detail, animated: true) } - - func openCreateGroupController() { - let controller = ConversationCreationController(preSelectedParticipants: nil, userSession: userSession) - controller.delegate = self - - self.navigationController?.pushViewController(controller, animated: true) - } -} - -extension StartUIViewController: ConversationCreationControllerDelegate { - - func conversationCreationController( - _ controller: ConversationCreationController, - didCreateConversation conversation: ZMConversation - ) { - delegate?.startUIViewController( - self, - didSelect: conversation - ) - } } extension StartUIViewController: EmptySearchResultsViewDelegate { diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController.swift b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController.swift index 5ff181f6cfc..baeee8bf874 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewController.swift @@ -43,6 +43,8 @@ final class StartUIViewController: UIViewController { let userSession: UserSession + let mainCoordinator: AnyMainCoordinator + let isFederationEnabled: Bool let quickActionsBar = StartUIInviteActionBar() @@ -93,6 +95,7 @@ final class StartUIViewController: UIViewController { isFederationEnabled: isFederationEnabled ) self.userSession = userSession + self.mainCoordinator = mainCoordinator profilePresenter = .init(mainCoordinator: mainCoordinator) super.init(nibName: nil, bundle: nil) diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewControllerBuilder.swift b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewControllerBuilder.swift index 3cef921a798..11e532cc444 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewControllerBuilder.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/StartUI/StartUI/StartUIViewControllerBuilder.swift @@ -42,8 +42,7 @@ final class StartUIViewControllerBuilder: MainCoordinatorInjectingViewController MainCoordinator.ConversationModel == ZMConversation, MainCoordinator.ConversationMessageModel == ZMConversationMessage, MainCoordinator.SettingsContentBuilder == SettingsViewControllerBuilder, - MainCoordinator.User == any UserType - { + MainCoordinator.User == any UserType { let rootViewController = StartUIViewController( userSession: userSession, mainCoordinator: .init(mainCoordinator: mainCoordinator) diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/UserProfile/ProfileViewControllerViewModel.swift b/wire-ios/Wire-iOS/Sources/UserInterface/UserProfile/ProfileViewControllerViewModel.swift index 44df0735bfb..caf8c393a60 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/UserProfile/ProfileViewControllerViewModel.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/UserProfile/ProfileViewControllerViewModel.swift @@ -173,7 +173,6 @@ final class ProfileViewControllerViewModel: NSObject, ProfileViewControllerViewM // MARK: - Opening Conversation - // TODO: check if we end up on the conversation screen <- func openOneToOneConversation() { if let conversation = user.oneToOneConversation { transition(to: conversation) @@ -182,7 +181,6 @@ final class ProfileViewControllerViewModel: NSObject, ProfileViewControllerViewM } } - // TODO: check if we end up on the conversation screen <- func startOneToOneConversation() { viewModelDelegate?.startAnimatingActivity() @@ -200,8 +198,6 @@ final class ProfileViewControllerViewModel: NSObject, ProfileViewControllerViewM } } - // TODO: there are unhandled MLS errors sometimes when new conversations are about to start (like with David who hasn't logged in yet) <- - // MARK: - Actions List func updateActionsList() {