diff --git a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift index 5d5bfcdc1..1b8a05c22 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift @@ -6,7 +6,7 @@ // Please see LICENSE files in the repository root for full details. // -import Foundation +import SwiftUI enum CreateRoomScreenErrorType: Error { case failedCreatingRoom @@ -31,7 +31,19 @@ struct CreateRoomScreenViewState: BindableState { let isKnockingFeatureEnabled: Bool var aliasLocalPart: String var bindings: CreateRoomScreenViewStateBindings - var avatarMediaInfo: MediaInfo? + var avatarMediaInfo: MediaInfo? { + didSet { + switch avatarMediaInfo { + case .image(_, let thumbnailURL, _): + avatarImage = UIImage(contentsOfFile: thumbnailURL.path(percentEncoded: false)) + default: + avatarImage = nil + } + } + } + + var avatarImage: UIImage? + var canCreateRoom: Bool { !roomName.isEmpty && aliasErrors.isEmpty } diff --git a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift index 40aa82194..ecd9567f7 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift @@ -103,21 +103,17 @@ struct CreateRoomScreen: View { focus = nil context.showAttachmentConfirmationDialog = true } label: { - if let url = context.viewState.avatarMediaInfo?.thumbnailURL { - AsyncImage(url: url) { image in - image - .resizable() - .aspectRatio(contentMode: .fill) - } placeholder: { - ProgressView() - } - .scaledFrame(size: 70, relativeTo: .title) - .clipShape(context.viewState.isSpace ? AnyShape(RoundedRectangle(cornerRadius: 16)) : AnyShape(Circle())) - .overlay(alignment: .bottomTrailing) { - editAvatarBadge - .scaledOffset(x: 12, y: 4, relativeTo: .title) - .accessibilityHidden(true) - } + if let avatarImage = context.viewState.avatarImage { + Image(uiImage: avatarImage) + .resizable() + .aspectRatio(contentMode: .fill) + .scaledFrame(size: 70, relativeTo: .title) + .clipShape(context.viewState.isSpace ? AnyShape(RoundedRectangle(cornerRadius: 16)) : AnyShape(Circle())) + .overlay(alignment: .bottomTrailing) { + editAvatarBadge + .scaledOffset(x: 12, y: 4, relativeTo: .title) + .accessibilityHidden(true) + } } else { CompoundIcon(\.takePhoto, size: .medium, relativeTo: .title) .foregroundColor(.compound.iconPrimary) @@ -143,7 +139,7 @@ struct CreateRoomScreen: View { } .accessibilityIdentifier(A11yIdentifiers.createRoomScreen.mediaPicker) - if context.viewState.avatarMediaInfo?.thumbnailURL != nil { + if context.viewState.avatarImage != nil { Button(L10n.actionRemove, role: .destructive) { context.send(viewAction: .removeImage) } @@ -407,7 +403,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { CreateRoomScreen(context: avatarViewModel.context) } .previewDisplayName("Create Room with avatar") - .snapshotPreferences(expect: avatarViewModel.context.$viewState.map { $0.avatarMediaInfo != nil }) + .snapshotPreferences(expect: avatarViewModel.context.$viewState.map { $0.avatarImage != nil }) NavigationStack { CreateRoomScreen(context: spaceViewModel.context) @@ -418,7 +414,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { CreateRoomScreen(context: spaceWithAvatarViewModel.context) } .previewDisplayName("Create Space with avatar") - .snapshotPreferences(expect: spaceWithAvatarViewModel.context.$viewState.map { $0.avatarMediaInfo != nil }) + .snapshotPreferences(expect: spaceWithAvatarViewModel.context.$viewState.map { $0.avatarImage != nil }) NavigationStack { CreateRoomScreen(context: publicRoomViewModel.context) diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-en-GB.png index f983346d6..3f93ff6f2 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9540a4055953e7e3462ccff5605af75f435f5ce7743f09f745d560c3daba7afd -size 122057 +oid sha256:dcbee0919af7296c78578076842b77cea64add28137e6d6bf27e1837563c9eab +size 156762 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-pseudo.png index 3cb6d8dbb..91c209de0 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPad-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d573231fbd9098847e02e294a362116e6b71a5959b37cfcd46043dfc18e5d2de -size 139671 +oid sha256:dd2792d7127bb9e498a814189fb5c5dfa2b270dd333cea7623ea2b9905ee981f +size 174527 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-en-GB.png index b08c89c7a..aff28d66a 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eebf3dac12738f6f864f382ac9b136e29c19ae9c9874d900891a1c55c6d006da -size 72559 +oid sha256:d9d45b7c4d6aebb9c72558ed440ee099c756eb6b0196a5657d7da85557853d39 +size 105940 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-pseudo.png index 81181609c..f493a95dd 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Room-with-avatar-iPhone-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68000903e55e1ba5a98b082b33b65d03c111c5751947bf6297f1a4fd46d0189f -size 89331 +oid sha256:3be54af6b52da9441294266c11a08bcaf85abfd2005e6ecc795e6e2d1b9b6cf6 +size 122952 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-en-GB.png index b77e663d8..263991b59 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:619174a05f46847dfcab7d8edb7687ac87a6691ba2e7cbbb7965fd7d607269ff -size 122895 +oid sha256:569ae5d062fed37b3c8854f7b3b7cf9c249b2ce0f908fe4e28e82a3838695228 +size 159323 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-pseudo.png index f6fa75c57..963daa2c0 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPad-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:957faa7854136c335661ece9b9b57fa40ecee742cbaf2f01b8e96035f267a859 -size 140534 +oid sha256:330df16d27772ba0405c2736a066fff8fbf3c9a8488a7f9c3a463ed98b64603a +size 176756 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-en-GB.png index 0c7fad200..5ef37be7f 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7b4bd8e3da8f046b783b20fd2ac3f13fb6dd9fab1db692e5fa57f6a46f25f14 -size 73322 +oid sha256:56398aae31bffa08edc7f04fb2ef6df80f8047e9d885fb802ad7d5759b56aef1 +size 108161 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-pseudo.png index d7523be23..0dbe47e4a 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/createRoom.Create-Space-with-avatar-iPhone-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a87553939add3b0a99da570833fed8c0607afa8a10b0543c16d08154ddba34ff -size 90212 +oid sha256:06073d17aae5d0c0c6ab75491bcd9a18e51827ec10ded21431934a7361c12506 +size 125293