mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Use the same UI as Android when tapping a link to a private room. (#3044)
* Use the same UI as Android when tapping a link to a private room. * Fix preview of knocking. * Fix snapshots.
This commit is contained in:
@@ -43,6 +43,14 @@ struct JoinRoomScreenViewState: BindableState {
|
|||||||
roomDetails?.name ?? L10n.screenJoinRoomTitleNoPreview
|
roomDetails?.name ?? L10n.screenJoinRoomTitleNoPreview
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var subtitle: String? {
|
||||||
|
switch mode {
|
||||||
|
case .loading: nil
|
||||||
|
case .unknown: L10n.screenJoinRoomSubtitleNoPreview
|
||||||
|
case .invited, .join, .knock: roomDetails?.canonicalAlias
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var avatar: RoomAvatar {
|
var avatar: RoomAvatar {
|
||||||
.room(id: roomID, name: title, avatarURL: roomDetails?.avatarURL)
|
.room(id: roomID, name: title, avatarURL: roomDetails?.avatarURL)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ typealias JoinRoomScreenViewModelType = StateStoreViewModel<JoinRoomScreenViewSt
|
|||||||
class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewModelProtocol {
|
class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewModelProtocol {
|
||||||
private let roomID: String
|
private let roomID: String
|
||||||
private let via: [String]
|
private let via: [String]
|
||||||
|
private let allowKnocking: Bool // For preview tests only, actions aren't sent.
|
||||||
private let clientProxy: ClientProxyProtocol
|
private let clientProxy: ClientProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|
||||||
@@ -32,11 +33,13 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
|
|
||||||
init(roomID: String,
|
init(roomID: String,
|
||||||
via: [String],
|
via: [String],
|
||||||
|
allowKnocking: Bool = false,
|
||||||
clientProxy: ClientProxyProtocol,
|
clientProxy: ClientProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol) {
|
userIndicatorController: UserIndicatorControllerProtocol) {
|
||||||
self.roomID = roomID
|
self.roomID = roomID
|
||||||
self.via = via
|
self.via = via
|
||||||
|
self.allowKnocking = allowKnocking
|
||||||
self.clientProxy = clientProxy
|
self.clientProxy = clientProxy
|
||||||
self.userIndicatorController = userIndicatorController
|
self.userIndicatorController = userIndicatorController
|
||||||
|
|
||||||
@@ -81,6 +84,8 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
switch await clientProxy.roomPreviewForIdentifier(roomID, via: via) {
|
switch await clientProxy.roomPreviewForIdentifier(roomID, via: via) {
|
||||||
case .success(let roomDetails):
|
case .success(let roomDetails):
|
||||||
state.roomDetails = roomDetails
|
state.roomDetails = roomDetails
|
||||||
|
case .failure(.roomPreviewIsPrivate):
|
||||||
|
break // Handled by the mode, we don't need an error indicator.
|
||||||
case .failure:
|
case .failure:
|
||||||
userIndicatorController.submitIndicator(UserIndicator(title: L10n.errorUnknown))
|
userIndicatorController.submitIndicator(UserIndicator(title: L10n.errorUnknown))
|
||||||
}
|
}
|
||||||
@@ -96,8 +101,8 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
state.mode = .join
|
state.mode = .join
|
||||||
} else if roomDetails.isInvited {
|
} else if roomDetails.isInvited {
|
||||||
state.mode = .invited
|
state.mode = .invited
|
||||||
} else if roomDetails.canKnock { // Knocking is not supported yet, treat it as .unknown
|
} else if roomDetails.canKnock, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests.
|
||||||
state.mode = .unknown
|
state.mode = .knock
|
||||||
} else {
|
} else {
|
||||||
state.mode = .unknown
|
state.mode = .unknown
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,10 +51,11 @@ struct JoinRoomScreen: View {
|
|||||||
.foregroundStyle(.compound.textPrimary)
|
.foregroundStyle(.compound.textPrimary)
|
||||||
.multilineTextAlignment(.center)
|
.multilineTextAlignment(.center)
|
||||||
|
|
||||||
if let alias = context.viewState.roomDetails?.canonicalAlias {
|
if let subtitle = context.viewState.subtitle {
|
||||||
Text(alias)
|
Text(subtitle)
|
||||||
.font(.compound.bodyMD)
|
.font(.compound.bodyMD)
|
||||||
.foregroundStyle(.compound.textSecondary)
|
.foregroundStyle(.compound.textSecondary)
|
||||||
|
.multilineTextAlignment(.center)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let memberCount = context.viewState.roomDetails?.memberCount {
|
if let memberCount = context.viewState.roomDetails?.memberCount {
|
||||||
@@ -168,6 +169,7 @@ struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
|
|
||||||
return JoinRoomScreenViewModel(roomID: "1",
|
return JoinRoomScreenViewModel(roomID: "1",
|
||||||
via: [],
|
via: [],
|
||||||
|
allowKnocking: true,
|
||||||
clientProxy: clientProxy,
|
clientProxy: clientProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController)
|
userIndicatorController: ServiceLocator.shared.userIndicatorController)
|
||||||
|
|||||||
@@ -481,6 +481,8 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
do {
|
do {
|
||||||
let roomPreview = try await client.getRoomPreviewFromRoomId(roomId: identifier, viaServers: via)
|
let roomPreview = try await client.getRoomPreviewFromRoomId(roomId: identifier, viaServers: via)
|
||||||
return .success(.init(roomPreview))
|
return .success(.init(roomPreview))
|
||||||
|
} catch let error as ClientError where error.code == .forbidden {
|
||||||
|
return .failure(.roomPreviewIsPrivate)
|
||||||
} catch {
|
} catch {
|
||||||
MXLog.error("Failed retrieving preview for room: \(identifier) with error: \(error)")
|
MXLog.error("Failed retrieving preview for room: \(identifier) with error: \(error)")
|
||||||
return .failure(.sdkError(error))
|
return .failure(.sdkError(error))
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ enum ClientProxyError: Error {
|
|||||||
case invalidMedia
|
case invalidMedia
|
||||||
case invalidUserIDServerName
|
case invalidUserIDServerName
|
||||||
case failedUploadingMedia(Error, MatrixErrorCode)
|
case failedUploadingMedia(Error, MatrixErrorCode)
|
||||||
|
case roomPreviewIsPrivate
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SlidingSyncConstants {
|
enum SlidingSyncConstants {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2e66eb9d53892d4849c24958504b80a47029b242d19d37750eda9e92be99f16a
|
oid sha256:ff22a5528ff2c3df3d16f8340919a8b31117603d374db7531d26021c774d3512
|
||||||
size 1980877
|
size 1980756
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:84719756861fed326f1b076a63e9229a3d725da98342a3f31d00e8614865537e
|
oid sha256:656011b2f47a26f568bf84df3ccd5c14281722a9102bf8b3b79b714c22c26b21
|
||||||
size 1944887
|
size 1944766
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
|
oid sha256:29ba90bb910486c5aba146e7f6692975d76adbde4c7aa291ada4164291726848
|
||||||
size 2004327
|
size 1936891
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:7eb5aca42879ec370564b491fe57faf286d479a4aa02566e6fa681004f322a7a
|
oid sha256:a0b850d16e626197c8ce12f6b6467284adefaf19295b2c75deb13599bda4796f
|
||||||
size 1953618
|
size 1963867
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2f249e7835423b71f8b5920def18070ba55875b2edc43898662e00d4780b9bc1
|
oid sha256:0cfe8c8a252ff738c7f630d083e5da55717027c01b21bf7c296346516fcc4650
|
||||||
size 1983443
|
size 1983322
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d17a5a65a74b86c36e84246a0c7dabaf646e7c0df3990b8c85b3699bca3241cf
|
oid sha256:c091decb9974de8d19b018e19285428fc5c5ee13c4706347c08b1338724db372
|
||||||
size 1946578
|
size 1946457
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
|
oid sha256:de02b3401e0343c7784e8b29f8a255c4eafaf47574f55fdf518cf3578cd966a5
|
||||||
size 2004327
|
size 1938644
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:74c93b3fc3f013c500294c67cd801a6bec14b184dfac231c176ffc5b2b48158e
|
oid sha256:b3cb6c41cb549203b7bae407d7dd9bc11381a1f15087d148dd067dbaab819e75
|
||||||
size 1957146
|
size 1977775
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:60a7304bba6808b92b41a36a83c8a9989ba676b893da7d2afec9dbc5e085c59f
|
oid sha256:f3ebfa2fc96c65b8652344cb46cf33f3c546f3f84e74d8b3403be8aebccb9972
|
||||||
size 818315
|
size 818046
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:64419b0af6a9d4e89d8cfd5e610f69c744301088eb9f281fa72bb794d799c77c
|
oid sha256:f08cb674179dc0ad5765865043e1d93dc5f9612669e15c702b8c7121cbe110d7
|
||||||
size 796935
|
size 796666
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
|
oid sha256:5ef205a1f5a1756ba3f89b8c0dd2dcfccb39da7e5bc1e72abd90fd2a3d803812
|
||||||
size 829540
|
size 791829
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:8fe3c40f41cd97a62e3bc8a1054e875becaeffc5279a55d422c419464ef6ec55
|
oid sha256:58a83d3709c4e7d6ac704ebb46b400e4127e97b91d7a13e5a5c0ab45df214827
|
||||||
size 820702
|
size 820433
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:660601c6904b98270312dadbfc9e3d14aedb66e00fc6ce6f552cd4419436720e
|
oid sha256:24751938068a6a8a711d083640911f0b0d0a7a2d46e9c0cb649804a89e850e88
|
||||||
size 798700
|
size 798431
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
|
oid sha256:4e8df72dbca5c057ce933d2602d5e29350a3af0e79f6c1431b6cee897030e56d
|
||||||
size 829540
|
size 793487
|
||||||
|
|||||||
Reference in New Issue
Block a user